diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 6807dcadc4cb98365e8274cc862813d00af45a10..c931bb75572875ab1797c75701c1cd3a7f1c502b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -5378,6 +5378,8 @@ class IAllocator(object):
 
     node_data = self.lu.rpc.call_node_info(node_list, cfg.GetVGName(),
                                            hypervisor)
+    node_iinfo = self.lu.rpc.call_all_instances_info(node_list,
+                       cluster_info.enabled_hypervisors)
     for nname in node_list:
       ninfo = cfg.GetNodeInfo(nname)
       if nname not in node_data or not isinstance(node_data[nname], dict):
@@ -5398,6 +5400,13 @@ 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]:
+            i_used_mem = 0
+          else:
+            i_used_mem = int(node_iinfo[nname][iinfo.name]['memory'])
+          i_mem_diff = beinfo[constants.BE_MEMORY] - i_used_mem
+          remote_info['memory_free'] -= max(0, i_mem_diff)
+
           if iinfo.status == "up":
             i_p_up_mem += beinfo[constants.BE_MEMORY]