diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded
index b9b51df80d72b009ac661d3c23dcd749ef274f36..2137d1beca3485a9d9ed115407bb4f76d19bd4c3 100755
--- a/daemons/ganeti-noded
+++ b/daemons/ganeti-noded
@@ -93,7 +93,16 @@ class NodeHttpServer(http.server.HttpServer):
       raise http.HttpNotFound()
 
     try:
-      return method(req.request_body)
+      rvalue = method(req.request_body)
+      if not isinstance(rvalue, tuple):
+        return (False, "Invalid result from backend function: expected"
+                " tuple, got %s" % type(rvalue))
+      elif len(rvalue) != 2:
+        return (False, "Invalid result from backend function: expected"
+                " 2-element tuple, got tuple of length %d" % len(rvalue))
+      else:
+        return rvalue
+
     except backend.RPCFail, err:
       # our custom failure exception; str(err) works fine if the
       # exception was constructed with a single argument, and in
@@ -107,9 +116,9 @@ class NodeHttpServer(http.server.HttpServer):
       # And return the error's arguments, which must be already in
       # correct tuple format
       return err.args
-    except:
+    except Exception, err:
       logging.exception("Error in RPC call")
-      raise
+      return False, "Error while executing backend function: %s" % str(err)
 
   # the new block devices  --------------------------