diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 2d5c800..9b456b8 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -1,6 +1,5 @@
 #! /usr/bin/python
 
-## todos: event logger, 
 import dbus
 import Openbmc
 
@@ -37,12 +36,7 @@
 		'monitor_process' : True,
 		'process_name' : 'control_bmc.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'Bmc_0',
-				'user_label': 'Master Bmc',
-			}
-		]
+		'instances' : [	{ 'name' : 'Bmc_0' } ]
 	}
 
 SYSTEM_CONFIG['org.openbmc.managers.Inventory'] = {
@@ -51,13 +45,7 @@
 		'monitor_process' : True,
 		'process_name' : 'inventory_manager.py',
 		'heartbeat' : 'no',
-		'rest_name' : 'frus',
-		'instances' : [	
-			{
-				'name' : 'Barreleye',
-				'user_label': 'Inventory Manager',
-			}
-		]
+		'instances' : [	{ 'name' : 'Barreleye' } ]
 	}
 
 
@@ -67,28 +55,7 @@
 		'monitor_process' : True,
 		'process_name' : 'sensor_manager.py',
 		'heartbeat' : 'no',
-		'rest_name' : 'sensors',
-		'instances' : [	
-			{
-				'name' : 'Barreleye',
-				'user_label': 'Sensor Manager',
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
-		'system_state' : 'INIT',
-		'start_process' : False,
-		'monitor_process' : True,
-		'process_name' : 'eventlogger.py',
-		'heartbeat' : 'no',
-		'rest_name' : 'events',
-		'instances' : [	
-			{
-				'name' : 'Barreleye',
-				'user_label': 'Event Logger',
-			}
-		]
+		'instances' : [ { 'name' : 'Barreleye' } ]
 	}
 
 SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
@@ -97,11 +64,9 @@
 		'monitor_process' : True,
 		'process_name' : 'host_watchdog.exe',
 		'heartbeat' : 'no',
-		'rest_name' : 'watchdog',
 		'instances' : [	
 			{
 				'name' : 'HostWatchdog_0',
-				'user_label': 'Host Watchdog',
 				'properties' : { 
 					'org.openbmc.Watchdog' : {
 						'poll_interval': 3000,
@@ -167,12 +132,7 @@
 		'monitor_process' : True,
 		'process_name' : 'button_power.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'PowerButton_0',
-				'user_label': 'Main Power Button',
-			}
-		]
+		'instances' : [	{ 'name' : 'PowerButton_0' } ]
 	}
 SYSTEM_CONFIG['org.openbmc.sensors.HostStatus'] = {
 		'system_state' : 'STANDBY',
@@ -180,13 +140,10 @@
 		'monitor_process' : True,
 		'process_name' : 'sensor_host_status.exe',
 		'heartbeat' : "no",
-		'instances' : [	
-			{
-				'name' : 'HostStatus_0',
-				'user_label': 'Host Status',
+		'instances' : [ { 'name' : 'HostStatus_0',
 				'properties' : { 
-					'org.openbmc.SensorValue': {
-						'ipmi_id' : 43,
+					'org.openbmc.SensorIpmi': {
+						'sensor_id' : 43,
 					},
 				}
 
@@ -199,12 +156,7 @@
 		'monitor_process' : True,
 		'process_name' : 'chassis_identify.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'ChassisIdentify_0',
-				'user_label': 'Chassis Identify LED',
-			}
-		]
+		'instances' : [	{ 'name' : 'ChassisIdentify_0' } ]
 	}
 SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
 		'system_state' : 'STANDBY',
@@ -212,13 +164,7 @@
 		'monitor_process' : True,
 		'process_name' : 'flash_bios.exe',
 		'heartbeat' : 'no',
-		'rest_name' : 'flash',
-		'instances' : [	
-			{
-				'name' : 'BIOS_0',
-				'user_label': 'BIOS SPI Flash',
-			}
-		]
+		'instances' : [	{ 'name' : 'BIOS_0' } ]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Host'] = {
 		'system_state' : 'STANDBY',
@@ -226,12 +172,7 @@
 		'monitor_process' : True,
 		'process_name' : 'control_host.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'Host_0',
-				'user_label': 'Host Control',
-			}
-		]
+		'instances' : [ { 'name' : 'Host_0' } ]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
 		'system_state' : 'STANDBY',
@@ -239,13 +180,7 @@
 		'monitor_process' : True,
 		'process_name' : 'chassis_control.py',
 		'heartbeat' : 'no',
-		'rest_name' : 'chassis',
-		'instances' : [	
-			{
-				'name' : 'Chassis',
-				'user_label': 'Chassis Control',
-			}
-		]
+		'instances' : [ { 'name' : 'Chassis' } ]
 	}
 
 SYSTEM_CONFIG['org.openbmc.vpd'] = {
@@ -254,13 +189,7 @@
 		'monitor_process' : False,
 		'process_name' : 'board_vpd.exe',
 		'heartbeat' : 'no',
-		'instances' : [
-			{
-				'name' : 'MBVPD_0',
-				'user_label': 'VPD',
-			},
-
-		]
+		'instances' : [ { 'name' : 'MBVPD_0' } ]
 	}
 
 SYSTEM_CONFIG['org.openbmc.sensors.Occ'] = {
@@ -272,7 +201,6 @@
 		'instances' : [
 			{
 				'name' : 'Occ_0',
-				'user_label': 'CPU0',
 				'properties' : { 
 					'org.openbmc.Occ' : {
 						'poll_interval' : 3000,
@@ -289,21 +217,7 @@
 		'monitor_process' : True,
 		'process_name' : 'fan.exe',
 		'heartbeat' : 'no',
-		'instances' : [
-			{
-				'name' : 'Fan_0',
-				'user_label': 'FAN 0',
-			},
-			{
-				'name' : 'Fan_1',
-				'user_label': 'FAN 1',
-			},
-			{
-				'name' : 'Fan_2',
-				'user_label': 'FAN 2',
-			},
-
-		]
+		'instances' : [	{'name' : 'Fan_0' }, {'name' : 'Fan_1'}, {'name' : 'Fan_2'} ]
 	}
 
 NON_CACHABLE_PROPERTIES = {
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index a777ae8..625f36c 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -82,21 +82,6 @@
 				get_objs(bus,bus_name,path+"/"+node.attrib['name'],objects)
 
 
-
-#def get_methods(obj):
-#	methods = {}
-#	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
- #	tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
- #	root = tree.getroot()
-#	for intf in root.iter('interface'):
- #		intf_name = intf.attrib['name']
-#		if (intf_name.find(BUS_PREFIX)==0):
-#			methods[intf_name] = {}
-#			for method in intf.iter('method'):
-#				methods[intf_name][method.attrib['name']] = True
-#		
-#	return methods
-
 class DbusProperty:
 	def __init__(self,name,value):
 		self.name = str(name)	
diff --git a/bin/inventory_manager.py b/bin/inventory_manager.py
index dcc0114..fa689f0 100644
--- a/bin/inventory_manager.py
+++ b/bin/inventory_manager.py
@@ -87,8 +87,13 @@
 		dbus.service.Object.__init__(self,bus,name)
 		
 		bus.add_signal_receiver(self.UpdateFruHandler,
+					dbus_interface = "org.openbmc.sensors.IpmiBt", 
 					signal_name = 'UpdateFru')
 
+		bus.add_signal_receiver(self.SetSensorHandler, 
+					dbus_interface = "org.openbmc.sensors.IpmiBt", 
+					signal_name = "SetSensor")
+
 		self.fru_db = {}
 		self.fru_id_lookup = {}
 		self.sensor_id_lookup = {}
@@ -103,8 +108,15 @@
 
 			
 	def UpdateFruHandler(self,fru_id,data):
-		self.updateFru(fru_id,data)		
+		self.updateFruFromId(fru_id,data)		
 
+	def SetSensorHandler(self,sensor_id,data):
+		fru_path = self.getFruSensor(sensor_id)
+		if (fru_path != ""):
+			state = { 'state' : data }
+			self.updateFru(fru_path,state)
+			
+		
 	@dbus.service.method(DBUS_NAME,
 		in_signature='y', out_signature='s')	
 	def getFruSensor(self,sensor_id):
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
index a0c5a86..1d0061d 100644
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -10,6 +10,20 @@
 
 import Openbmc
 
+DBUS_NAME = 'org.openbmc.sensors.IpmiBt'
+OBJ_NAME = '/org/openbmc/sensors/IpmiBt'
+
+class IpmiBt(dbus.service.Object):
+	def __init__(self,bus,name):
+		dbus.service.Object.__init__(self,bus,name)
+
+	@dbus.service.signal('org.openbmc.sensors.IpmiBt')
+	def SetSensor(self, ipmi_id, value):
+        	pass
+
+	@dbus.service.signal('org.openbmc.sensors.IpmiBt')
+	def UpdateFru(self, ipmi_id, data):
+        	pass
 
 
 def getWatchdog():
@@ -30,8 +44,15 @@
 		for k2 in data[k].keys():
 			print "\t"+k2+" = "+str(data[k][k2])
 
+
+
 if __name__ == '__main__':
+	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
  	bus = dbus.SessionBus()
+	name = dbus.service.BusName(DBUS_NAME,bus)
+	obj = IpmiBt(bus,OBJ_NAME)
+	mainloop = gobject.MainLoop()
+
 	cmd = sys.argv[1]
 	data = None
 	ipmi_id = dbus.Byte(0)
@@ -47,18 +68,14 @@
 		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)
+		obj.SetSensor(ipmi_id,dbus.Byte(int(data)))
 	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)
+		d = { 'manufacturer' : data }	
+		obj.UpdateFru(ipmi_id,d)
 	elif (cmd == "getfrus"):
 		intf_fru = Openbmc.getManagerInterface(bus,"Inventory")
 		data = intf_fru.getFrus()
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 4d8eccd..886438a 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -36,41 +36,15 @@
 					signal_name = 'Critical', path_keyword='path')
 
 		self.sensor_cache = {}
+	@dbus.service.signal('org.openbmc.EventLog')
+	def EventLog(self, priority, message, rc):
+        	pass
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='a{sa{sv}}')
 	def getSensors(self):
 		return self.sensor_cache;
 	
-	@dbus.service.method(DBUS_NAME,
-		in_signature='y', out_signature='v')
-	def getSensorFromId(self,ipmi_id):
-		intf_sys = Openbmc.getManagerInterface(bus,"System")
-		obj_info = intf_sys.getObjFromIpmi(ipmi_id)
-		intf_name = str(obj_info[0])
-		obj_name = str(obj_info[1])
-		return self.getSensor(obj_name)
-
-	@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)
-		
-		obj = bus.get_object(obj_info[0],obj_info[1])
-		intf = dbus.Interface(obj,"org.openbmc.SensorValue")
-		intf.setValue(value)
-		return None
-
 	
 	@dbus.service.method(DBUS_NAME,
 		in_signature='s', out_signature='v')
@@ -79,8 +53,7 @@
 		if (self.sensor_cache.has_key(path) == True):
 			val = self.sensor_cache[path]['value']
 		else:
-			# TODO: error handling
-			print "Unknown sensor at: "+path
+			self.EventLog(1,"Unknown sensor: "+path,1)
 		return val
 	
 	## Signal handlers
diff --git a/bin/system_manager.py b/bin/system_manager.py
index b852543..eb9daa4 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -45,7 +45,6 @@
 
 		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):
@@ -54,15 +53,22 @@
 		self.SystemStateHandler("INIT")
 		print "SystemManager Init Done"
 
+	@dbus.service.signal('org.openbmc.EventLog')
+	def EventLog(self, priority, message, rc):
+        	pass
 
 	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()	
+		started=False
+		while(i<10 and started == False):
+			started = self.check_state_started()	
 			i=i+1
-			# add sleep	
+			time.sleep(1)	
+
+		if (i == 10):
+			self.EventLog(1,"Timeout waiting for state to finish: "+self.current_state,1)	
+			return					
 
 		print "Running System State: "+state_name
 		if (self.system_states.has_key(state_name)):
@@ -160,28 +166,13 @@
 							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]
-
 					## 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')
