diff --git a/phosphor-mapper b/phosphor-mapper
index fa6bb60..675ad40 100644
--- a/phosphor-mapper
+++ b/phosphor-mapper
@@ -139,12 +139,18 @@
     def discovery_pending(self):
         return not bool(self.service)
 
+    def cache_get(self, path):
+        cache_entry = self.cache.get(path, {})
+        if cache_entry is None:
+            # hide path elements without any interfaces
+            cache_entry = {}
+        return cache_entry
+
     def add_new_objmgr(self, path, owner):
         # We don't get a signal for the ObjectManager
         # interface itself, so if we see a signal from
         # make sure its in our cache, and add it if not.
-        cache_entry = self.cache.get(path, {})
-        cache_entry = cache_entry if cache_entry is not None else {}
+        cache_entry = self.cache_get(path)
         old = self.interfaces_get(cache_entry, owner)
         new = list(set(old).union([dbus.BUS_DAEMON_IFACE + '.ObjectManager']))
         self.update_interfaces(path, owner, old, new)
@@ -152,9 +158,10 @@
     def interfaces_added_handler(self, path, iprops, **kw):
         path = str(path)
         owner = str(kw['sender'])
-        self.add_new_objmgr(str(kw['sender_path']), owner)
         interfaces = self.get_signal_interfaces(owner, iprops.iterkeys())
-        cache_entry = self.cache.get(path, {})
+        if interfaces:
+            self.add_new_objmgr(str(kw['sender_path']), owner)
+        cache_entry = self.cache_get(path)
         old = self.interfaces_get(cache_entry, owner)
         new = list(set(interfaces).union(old))
         self.update_interfaces(path, owner, old, new)
@@ -162,9 +169,10 @@
     def interfaces_removed_handler(self, path, interfaces, **kw):
         path = str(path)
         owner = str(kw['sender'])
-        self.add_new_objmgr(str(kw['sender_path']), owner)
         interfaces = self.get_signal_interfaces(owner, interfaces)
-        cache_entry = self.cache.get(path, {})
+        if interfaces:
+            self.add_new_objmgr(str(kw['sender_path']), owner)
+        cache_entry = self.cache_get(path)
         old = self.interfaces_get(cache_entry, owner)
         new = list(set(old).difference(interfaces))
         self.update_interfaces(path, owner, old, new)
@@ -307,7 +315,7 @@
 
     @dbus.service.method(obmc.mapper.MAPPER_IFACE, 's', 'a{sas}')
     def GetObject(self, path):
-        o = self.cache.get(path)
+        o = self.cache_get(path)
         if not o:
             raise MapperNotFoundException(path)
         return o
@@ -431,7 +439,7 @@
                 'reverse', endpoint, owner, forward_path)
 
             # create the association if the endpoint exists
-            if self.cache.get(endpoint, None) is None:
+            if not self.cache_get(endpoint):
                 continue
 
             self.update_association(forward_path, [], [endpoint])
@@ -481,8 +489,8 @@
             paths.append('/')
 
         for path in paths:
-            obj = self.cache.get(path, None)
-            if obj is None:
+            obj = self.cache_get(path)
+            if not obj:
                 continue
             objs[path] = obj
 
