diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index 8247568..fba4c9b 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -286,6 +286,7 @@
 
             for x in pending:
                 x()
+            self.IntrospectionComplete(owner)
 
     def discovery_error(self, owner, path, e):
         if owner in self.defer_signals:
@@ -737,6 +738,10 @@
 
         return self.filter_interfaces(list(objs.iteritems()), interfaces)
 
+    @dbus.service.signal(obmc.mapper.MAPPER_IFACE + '.Private', 's')
+    def IntrospectionComplete(self, name):
+        pass
+
 
 def server_main():
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
diff --git a/obmc/mapper/utils.py b/obmc/mapper/utils.py
index 706cc61..3937cf6 100644
--- a/obmc/mapper/utils.py
+++ b/obmc/mapper/utils.py
@@ -40,16 +40,14 @@
         self.waitlist_keyword = kw.pop('waitlist_keyword', None)
 
         self.bus.add_signal_receiver(
-            self.name_owner_changed_handler,
-            dbus_interface=dbus.BUS_DAEMON_IFACE,
-            signal_name='NameOwnerChanged')
+            self.introspection_handler,
+            dbus_interface=obmc.mapper.MAPPER_IFACE + '.Private',
+            signal_name='IntrospectionComplete')
         self.bus.add_signal_receiver(
-            self.interfaces_added_handler,
-            dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager',
-            sender_keyword='sender',
-            signal_name='InterfacesAdded')
+            self.introspection_handler,
+            dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager')
 
-        self.name_owner_changed_handler()
+        self.introspection_handler()
 
     @staticmethod
     def default_error(e):
@@ -61,11 +59,11 @@
 
         self.done = True
         self.bus.remove_signal_receiver(
-            self.name_owner_changed_handler,
-            dbus_interface=dbus.BUS_DAEMON_IFACE,
-            signal_name='NameOwnerChanged')
+            self.introspection_handler,
+            dbus_interface=obmc.mapper.MAPPER_IFACE + '.Private',
+            signal_name='IntrospectionComplete')
         self.bus.remove_signal_receiver(
-            self.interfaces_added_handler,
+            self.introspection_handler,
             dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager',
             signal_name='InterfacesAdded')
 
@@ -119,18 +117,10 @@
         self.waitlist[path] = list(info)[0]
         self.check_done()
 
-    def name_owner_changed_handler(self, *a, **kw):
+    def introspection_handler(self, *a, **kw):
         if self.done:
             return
 
         for path in filter(
                 lambda x: not self.waitlist[x], self.waitlist.keys()):
             self.get_object_async(path, 0)
-
-    def interfaces_added_handler(self, path, *a, **kw):
-        if self.done:
-            return
-
-        if path in self.waitlist.keys():
-            self.waitlist[path] = kw['sender']
-        self.check_done()
