lots of changes
diff --git a/bin/system_manager.py b/bin/system_manager.py
index e96e547..cb37c41 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -3,13 +3,14 @@
 import sys
 import subprocess
 from gi.repository import GObject
-
 import dbus
 import dbus.service
 import dbus.mainloop.glib
 import os
 import PropertyManager
 
+import Openbmc
+
 if (len(sys.argv) < 2):
 	print "Usage:  system_manager.py [system name]"
 	exit(1)
@@ -25,15 +26,15 @@
 class SystemManager(dbus.service.Object):
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
-		
 		self.property_manager = PropertyManager.PropertyManager(bus,System.CACHE_PATH)
+
 		## Signal handlers
 		bus.add_signal_receiver(self.NewBusHandler,
 					dbus_interface = 'org.freedesktop.DBus', 
 					signal_name = "NameOwnerChanged")
 		bus.add_signal_receiver(self.CacheMeHandler,
 					signal_name = 'CacheMe', path_keyword='path',interface_keyword='interface')
-
+		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
 
 		try:
 			# launch dbus object processes
@@ -43,8 +44,9 @@
 			## TODO: error handling
 			pass
 		
-		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
+		## Add poll for heartbeat
     		GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
+		
 
 	def CacheMeHandler(self,busname,path=None,interface=None):
 		#interface_name = 'org.openbmc.Fru'
@@ -115,15 +117,21 @@
 					obj_path = obj_root+'/'+instance['name']
 					obj_paths.append(obj_path)
 					if (instance.has_key('properties')):
+						print "load props: "+obj_path
 						self.property_manager.loadProperties(bus_name,obj_path,												instance['properties'])
 
+				## scan all used interfaces and get interfaces with init method
+				
+
 				## After object properties are setup, call init method if requested
-				if (System.SYSTEM_CONFIG[bus_name].has_key('init_methods')):
-					for obj_path in obj_paths:
-						for init_interface in System.SYSTEM_CONFIG[bus_name]['init_methods']:
-							obj = bus.get_object(bus_name,obj_path)
-							intf = dbus.Interface(obj,init_interface)
-							print "calling init:" +init_interface
+				#if (System.SYSTEM_CONFIG[bus_name].has_key('init_methods')):
+				for obj_path in obj_paths:
+					obj = bus.get_object(bus_name,obj_path)
+					methods = Openbmc.get_methods(obj)
+					for intf_name in methods.keys():
+						if (methods[intf_name].has_key('init')):
+							intf = dbus.Interface(obj,intf_name)
+							print "Calling init: " +intf_name
 							intf.init()