diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index d7c596b..2d5c800 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -5,7 +5,7 @@
 import Openbmc
 
 HOME_PATH = './'
-BIN_PATH = HOME_PATH
+BIN_PATH = HOME_PATH+'bin/'
 CACHE_PATH = HOME_PATH+'cache/'
 FRU_PATH = CACHE_PATH+'frus/'
 
@@ -45,32 +45,17 @@
 		]
 	}
 
-SYSTEM_CONFIG['org.openbmc.managers.Frus'] = {
+SYSTEM_CONFIG['org.openbmc.managers.Inventory'] = {
 		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'monitor_process' : True,
-		'process_name' : 'fru_manager.py',
+		'process_name' : 'inventory_manager.py',
 		'heartbeat' : 'no',
 		'rest_name' : 'frus',
 		'instances' : [	
 			{
 				'name' : 'Barreleye',
-				'user_label': 'Fru Manager',
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.managers.Ipmi'] = {
-		'system_state' : 'STANDBY',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'ipmi_manager.py',
-		'heartbeat' : 'no',
-		'rest_name' : 'frus',
-		'instances' : [	
-			{
-				'name' : 'Barreleye',
-				'user_label': 'Ipmi Manager',
+				'user_label': 'Inventory Manager',
 			}
 		]
 	}
@@ -348,7 +333,6 @@
 		'manufacturer' : 'DELTA',
 		'fru'	       : True,
 		'location' : 'F0',
-		'sensor_link' : 'fans/Fan_0',
 	},
 	'/system/fan1' :
 	{
@@ -356,7 +340,6 @@
 		'manufacturer' : 'DELTA',
 		'fru'	       : True,
 		'location' : 'F1',
-		'sensor_link' : 'fans/Fan_1',
 	},
 	'/system/motherboard/bmc' :
 	{
@@ -376,27 +359,27 @@
 	{
 		'ftype'        : Openbmc.FRU_TYPES['CORE'],
 		'fru'	       : False,
-		'sensor_link' : 1,	
+		'sensor_id'    : 1,	
 	},
 	'/system/motherboard/cpu0/core1' :
 	{
 		'ftype'        : Openbmc.FRU_TYPES['CORE'],
 		'fru'	       : False,
-		'sensor_link' : 2,	
+		'sensor_id'    : 2,	
 	},
 	'/system/motherboard/dimm0' :
 	{
 		'ftype'        : Openbmc.FRU_TYPES['DIMM'],
 		'fru'	       : True,
 		'fru_id'       : 12,
-		'sensor_link'  : 20,	
+		'sensor_id'    : 20,	
 	},
 	'/system/motherboard/dimm1' :
 	{
 		'ftype'        : Openbmc.FRU_TYPES['DIMM'],
 		'fru'	       : True,
 		'fru_id'       : 13,
-		'sensor_link'  : 21,	
+		'sensor_id'    : 21,	
 	},
 }
 
diff --git a/bin/fru_manager.py b/bin/fru_manager.py
deleted file mode 100644
index 220b7d3..0000000
--- a/bin/fru_manager.py
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import cPickle
-import json
-
-if (len(sys.argv) < 2):
-	print "Usage:  fru_manager.py [system name]"
-	exit(1)
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.managers.Frus'
-OBJ_NAME = '/org/openbmc/managers/Frus'
-FRUS = System.FRU_INSTANCES
-
-class Fru:
-	def __init__(self,fru_id,data):
-		if (data.has_key('ftype') == False):
-			raise Exception("Fru must have ftype")
-
-		self.fru_id = fru_id
-		self.data = { 'fru_id' : fru_id }
-		self.ftype = data['ftype']
-		self.update(data)
-	
-	def getField(self,field):
-		return self.data[field]
-
-	def getId(self):
-		return self.fru_id
-
-	def update(self,data):
-		for k in data.keys():
-			self.data[k] = data[k]
-
-	def isCached(self):
-		is_cached = False
-		if (self.data.has_key('cache')):
-			if (self.data['cache']):
-				is_cached = True
-		return is_cached
-	
-	def saveToCache(self):
-		if (self.isCached() == False):
-			return
-		global FRU_PATH
-		print "Caching: "+str(self.fru_id)
-		filename = FRU_PATH+"fru_"+str(self.fru_id)
-		output = open(filename, 'wb')
-		## just pickle dict not whole object
-		cPickle.dump(self.data,output)
-		output.close()		
-
-	def loadFromCache(self):
-		if (self.isCached() == False):
-			return;
-		## overlay with pickled data
-		global FRU_PATH
-		filename = FRU_PATH+"fru_"+str(self.fru_id)
-
-		if (os.path.isfile(filename)):
-			print "Loading from cache: "+filename
-			p = open(filename, 'rb')
-			data2 = cPickle.load(p)
-			for k in data2.keys():
-				self.data[k] = data2[k]
-	def toJson(self):
-		return json.dumps(self.data)
-
-	def __str__(self):	
-		r = "Fru: "+str(self.fru_id)+"\n"
-		for f in self.data.keys():
-			r = r+f+" = "+str(self.data[f])+"\n"
-		return r
-
-		
-
-class FruManager(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-		
-		bus.add_signal_receiver(self.UpdateFruHandler,
-					signal_name = 'UpdateFru')
-
-		self.fru_db = {}
-		self.fru_id_lookup = {}
-		for fru in FRUS.keys():
-			#self.updateFru(fid,System.FRUS[fid])
-			if (FRUS[fru].has_key('fru_id')):
-				print fru
-				print FRUS[fru]['fru_id']
-			
-	def UpdateFruHandler(self,fru_id,data):
-		self.updateFru(fru_id,data)		
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='isv', out_signature='')
-	def updateFruField(self,fru_id,field,value):
-		data = { field : value }
-		self.updateFru(fru_id,data)
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='ia{sv}', out_signature='')
-	def updateFru(self,fru_id,data):
-		## translate dbus data into basic data types
-		for k in data.keys():
-			d = Openbmc.DbusProperty(k,data[k])
-			data[k] = d.getBaseValue()
-
-		if (self.fru_db.has_key(fru_id)):
-			## update properties then save to cache
-			print "Updating FRU: "+str(fru_id)
-			self.fru_db[fru_id].update(data)
-			self.fru_db[fru_id].saveToCache()
-		else:
-			## fru doesn't exist, so add
-			## then overlay with data from cache
-			print "Adding FRU: "+str(fru_id)
-			fru = Fru(fru_id,data)
-			self.fru_db[fru_id] = fru
-			fru.loadFromCache()
-
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='s')
-	def getFrus(self):
-		r = ""
-		for f in self.fru_db.keys():
-			r=r+"["+self.fru_db[f].toJson()+"],"
-		return r
-
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = dbus.SessionBus()
-    name = dbus.service.BusName(DBUS_NAME,bus)
-    obj = FruManager(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
-
-    print "Running Fru Manager"
-    mainloop.run()
-
diff --git a/bin/inventory_manager.py b/bin/inventory_manager.py
new file mode 100644
index 0000000..dcc0114
--- /dev/null
+++ b/bin/inventory_manager.py
@@ -0,0 +1,162 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import cPickle
+import json
+
+if (len(sys.argv) < 2):
+	print "Usage:  inventory_manager.py [system name]"
+	exit(1)
+System = __import__(sys.argv[1])
+import Openbmc
+
+DBUS_NAME = 'org.openbmc.managers.Inventory'
+OBJ_NAME = '/org/openbmc/managers/Inventory'
+FRUS = System.FRU_INSTANCES
+FRU_PATH = System.FRU_PATH
+
+## accessor class to FRU data structure
+class Fru:
+	def __init__(self,fru):
+		## validation
+		if (FRUS.has_key(fru) == False):
+			# TODO: event log
+			raise Exception("Invalid FRU path: "+fru)
+		
+		self.fru = fru
+	
+	def getField(self,field):
+		if (FRUS[self.fru].has_key(field) == False):
+			# TODO: event log
+			raise Exception("Invalid field: "+field)
+			
+		return FRUS[self.fru][field]
+
+	def isFru(self):
+		return FRUS[self.fru]['fru']
+
+	def update(self,data):
+		for k in data.keys():
+			FRUS[self.fru][k] = data[k]
+
+	def isCached(self):
+		return True
+
+	def getCacheFilename(self):
+		global FRU_PATH
+		filename = FRU_PATH+self.fru.replace('/','.')
+		return filename
+	
+	def saveToCache(self):
+		if (self.isCached() == False):
+			return
+		print "Caching: "+self.fru
+		output = open(self.getCacheFilename(), 'wb')
+		## just pickle dict not whole object
+		print FRUS[self.fru]
+		cPickle.dump(FRUS[self.fru],output)
+		output.close()
+
+	def loadFromCache(self):
+		if (self.isCached() == False):
+			return;
+		## overlay with pickled data
+		filename=self.getCacheFilename()
+		if (os.path.isfile(filename)):
+			print "Loading from cache: "+filename
+			p = open(filename, 'rb')
+			data2 = cPickle.load(p)
+			for k in data2.keys():
+				FRUS[self.fru][k] = data2[k]
+
+	def __str__(self):	
+		r = "Fru: "+str(self.fru_id)+"\n"
+		for f in self.data.keys():
+			r = r+f+" = "+str(self.data[f])+"\n"
+		return r
+
+		
+
+class InventoryManager(dbus.service.Object):
+	def __init__(self,bus,name):
+		dbus.service.Object.__init__(self,bus,name)
+		
+		bus.add_signal_receiver(self.UpdateFruHandler,
+					signal_name = 'UpdateFru')
+
+		self.fru_db = {}
+		self.fru_id_lookup = {}
+		self.sensor_id_lookup = {}
+
+		for fru_path in FRUS.keys():
+			self.addFru(fru_path)
+			f = FRUS[fru_path]
+			if (f.has_key('fru_id')):
+				self.fru_id_lookup[f['fru_id']] = fru_path
+			if (f.has_key('sensor_id')):
+				self.sensor_id_lookup[f['sensor_id']] = fru_path
+
+			
+	def UpdateFruHandler(self,fru_id,data):
+		self.updateFru(fru_id,data)		
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='y', out_signature='s')	
+	def getFruSensor(self,sensor_id):
+		if (self.sensor_id_lookup.has_key(sensor_id) == False):
+			return ""
+		return self.sensor_id_lookup[sensor_id]
+		
+	def addFru(self,fru_path):
+		new_fru = Fru(fru_path)
+		new_fru.loadFromCache()
+		self.fru_db[fru_path] = new_fru
+				
+	@dbus.service.method(DBUS_NAME,
+		in_signature='ia{sv}', out_signature='')
+	def updateFruFromId(self,fru_id,data):
+		iid = int(fru_id)
+		if (self.fru_id_lookup.has_key(iid) == False):
+			# TODO: event log
+			print "fru id "+str(iid)+" not found"
+		else:
+			self.updateFru(self.fru_id_lookup[iid],data)
+		
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='sa{sv}', out_signature='')
+	def updateFru(self,fru_path,data):
+		## translate dbus data into basic data types
+		clean_data = {}
+		for k in data.keys():
+			d = Openbmc.DbusProperty(k,data[k])
+			clean_data[str(k)] = d.getBaseValue()
+
+		if (self.fru_db.has_key(fru_path)):
+			## update properties then save to cache
+			print "Updating FRU: "+fru_path
+			self.fru_db[fru_path].update(clean_data)
+			self.fru_db[fru_path].saveToCache()
+
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='a{sa{sv}}')
+	def getFrus(self):
+		return FRUS
+
+
+if __name__ == '__main__':
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+    bus = dbus.SessionBus()
+    name = dbus.service.BusName(DBUS_NAME,bus)
+    obj = InventoryManager(bus,OBJ_NAME)
+    mainloop = gobject.MainLoop()
+
+    print "Running Inventory Manager"
+    mainloop.run()
+
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
new file mode 100644
index 0000000..a0c5a86
--- /dev/null
+++ b/bin/ipmi_example.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+import sys
+import subprocess
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import PropertyManager
+
+import Openbmc
+
+
+
+def getWatchdog():
+	obj =  bus.get_object('org.openbmc.watchdog.Host',
+			'/org/openbmc/watchdog/HostWatchdog_0')
+	intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
+	return intf
+
+def getChassisControl():
+	obj =  bus.get_object('org.openbmc.control.Chassis',
+			'/org/openbmc/control/Chassis')
+	intf = dbus.Interface(obj, 'org.openbmc.control.Chassis' )
+	return intf
+
+def prettyPrint(data):
+	for k in data.keys():
+		print k
+		for k2 in data[k].keys():
+			print "\t"+k2+" = "+str(data[k][k2])
+
+if __name__ == '__main__':
+ 	bus = dbus.SessionBus()
+	cmd = sys.argv[1]
+	data = None
+	ipmi_id = dbus.Byte(0)
+	if (len(sys.argv) > 2):
+		ipmi_id = dbus.Byte(int(sys.argv[2]))
+	if (len(sys.argv)>3):
+		data = sys.argv[3]
+
+	if (cmd == "poweron"):
+		intf = getChassisControl()
+		intf.powerOn()
+	elif (cmd == "poweroff"):
+		intf = getChassisControl()
+		intf.powerOff()
+	elif (cmd == "setsensor"):
+		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
+		intf_sens.setSensorFromId(ipmi_id,data)
+	elif (cmd == "getsensor"):
+		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
+		print intf_sens.getSensorFromId(ipmi_id)
+	elif (cmd == "getsensors"):
+		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
+		data = intf_sens.getSensors()
+		prettyPrint(data)
+	elif (cmd == "updatefru"):
+		intf_fru = Openbmc.getManagerInterface(bus,"Inventory")
+		intf_fru.updateFruFromId(ipmi_id,data)
+	elif (cmd == "getfrus"):
+		intf_fru = Openbmc.getManagerInterface(bus,"Inventory")
+		data = intf_fru.getFrus()
+		prettyPrint(data)
+	elif (cmd == "pokewatchdog"):
+		intf = self.getWatchdog()
+		intf.poke()
+	elif (cmd == "statewatchdog"):
+		intf = self.getWatchdog()
+		intf.start()
+	else:
+		print "Unsupported command"
+
+
+
+
+
+
diff --git a/bin/ipmi_manager.py b/bin/ipmi_manager.py
deleted file mode 100644
index 24c36f4..0000000
--- a/bin/ipmi_manager.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import subprocess
-#from gi.repository import GObject
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import PropertyManager
-
-if (len(sys.argv) < 2):
-	print "Usage:  ipmi_manager.py [system name]"
-	exit(1)
-
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.managers.Ipmi'
-OBJ_NAME = '/org/openbmc/managers/Ipmi'
-
-
-class IpmiManager(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-
-	## IPMI commands
-	@dbus.service.method(DBUS_NAME,
-		in_signature='yv', out_signature='')
-	def setSensor(self,sensor_id,value):
-		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
-		intf_sens.setSensorFromId(sensor_id,value)
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='y', out_signature='v')
-	def getSensor(self,sensor_id):
-		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
-		return intf_sens.getSensorFromId(sensor_id)
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='ia{sv}', out_signature='')
-	def updateFru(self,fru_id,data):
-		intf_fru = Openbmc.getManagerInterface(bus,"Frus")
-		intf_fru.updateFru(fru_id,data)
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='s')
-	def getFrus(self):
-		intf_fru = Openbmc.getManagerInterface(bus,"Frus")
-		return intf_fru.getFrus()
-
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='')
-	def pokeHostWatchdog(self):
-		## TODO don't do hardcoding
-		obj =  bus.get_object('org.openbmc.watchdog.Host',
-				'/org/openbmc/watchdog/HostWatchdog_0')
-		intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
-		intf.poke()
-		return None
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='')
-	def startHostWatchdog(self):
-		## TODO don't do hardcoding
-		obj =  bus.get_object('org.openbmc.watchdog.Host',
-				'/org/openbmc/watchdog/HostWatchdog_0')
-		intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
-		intf.start()
-		return None
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='')
-	def powerOn(self):
-		## TODO don't do hardcoding
-		obj =  bus.get_object('org.openbmc.control.Chassis',
-				'/org/openbmc/control/Chassis')
-		intf = dbus.Interface(obj, 'org.openbmc.control.Chassis' )
-		intf.powerOn()
-		return None
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='')
-	def powerOff(self):
-		## TODO don't do hardcoding
-		obj =  bus.get_object('org.openbmc.control.Chassis',
-				'/org/openbmc/control/Chassis')
-		intf = dbus.Interface(obj, 'org.openbmc.control.Chassis' )
-		intf.powerOff()
-		return None
-
-
-
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = dbus.SessionBus()
-    name = dbus.service.BusName(DBUS_NAME,bus)
-    obj = IpmiManager(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
-
-    print "Running IpmiManager"
-    mainloop.run()
-
diff --git a/bin/ipmitool.py b/bin/ipmitool.py
deleted file mode 100644
index 973f071..0000000
--- a/bin/ipmitool.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import subprocess
-import dbus
-from gi.repository import GObject
-import dbus.service
-import dbus.mainloop.glib
-import Openbmc
-
-
-if __name__ == '__main__':
-	cmd = sys.argv[1]
-	data = None
-	ipmi_id = dbus.Byte(0)
-	if (len(sys.argv) > 2):
-		ipmi_id = dbus.Byte(int(sys.argv[2]))
-	if (len(sys.argv)>3):
-		data = sys.argv[3]
-
-	bus = dbus.SessionBus()
-	intf = Openbmc.getManagerInterface(bus,"Ipmi")
-
-	if (cmd == 'updatefru'):
-		d = { 'manufacturer' : data }
-		intf.updateFru(ipmi_id,d)
-	elif (cmd == 'getfrus'):
-		print intf.getFrus()
-	elif (cmd == 'setsensor'):
-		data_b = dbus.Byte(int(data))
-		intf.setSensor(ipmi_id,data_b)
-	elif (cmd == 'getsensor'):
-		print intf.getSensor(ipmi_id)
-	elif (cmd == 'pokewatchdog'):
-		print intf.pokeHostWatchdog()
-	elif (cmd == 'startwatchdog'):
-		print intf.startHostWatchdog()
-	elif (cmd == 'poweron'):
-		print intf.powerOn()
-	elif (cmd == 'poweroff'):
-		print intf.powerOff()
-	else:
-		print "ERROR: Invalid command"
-		print "Valid commands: updatefru, setsensor, getsensor, startwatchdog, pokewatchdog"		
-
-    #mainloop.run()
-
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 9a193d6..4d8eccd 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -39,9 +39,7 @@
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='a{sa{sv}}')
-	def getSensorsAll(self):
-		## this is probably not ok
-		##sensors = []
+	def getSensors(self):
 		return self.sensor_cache;
 	
 	@dbus.service.method(DBUS_NAME,
@@ -56,6 +54,15 @@
 	@dbus.service.method(DBUS_NAME,
 		in_signature='yv', out_signature='')
 	def setSensorFromId(self,ipmi_id,value):
+		## first check if fru functional sensor
+		intf_inv = Openbmc.getManagerInterface(bus,"Inventory")
+		fru_path = intf_inv.getFruSensor(ipmi_id)
+		if (fru_path != ""):
+			data = { 'state': value }
+			intf_inv.updateFru(fru_path,data)
+			print "Found Fru Based Sensor: "+fru_path
+			return None
+
 		intf_sys = Openbmc.getManagerInterface(bus,"System")
 		obj_info = intf_sys.getObjFromIpmi(ipmi_id)
 		
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 015aa8d..b852543 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -56,6 +56,14 @@
 
 
 	def SystemStateHandler(self,state_name):
+		print "Checking previous state started..."
+		i = 0
+		not_started=True
+		while(i<10 and not_started):
+			not_started = self.check_state_started()	
+			i=i+1
+			# add sleep	
+
 		print "Running System State: "+state_name
 		if (self.system_states.has_key(state_name)):
 			for bus_name in self.system_states[state_name]:
@@ -67,22 +75,23 @@
 		
 		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'])
+			obj = bus.get_<F11>object(cb['bus_name'],cb['obj_name'])
 			method = obj.get_dbus_method(cb['method_name'],cb['interface_name'])
 			method()
 
-		current_state = state_name
+		self.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']
 			cmdline = [ ]
 			cmdline.append(process_name)
+			System.SYSTEM_CONFIG[bus_name]['popen'] = None
 			for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
 				cmdline.append(instance['name'])
 			try:
 				print "Starting process: "+" ".join(cmdline)+": "+bus_name
-				System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline);
+				System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline)
 			except Exception as e:
 				## TODO: error
 				print "Error starting process: "+" ".join(cmdline)
@@ -124,13 +133,26 @@
 		#print "Heartbeat seen: "+bus_name
 		System.SYSTEM_CONFIG[bus_name]['heartbeat_count']=1	
 
+	def check_state_started(self):
+		r = True
+		if (self.current_state == ""):
+			return True
+		for bus_name in self.system_states[self.current_state]:
+			if (System.SYSTEM_CONFIG[bus_name].has_key('popen') == False and
+				System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
+				print "Not found: "+bus_name
+				r = False
+				break;	
+		return r
+	
+
 	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
 				objects = {}
-				Openbmc.get_objs(bus,bus_name,Openbmc.OBJ_PREFIX,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']:
