diff --git a/lib/backend.py b/lib/backend.py
index a54a6ced3379216ce6524b83f8a12322db7571b5..14d600d5d30cf7d15ac45b852d368d902f783e72 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -695,11 +695,11 @@ def GetAllInstancesInfo(hypervisor_list):
           # invocations of the different hypervisors
           for key in 'memory', 'vcpus':
             if value[key] != output[name][key]:
-              raise errors.HypervisorError("Instance %s is running twice"
-                                           " with different parameters" % name)
+              _Fail("Instance %s is running twice"
+                    " with different parameters", name)
         output[name] = value
 
-  return output
+  return True, output
 
 
 def InstanceOsAdd(instance, reinstall):
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index ebe9a0d231c2c4e5bdfccc57238b30d97ded085a..cc22e3d2f5a362cae1d26f2027dda662bbf67b69 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3446,12 +3446,12 @@ class LUQueryInstances(NoHooksLU):
         if result.offline:
           # offline nodes will be in both lists
           off_nodes.append(name)
-        if result.failed:
+        if result.failed or result.RemoteFailMsg():
           bad_nodes.append(name)
         else:
-          if result.data:
-            live_data.update(result.data)
-            # else no instance is alive
+          if result.payload:
+            live_data.update(result.payload)
+          # else no instance is alive
     else:
       live_data = dict([(name, {}) for name in instance_names])
 
@@ -6914,6 +6914,10 @@ class IAllocator(object):
         nresult.Raise()
         if not isinstance(nresult.data, dict):
           raise errors.OpExecError("Can't get data for node %s" % nname)
+        msg = node_iinfo[nname].RemoteFailMsg()
+        if msg:
+          raise errors.OpExecError("Can't get node instance info"
+                                   " from node %s: %s" % (nname, msg))
         remote_info = nresult.data
         for attr in ['memory_total', 'memory_free', 'memory_dom0',
                      'vg_size', 'vg_free', 'cpu_total']:
@@ -6930,10 +6934,10 @@ class IAllocator(object):
         for iinfo, beinfo in i_list:
           if iinfo.primary_node == nname:
             i_p_mem += beinfo[constants.BE_MEMORY]
-            if iinfo.name not in node_iinfo[nname].data:
+            if iinfo.name not in node_iinfo[nname].payload:
               i_used_mem = 0
             else:
-              i_used_mem = int(node_iinfo[nname].data[iinfo.name]['memory'])
+              i_used_mem = int(node_iinfo[nname].payload[iinfo.name]['memory'])
             i_mem_diff = beinfo[constants.BE_MEMORY] - i_used_mem
             remote_info['memory_free'] -= max(0, i_mem_diff)