cleanup
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 441e957..7f94578 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -56,9 +56,10 @@
 				new_val = val.replace("<inventory_root>",System.INVENTORY_ROOT)
 				System.ID_LOOKUP[category][key] = new_val
 	
-		self.SystemStateHandler("BMC_INIT")
+		self.SystemStateHandler(System.SYSTEM_STATES[0])
 		print "SystemManager Init Done"
 
+
 	def SystemStateHandler(self,state_name):
 		print "Checking previous state started..."
 		i = 0
@@ -97,10 +98,27 @@
 			pass
 
 		self.current_state = state_name
-		
+
+	def gotoNextState(self):
+		s = 0
+		for i in range(len(System.SYSTEM_STATES)):
+			if (System.SYSTEM_STATES[i] == self.current_state):
+				s = i+1
+	
+		if (s == len(System.SYSTEM_STATES)):
+			print "ERROR SystemManager: No more system states"
+		else:
+			new_state_name = System.SYSTEM_STATES[s]
+			print "SystemManager Goto System State: "+new_state_name
+			self.SystemStateHandler(new_state_name)
+	
+	
 	@dbus.service.method(DBUS_NAME,
-		in_signature='ss', out_signature='(sss)')
-	def getObjectFromId(self,category,key):
+		in_signature='', out_signature='s')
+	def getSystemState(self):
+		return self.current_state
+
+	def doObjectLookup(self,category,key):
 		bus_name = ""
 		obj_path = ""
 		intf_name = INTF_ITEM
@@ -108,25 +126,6 @@
 			obj_path = System.ID_LOOKUP[category][key]
 			bus_name = self.bus_name_lookup[obj_path]
 			parts = obj_path.split('/')
-			if (parts[2] == 'sensor'):
-				intf_name = INTF_SENSOR
-		except Exception as e:
-			print "ERROR SystemManager: "+str(e)+" not found in lookup"
-
-		return [bus_name,obj_path,intf_name]
-
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='sy', out_signature='(sss)')
-	def getObjectFromByteId(self,category,key):
-		bus_name = ""
-		obj_path = ""
-		intf_name = INTF_ITEM
-		try:
-			byte = int(key)
-			obj_path = System.ID_LOOKUP[category][byte]
-			bus_name = self.bus_name_lookup[obj_path]
-			parts = obj_path.split('/')
 			if (parts[3] == 'sensor'):
 				intf_name = INTF_SENSOR
 		except Exception as e:
@@ -134,6 +133,16 @@
 
 		return [bus_name,obj_path,intf_name]
 
+	@dbus.service.method(DBUS_NAME,
+		in_signature='ss', out_signature='(sss)')
+	def getObjectFromId(self,category,key):
+		return self.doObjectLookup(category,key)
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='sy', out_signature='(sss)')
+	def getObjectFromByteId(self,category,key):
+		byte = int(key)
+		return self.doObjectLookup(category,byte)
 	
 	def start_process(self,bus_name):
 		if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
@@ -176,7 +185,6 @@
 					break;	
 		return r
 	
-
 	def NewBusHandler(self, bus_name, a, b):
 		if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
 			objects = {}
@@ -192,7 +200,6 @@
 				pass
 	
 			if (System.SYSTEM_CONFIG.has_key(bus_name)):
-				System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
 				for instance_name in objects.keys(): 
 					obj_path = objects[instance_name]['PATH']
 					for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
@@ -213,18 +220,9 @@
 				for obj_path in System.EXIT_STATE_DEPEND[self.current_state]:
 					if (System.EXIT_STATE_DEPEND[self.current_state][obj_path] == 0):
 						state = 0
+				## all required objects have started so go to next state
 				if (state == 1):
-					s = 0
-					for i in range(len(System.SYSTEM_STATES)):
-						if (System.SYSTEM_STATES[i] == self.current_state):
-							s = i+1
-
-					if (s == len(System.SYSTEM_STATES)):
-						print "ERROR SystemManager: No more system states"
-					else:
-						new_state_name = System.SYSTEM_STATES[s]
-						print "SystemManager Goto System State: "+new_state_name
-						self.SystemStateHandler(new_state_name)
+					self.gotoNextState()
 			except:
 				pass