support InterfaceAdded signal
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index b370d8b..b87fec8 100755
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -5,17 +5,11 @@
 GPIO_DEV = '/sys/class/gpio'
 BUS = "system"
 
-ENUMS = {
-	'org.openbmc.SensorIntegerThreshold.state' : 
-		['NOT_SET','NORMAL','LOWER_CRITICAL','LOWER_WARNING','UPPER_WARNING','UPPER_CRITICAL'],
-}
-
 def getSystemName():
 	#use filename as system name, strip off path and ext
 	parts = __file__.replace('.pyc','').replace('.py','').split('/')
 	return parts[len(parts)-1]
 
-
 def getDBus():
 	bus = None
 	if (BUS == "session"):
@@ -24,18 +18,11 @@
 		bus = dbus.SystemBus()
 	return bus
 
-
-def getManagerInterface(bus,manager):
-	bus_name = "org.openbmc.managers."+manager
-	obj_name = "/org/openbmc/managers/"+manager
-	obj = bus.get_object(bus_name,obj_name)
-	return dbus.Interface(obj,bus_name)
-
-
 class DbusProperties(dbus.service.Object):
 	def __init__(self):
 		dbus.service.Object.__init__(self)
 		self.properties = {}
+		self.object_path = ""
 
 	@dbus.service.method(dbus.PROPERTIES_IFACE,
 		in_signature='ss', out_signature='v')
@@ -94,17 +81,66 @@
 		if (value_changed == True):
 			self.PropertiesChanged(interface_name, prop_dict, [])
 	
-
 	@dbus.service.signal(dbus.PROPERTIES_IFACE,
 		signature='sa{sv}as')
 	def PropertiesChanged(self, interface_name, changed_properties,
 		invalidated_properties):
 		pass
 
+class DbusObjectManager(dbus.service.Object):
+	def __init__(self):
+		dbus.service.Object.__init__(self)
+		self.objects = {}
+
+	def add(self,object_path,obj):
+		self.objects[object_path] = obj
+		self.InterfacesAdded(object_path,obj.properties)
+
+	def remove(self,object_path):
+		obj = self.objects.pop(object_path,None)
+		obj.remove_from_connection()
+		self.InterfacesRemoved(object_path,obj.properties.keys())
+
+	def get(self,object_path):
+		return self.objects[object_path]
+
+	@dbus.service.method("org.freedesktop.DBus.ObjectManager",
+		in_signature='', out_signature='a{oa{sa{sv}}}')
+	def GetManagedObjects(self):
+		data = {}
+		for objpath in self.objects.keys():
+			data[objpath] = self.objects[objpath].properties
+		return data
+
+	@dbus.service.signal("org.freedesktop.DBus.ObjectManager",
+		signature='oa{sa{sv}}')
+	def InterfacesAdded(self,object_path,properties):
+		self.ObjectAdded(object_path,"")
+
+	@dbus.service.signal("org.freedesktop.DBus.ObjectManager",
+		signature='oas')
+	def InterfacesRemoved(self,object_path,interfaces):
+		pass
+
+	## Legacy support, need to eventually refactor out
 	@dbus.service.signal("org.openbmc.Object.ObjectMapper",
 		signature='ss')
 	def ObjectAdded(self,object_path,interface_name):
 		pass
 
+	## flattens interfaces
+	@dbus.service.method('org.openbmc.Object.Enumerate',
+		in_signature='', out_signature='a{sa{sv}}')
+	def enumerate(self):
+		data = {}
+		for objpath in self.objects.keys():
+			props = self.objects[objpath].properties
+			data[objpath] = { }
+			for iface in props.keys():
+				data[objpath].update(props[iface])
+				
+		return data
+		
+