diff --git a/bin/system_manager.py b/bin/system_manager.py
index cb37c41..515fa1f 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -32,30 +32,39 @@
 		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")
+		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
 
-		try:
-			# launch dbus object processes
-			for bus_name in System.SYSTEM_CONFIG.keys():
+		self.current_state = ""
+		self.system_states = {}
+		self.IPMI_ID_LOOKUP = {}
+		for bus_name in System.SYSTEM_CONFIG.keys():
+			sys_state = System.SYSTEM_CONFIG[bus_name]['system_state']
+			if (self.system_states.has_key(sys_state) == False):
+				self.system_states[sys_state] = []
+			self.system_states[sys_state].append(bus_name)
+		self.SystemStateHandler("INIT")
+		print "SystemManager Init Done"
+
+
+	def SystemStateHandler(self,state_name):
+		print "Running System State: "+state_name
+		if (self.system_states.has_key(state_name)):
+			for bus_name in self.system_states[state_name]:
 				self.start_process(bus_name)
-		except Exception as e:
-			## TODO: error handling
-			pass
 		
-		## Add poll for heartbeat
-    		GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
+		if (state_name == "INIT"):
+			## Add poll for heartbeat
+	    		GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
 		
+		if (System.ENTER_STATE_CALLBACK.has_key(state_name)):
+			cb = System.ENTER_STATE_CALLBACK[state_name]
+			obj = bus.get_object(cb['bus_name'],cb['obj_name'])
+			method = obj.get_dbus_method(cb['method_name'],cb['interface_name'])
+			method()
 
-	def CacheMeHandler(self,busname,path=None,interface=None):
-		#interface_name = 'org.openbmc.Fru'
-		print "CacheME: "+busname+","+path+","+interface
-		data = {}
-		cache = System.CACHED_INTERFACES.has_key(interface)
-		self.property_manager.saveProperties(busname,path,interface,cache,data)
-
-
+		current_state = state_name
+			
 	def start_process(self,bus_name):
 		if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
 			process_name = System.BIN_PATH+System.SYSTEM_CONFIG[bus_name]['process_name']
@@ -64,16 +73,17 @@
 			for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
 				cmdline.append(instance['name'])
 			try:
-				print "Starting process: "+" ".join(cmdline)
+				print "Starting process: "+" ".join(cmdline)+": "+bus_name
 				System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline);
 			except Exception as e:
 				## TODO: error
 				print "Error starting process: "+" ".join(cmdline)
 
 	def heartbeat_check(self):
-		print "heartbeat check"
+		#print "heartbeat check"
 		for bus_name in System.SYSTEM_CONFIG.keys():
-			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
+			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True and
+				System.SYSTEM_CONFIG[bus_name].has_key('popen')):
 				## even if process doesn't request heartbeat check, 
 				##   make sure process is still alive
 				p = System.SYSTEM_CONFIG[bus_name]['popen']
@@ -97,44 +107,50 @@
 						self.start_process(bus_name)			
 					else:
 						System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-						print "Heartbeat ok: "+bus_name
+						#print "Heartbeat ok: "+bus_name
 					
 		return True
 
 	def HeartbeatHandler(self,bus_name):
+		#print "Heartbeat seen: "+bus_name
 		System.SYSTEM_CONFIG[bus_name]['heartbeat_count']=1	
 
 	def NewBusHandler(self, bus_name, a, b):
 		if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
 			if (System.SYSTEM_CONFIG.has_key(bus_name)):
 				System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-				obj_root = "/"+bus_name.replace('.','/')
-				obj_paths = []
+				objects = {}
+				Openbmc.get_objs(bus,bus_name,Openbmc.OBJ_PREFIX,objects)
+					
+				for instance_name in objects.keys(): 
+					obj_path = objects[instance_name]['PATH']
+					for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
+						if (instance.has_key('properties') and instance['name'] == instance_name):
+							props = instance['properties']
+							print "Load Properties: "+obj_path
+							self.property_manager.loadProperties(bus_name,obj_path,props)
+							## create a lookup for ipmi id to object path
+							if (props.has_key('org.openbmc.SensorValue')):
+								if (props['org.openbmc.SensorValue'].has_key('ipmi_id')):
+									ipmi_id = props['org.openbmc.SensorValue']['ipmi_id']
+									## TODO: check for duplicate ipmi id
+									self.IPMI_ID_LOOKUP[ipmi_id]=[bus_name,obj_path]
 
-				## Loads object properties from system config file
-				##  then overlays saved properties from file
-				for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
-					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:
-					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()
-
-
+					## If object has an init method, call it
+					for init_intf in objects[instance_name]['INIT']:
+						obj = bus.get_object(bus_name,obj_path)
+						intf = dbus.Interface(obj,init_intf)
+						print "Calling init method: " +obj_path+" : "+init_intf
+						intf.init()
+#
+	@dbus.service.method(DBUS_NAME,
+		in_signature='y', out_signature='ss')
+	def getObjFromIpmi(self,ipmi_id):
+		obj_path = ""
+		## TODO: handle lookup failing
+		if (self.IPMI_ID_LOOKUP.has_key(ipmi_id) == True):
+			obj_info = self.IPMI_ID_LOOKUP[ipmi_id]
+		return obj_info
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='s', out_signature='sis')
