diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py
index 04549b98b5a9b264ec53f6647bac09a268f336a1..5e7370e12709fc05612fd4c2eec55fe991a56ac6 100644
--- a/lib/confd/querylib.py
+++ b/lib/confd/querylib.py
@@ -161,7 +161,7 @@ class InstanceIpToNodePrimaryIpQuery(ConfdQuery):
     pnodes_list = []
 
     for instance_ip in instances_list:
-      instance = self.reader.GetInstanceByIp(instance_ip)
+      instance = self.reader.GetInstanceByLinkIp(instance_ip, None)
       if not instance:
         logging.debug("Invalid instance IP: %s" % instance)
         pnodes_list.append(QUERY_UNKNOWN_ENTRY_ERROR)
diff --git a/lib/ssconf.py b/lib/ssconf.py
index 9b4eaa0941fefb14669cf997718010436b9818a0..bf273df85db49dc23a3b12e15231c41883d64d01 100644
--- a/lib/ssconf.py
+++ b/lib/ssconf.py
@@ -59,9 +59,8 @@ class SimpleConfigReader(object):
     self._last_size = None
 
     self._config_data = None
-    self._instances_ips = None
     self._inst_ips_by_link = None
-    self._ip_to_instance = None
+    self._ip_to_inst_by_link = None
     self._mc_primary_ips = None
     self._nodes_primary_ips = None
 
@@ -106,7 +105,7 @@ class SimpleConfigReader(object):
       raise errors.ConfigurationError("Cannot load config file %s: %s" %
                                       (self._file_name, err))
 
-    self._ip_to_instance = {}
+    self._ip_to_inst_by_link = {}
     self._instances_ips = []
     self._inst_ips_by_link = {}
     c_nparams = self._config_data['cluster']['nicparams'][constants.PP_DEFAULT]
@@ -114,11 +113,11 @@ class SimpleConfigReader(object):
       instance = self._config_data['instances'][iname]
       for nic in instance['nics']:
         if 'ip' in nic and nic['ip']:
-          self._instances_ips.append(nic['ip'])
-          self._ip_to_instance[nic['ip']] = iname
           params = objects.FillDict(c_nparams, nic['nicparams'])
           if not params['link'] in self._inst_ips_by_link:
             self._inst_ips_by_link[params['link']] = []
+            self._ip_to_inst_by_link[params['link']] = {}
+          self._ip_to_inst_by_link[params['link']][nic['ip']] = iname
           self._inst_ips_by_link[params['link']].append(nic['ip'])
 
     self._nodes_primary_ips = []
@@ -185,10 +184,14 @@ class SimpleConfigReader(object):
     offline = self._config_data["nodes"][node]["offline"]
     return master_candidate, drained, offline
 
-  def GetInstanceByIp(self, ip):
-    if ip not in self._ip_to_instance:
+  def GetInstanceByLinkIp(self, ip, link):
+    if not link:
+      link = self.GetDefaultNicLink()
+    if not link in self._ip_to_inst_by_link:
       return None
-    return self._ip_to_instance[ip]
+    if not ip in self._ip_to_inst_by_link[link]:
+      return None
+    return self._ip_to_inst_by_link[link][ip]
 
   def GetNodePrimaryIp(self, node):
     """Get a node's primary ip
@@ -223,8 +226,9 @@ class SimpleConfigReader(object):
     return self._mc_primary_ips
 
   def GetInstancesIps(self, link):
-    if link is None:
-      return self._instances_ips
+    if not link:
+      link = self.GetDefaultNicLink()
+
     if link in self._inst_ips_by_link:
       return self._inst_ips_by_link[link]
     else: