diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 50a3492..328da30 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -7,32 +7,74 @@
 HOME_PATH = '/media/sf_vbox/openbmc/'
 BIN_PATH = HOME_PATH+'bin/'
 CACHE_PATH = HOME_PATH+'cache/'
+FRU_PATH = CACHE_PATH+'frus/'
 
-CACHED_INTERFACES = {
-	'org.openbmc.Fru' : True
+SYSTEM_STATES = [
+	'INIT',
+	'STANDBY',
+	'POWERING_ON',
+	'POWERED_ON',
+	'BOOTING',
+	'HOST_UP',
+	'SHUTTING_DOWN',
+	'POWERING_DOWN'
+]
+
+ENTER_STATE_CALLBACK = {
+	'POWERED_ON' : { 
+		'bus_name'    : 'org.openbmc.control.Host',
+		'obj_name'    : '/org/openbmc/control/Host_0',
+		'interface_name' : 'org.openbmc.control.Host',
+		'method_name' : 'boot'
+	}
 }
 
 SYSTEM_CONFIG = {}
 
-SYSTEM_CONFIG['org.openbmc.watchdog.HostWatchdog'] = {
+SYSTEM_CONFIG['org.openbmc.control.Bmc'] = {
+		'system_state' : 'INIT',
 		'start_process' : True,
-		'process_name' : 'host_watchdog.exe',
+		'process_name' : 'control_bmc.exe',
 		'heartbeat' : 'no',
-		'rest_name' : 'watchdog',
 		'instances' : [	
 			{
-				'name' : 'Watchdog1',
-				'user_label': 'Host Watchdog',
-				'properties' : { 
-					'org.openbmc.Watchdog' : {
-						'poll_interval': 300000,
-					}
-				}
+				'name' : 'Bmc_0',
+				'user_label': 'Master Bmc',
 			}
 		]
 	}
 
+SYSTEM_CONFIG['org.openbmc.managers.Frus'] = {
+		'system_state' : 'STANDBY',
+		'start_process' : True,
+		'process_name' : 'fru_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,
+		'process_name' : 'ipmi_manager.py',
+		'heartbeat' : 'no',
+		'rest_name' : 'frus',
+		'instances' : [	
+			{
+				'name' : 'Barreleye',
+				'user_label': 'Fru Manager',
+			}
+		]
+	}
+
+
 SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_manager.py',
 		'heartbeat' : 'no',
@@ -46,6 +88,7 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'eventlogger.py',
 		'heartbeat' : 'no',
@@ -58,26 +101,33 @@
 		]
 	}
 
-SYSTEM_CONFIG['org.openbmc.managers.IpmiTranslator'] = {
+SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
-		'process_name' : 'ipmi_translator.py',
+		'process_name' : 'host_watchdog.exe',
 		'heartbeat' : 'no',
+		'rest_name' : 'watchdog',
 		'instances' : [	
 			{
-				'name' : 'Barreleye',
-				'user_label': 'IPMI Translator',
+				'name' : 'HostWatchdog_0',
+				'user_label': 'Host Watchdog',
+				'properties' : { 
+					'org.openbmc.Watchdog' : {
+						'poll_interval': 3000,
+					}
+				}
 			}
 		]
 	}
 
-
 SYSTEM_CONFIG['org.openbmc.control.Power'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'power_control.exe',
 		'heartbeat' : 'yes',
 		'instances' : [	
 			{
-				'name' : 'PowerControl1',
+				'name' : 'SystemPower_0',
 				'user_label': 'Power control',
 				'properties' : { 
 					'org.openbmc.Control': {
@@ -89,18 +139,17 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.sensors.Temperature.Ambient'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_ambient.exe',
 		'heartbeat' : 'yes',
-		'init_methods' : ['org.openbmc.SensorValue'],
 		'instances' : [	
 			{
-				'name' : 'AmbientTemperature1',
+				'name' : 'FrontChassis',
 				'user_label': 'Ambient Temperature 1',
-				'sensor_id' : 41,
 				'properties' : { 
 					'org.openbmc.SensorValue': {
-						'poll_interval' : 5000
+						'poll_interval' : 5000,
 					},
 					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
@@ -114,85 +163,77 @@
 					}
 				}
 			},
-			{
-				'name' : 'AmbientTemperature2',
-				'user_label': 'Ambient Temperature 2',
- 				'properties' : { 
-					'org.openbmc.SensorValue': {
-						'poll_interval' : 5000
-					},
-					'org.openbmc.SensorThreshold' : {
-						'lower_critical': 5,
-						'lower_warning' : 10,
-						'upper_warning' : 15,
-						'upper_critical': 20
-					},
-					'org.openbmc.SensorI2c' : {
-						'dev_path' : '/dev/i2c/i2c0',
-						'address' : '0xA2'
-					}
-				}
-			}
 		]
 	}
-SYSTEM_CONFIG['org.openbmc.buttons.ButtonPower'] = {
+SYSTEM_CONFIG['org.openbmc.buttons.Power'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'button_power.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'PowerButton1',
+				'name' : 'PowerButton_0',
 				'user_label': 'Main Power Button',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.sensors.HostStatus'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'sensor_host_status.exe',
 		'heartbeat' : "no",
 		'instances' : [	
 			{
-				'name' : 'HostStatus1',
+				'name' : 'HostStatus_0',
 				'user_label': 'Host Status',
-				'sensor_id' : 43,
+				'properties' : { 
+					'org.openbmc.SensorValue': {
+						'ipmi_id' : 43,
+					},
+				}
+
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'chassis_identify.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'ChassisIdentify1',
+				'name' : 'ChassisIdentify_0',
 				'user_label': 'Chassis Identify LED',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'flash_bios.exe',
 		'heartbeat' : 'no',
 		'rest_name' : 'flash',
 		'instances' : [	
 			{
-				'name' : 'BIOS1',
+				'name' : 'BIOS_0',
 				'user_label': 'BIOS SPI Flash',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Host'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'control_host.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
-				'name' : 'HostControl1',
+				'name' : 'Host_0',
 				'user_label': 'Host Control',
 			}
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'chassis_control.py',
 		'heartbeat' : 'no',
@@ -204,174 +245,87 @@
 			}
 		]
 	}
-SYSTEM_CONFIG['org.openbmc.frus.Fan'] = {
+
+SYSTEM_CONFIG['org.openbmc.sensors.Occ'] = {
+		'system_state' : 'POWERED_ON',
+		'start_process' : True,
+		'process_name' : 'sensor_occ.exe',
+		'heartbeat' : 'no',
+		'instances' : [
+			{
+				'name' : 'Occ_0',
+				'user_label': 'CPU0',
+				'properties' : { 
+					'org.openbmc.Occ' : {
+						'poll_interval' : 3000,
+					}
+				}
+			},
+
+		]
+	}
+
+SYSTEM_CONFIG['org.openbmc.sensors.Fan'] = {
+		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'process_name' : 'fan.exe',
 		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'Fan0',
-				'user_label': 'Fan 0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN0',
-						'location' : 'F0',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan1',
-				'user_label': 'Fan 1',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN1',
-						'location' : 'F1',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan2',
-				'user_label': 'Fan 2',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN2',
-						'location' : 'F2',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan3',
-				'user_label': 'Fan 3',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN3',
-						'location' : 'F3',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan4',
-				'user_label': 'Fan 4',				
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN4',
-						'location' : 'F4',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			},
-			{
-				'name' : 'Fan5',
-				'user_label': 'Fan 5',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'FAN5',
-						'location' : 'F5',
-						'type' : Openbmc.FRU_TYPES['FAN'],
-					}
-				}
-
-			}
-
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.frus.Board'] = {
-		'start_process' : True,
-		'process_name' : 'fru_board.exe',
-		'init_methods' : ['org.openbmc.Fru'],
-		'heartbeat' : 'no',
 		'instances' : [
 			{
-				'name' : 'IO_Planer',
-				'user_label': 'IO Planar',
-				'fru_id' : 61,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'IO Planar',
-						'location' : 'IO_PLANAR',
-						'type' : Openbmc.FRU_TYPES['BACKPLANE']
-					},
-					'org.openbmc.Fru.Eeprom' : {
-						'i2c_address' : '0xA8',
-						'i2c_dev_path' : '/dev/i2c/i2c5'
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.frus.Fru'] = {
-		'start_process' : True,
-		'process_name' : 'fru_generic.exe',
-		'heartbeat' : 'no',
-		'instances' : [
-			{
-				'name' : 'Backplane',
-				'user_label': '2S Motherboard',
-				'fru_id' : 60,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'MAIN_PLANAR',
-						'location' : 'C0',
-						'type' : Openbmc.FRU_TYPES['BACKPLANE'],
-					}
-				}
+				'name' : 'Fan_0',
+				'user_label': 'FAN 0',
 			},
 			{
-				'name' : 'DIMM0',
-				'user_label': 'DIMM A0 Slot 0',
-				'fru_id' : 12,
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'DIMM0',
-						'location' : 'A0',
-						'type' : Openbmc.FRU_TYPES['DIMM'],
-					}
-				}
+				'name' : 'Fan_1',
+				'user_label': 'FAN 1',
 			},
 			{
-				'name' : 'DIMM1',
-				'user_label': 'DIMM A1 Slot 0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'DIMM1',
-						'location' : 'A1',
-						'type' : Openbmc.FRU_TYPES['DIMM'],
-					}
-				}
-			},
-			{
-				'name' : 'CPU0',
-				'user_label': 'CPU0',
-				'properties' : { 
-					'org.openbmc.Fru' : {
-						'label' : 'CPU0',
-						'location' : 'CPU0',
-						'type' : Openbmc.FRU_TYPES['CPU'],
-					}
-				}
+				'name' : 'Fan_2',
+				'user_label': 'FAN 2',
 			},
 
 		]
 	}
 
+NON_CACHABLE_PROPERTIES = {
+	'name'       : True,
+	'user_label' : True,
+	'location'   : True,
+	'cache'      : True
+}
+
+FRUS = {}
+
+## key is IPMI FRU ID
+
+FRUS[32] = {
+		'name' : 'CPU0',
+		'user_label' : "IBM POWER8 CPU",
+		'ftype' : Openbmc.FRU_TYPES['CPU'],
+		'location' : "P0",
+		'manufacturer' : "IBM",
+		'cache' : True,
+		'state' : Openbmc.FRU_STATES['NORMAL'],
+		'sensor_id' : 10,
+	}
+
+FRUS[21] = {
+		'name' : 'IO_PLANAR',
+		'user_label' : "BARRELEYE IO PLANAR",
+		'ftype' : Openbmc.FRU_TYPES['BACKPLANE'],	
+		'cache' : False,
+		'state' : Openbmc.FRU_STATES['NORMAL'],
+		'sensor_id' : 11,
+	}
+
+
 GPIO_CONFIG = {}
-GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 23, 'direction': 'out' }
-GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 24, 'direction': 'out' }
-GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 25, 'direction': 'out' }
-GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 26, 'direction': 'out'  }
-GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 27, 'direction': 'out'  }
-GPIO_CONFIG['PGOOD']      = { 'gpio_num': 28, 'direction': 'in'  }
-GPIO_CONFIG['IDENTIFY']   = { 'gpio_num': 30, 'direction': 'out' }
-GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_num': 31, 'direction': 'in' }
+GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 4, 'direction': 'out' }
+GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 5, 'direction': 'out' }
+GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 24, 'direction': 'out' }
+GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 33, 'direction': 'out'  }
+GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 6, 'direction': 'out'  }
+GPIO_CONFIG['PGOOD']      = { 'gpio_num': 23, 'direction': 'in'  }
+GPIO_CONFIG['IDENTIFY']   = { 'gpio_num': 34, 'direction': 'out' }
+GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_num': 32, 'direction': 'in' }
 
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 12f93c7..97d20bf 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -2,6 +2,7 @@
 import xml.etree.ElementTree as ET
 
 BUS_PREFIX = 'org.openbmc'
+OBJ_PREFIX = "/org/openbmc"
 GPIO_DEV = '/sys/class/gpio'
 
 
@@ -12,60 +13,104 @@
 	'RISER_CARD' : 4,
 	'FAN' : 5
 }
+FRU_STATES = {
+	'NORMAL'            : 0,
+	'RECOVERABLE_ERROR' : 1,
+	'FATAL_ERROR'       : 2,
+	'NOT_PRESENT'       : 3,
+}
 ENUMS = {
 	'org.openbmc.SensorIntegerThreshold.state' : 
 		['NOT_SET','NORMAL','LOWER_CRITICAL','LOWER_WARNING','UPPER_WARNING','UPPER_CRITICAL'],
-	'org.openbmc.Fru.type' :
-		['NONE','CPU','DIMM','BACKPLANE','RISER_CARD','FAN']
+}
+
+DBUS_TO_BASE_TYPES = {
+	'dbus.Byte' : 'int',
+	'dbus.Double' : 'float',
+	'dbus.Int32' : 'int',
+	'dbus.UInt32' : 'long',
+	'dbus.String' : 'str',
+	'dbus.UInt64' : 'long',
+	'dbus.Boolean' : 'bool',
+}
+
+BASE_TO_DBUS_TYPES = {
+	'int'   : 'dbus.Int32',
+	'float' : 'dbus.Double',
+	'str'   : 'dbus.String',
+	'long'  : 'dbus.Int64',
+	'bool'  : 'dbus.Boolean'
 }
 
 
-def object_to_bus_name(obj):
-	parts = obj.split('/')
-	parts.pop(0)
-	parts.pop()
-	return ".".join(parts)	
+def getManagerInterface(bus,manager):
+	bus_name = "org.openbmc.managers."+manager
+	obj_name = "/org/openbmc/managers/"+manager
+	obj = bus.get_object(bus_name,obj_name)
+	return dbus.Interface(obj,bus_name)
 
-def bus_to_object_name(bus_name):
-	return "/"+bus_name.replace('.','/')
 
-def get_methods(obj):
-	methods = {}
+def get_objs(bus,bus_name,path,objects):
+	obj = bus.get_object(bus_name,path)
 	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
+	#print introspect_iface.Introspect()
  	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
+	for node in root.iter('node'):
+		if (node.attrib.has_key('name') == False):
+			for intf in node.iter('interface'):
+				intf_name = intf.attrib['name']
+				if (intf_name.find(BUS_PREFIX)==0):
+					parts=path.split('/')
+					instance = parts[len(parts)-1]
+					if (objects.has_key(instance) == False):
+						objects[instance] = {}
+						objects[instance]['PATH'] = path
+						objects[instance]['INIT'] = []
+					for method in intf.iter('method'):
+						if (method.attrib['name'] == "init"):
+							objects[instance]['INIT'].append(intf_name)
+
+		else:
+			node_name = node.attrib['name']
+			if (node_name != path):
+				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.dbusBaseType = {
-			'dbus.Byte' : 'int',
-			'dbus.Double' : 'float',
-			'dbus.Int32' : 'int',
-			'dbus.UInt32' : 'long',
-			'dbus.String' : 'str',
-			'dbus.UInt64' : 'long',
-		}
 		self.name = str(name)	
 		self.dbusType = str(type(value)).split("'")[1]
-		self.variant_level = value.variant_level
+		self.variant_level = 2
 		self.value = None
-
-		try: 
-			self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
-		except:
-			raise Exception("Unknown dbus type: "+self.dbusType)
+		if (BASE_TO_DBUS_TYPES.has_key(self.dbusType) == False):
+			self.variant_level = value.variant_level
+			try: 
+				self.value = eval(DBUS_TO_BASE_TYPES[self.dbusType]+"(value)")
+			except:
+				raise Exception("Unknown dbus type: "+self.dbusType)
+		else:
+			self.dbusType = BASE_TO_DBUS_TYPES[self.dbusType]
+			self.value = value
 
 	def setValue(self,value):
 		try: 
-			self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
+			self.value = eval(DBUS_TO_BASE_TYPES[self.dbusType]+"(value)")
 		except:
 			raise Exception("Unknown dbus type: "+self.dbusType)
 
@@ -79,12 +124,8 @@
 		e = self.dbusType+"(self.value, variant_level="+str(self.variant_level)+")"
 		return eval(e)
 
-	#def __getstate__(self):
-	#	odict = self.__dict__.copy() # copy the dict since we change it
- 	#	return odict
-
-	##def __setstate__(self, dict):
-        #	self.__dict__.update(dict)   # update attributes
+	def getBaseValue(self):
+		return self.value
 
 	def __str__(self):
 		return self.dbusType+":"+str(self.value)
diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
index 6af3af7..d3176d1 100644
--- a/bin/PropertyManager.py
+++ b/bin/PropertyManager.py
@@ -32,8 +32,9 @@
 			directory = self.save_path+directory.lstrip('.')
 			filename = directory+"/"+prop_interface
 			if (os.path.isfile(filename) == False):
+				pass
 				## not an error	
-				print "No cache available for: "+filename
+				#print "No cache available for: "+filename
 			else:
 				try:
 					print "Loading from disk: "+obj_path
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index 4be1afc..455030b 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -7,7 +7,7 @@
 import dbus.mainloop.glib
 
 DBUS_NAME = 'org.openbmc.control.Chassis'
-OBJ_NAME = '/org/openbmc/control/Chassis/'+sys.argv[1]
+OBJ_NAME = '/org/openbmc/control/'+sys.argv[1]
 
 POWER_OFF = 0
 POWER_ON = 1
@@ -20,61 +20,37 @@
 
 		dbus.service.Object.__init__(self,bus,name)
 		## load utilized objects
-		self.dbus_busses = {
-			'org.openbmc.control.Power' : 
-				[ { 'name' : 'PowerControl1' ,   'intf' : 'org.openbmc.control.Power' } ],
-			'org.openbmc.leds.ChassisIdentify' :
-				[ { 'name' : 'ChassisIdentify1', 'intf' : 'org.openbmc.control.Chassis' } ],
-			'org.openbmc.control.Host' :
-				[ { 'name' : 'HostControl1',     'intf' : 'org.openbmc.control.Host' } ]
+		self.dbus_objects = {
+			'power_control' : { 
+				'bus_name' : 'org.openbmc.control.Power',
+				'object_name' : '/org/openbmc/control/SystemPower_0',
+				'interface_name' : 'org.openbmc.control.Power'
+			},
+			'identify_led' : {
+				'bus_name' : 'org.openbmc.leds.ChassisIdentify',
+				'object_name' : '/org/openbmc/leds/ChassisIdentify_0',
+				'interface_name' : 'org.openbmc.Led'
+			}
 		}
-		self.power_sequence = 0
+		#self.power_sequence = 0
 		self.reboot = 0	
 		self.last_power_state = 0
 
 		bus = dbus.SessionBus()
 
-		## add signal handler to detect when new objects show up on dbus
-		bus.add_signal_receiver(self.request_name,
-				dbus_interface = 'org.freedesktop.DBus', 
-				signal_name = "NameOwnerChanged")
 
 		bus.add_signal_receiver(self.power_button_signal_handler, 
 					dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed", 
-					path="/org/openbmc/buttons/ButtonPower/PowerButton1" )
-    		bus.add_signal_receiver(self.power_good_signal_handler, 
-					dbus_interface = "org.openbmc.control.Power", signal_name = "PowerGood")
-   		bus.add_signal_receiver(self.power_lost_signal_handler, 
-					dbus_interface = "org.openbmc.control.Power", signal_name = "PowerLost")
+					path="/org/openbmc/buttons/PowerButton_0" )
     		bus.add_signal_receiver(self.host_watchdog_signal_handler, 
 					dbus_interface = "org.openbmc.Watchdog", signal_name = "WatchdogError")
-   		bus.add_signal_receiver(self.host_status_signal_handler, 
-					dbus_interface = "org.openbmc.SensorMatch", signal_name = "SensorMatch",
-					path="/org/openbmc/sensors/HostStatus/HostStatus1")
+		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
 
-		try: 
-			for bus_name in self.dbus_busses.keys():
-				self.request_name(bus_name,"",bus_name)
 
-		except:
-			## its ok if this fails.  hotplug will detect too
-			print "Warning: One of processes not started yet."
-			pass
-
-	
-	def request_name(self, bus_name, a, b):
-		# bus added
-		if (len(b) > 0 ):
-			## if bus in required list for this object, then save a pointer to interface
-			## for method calls
-			if (self.dbus_busses.has_key(bus_name)):
-				obj_path = "/"+bus_name.replace('.','/')
-				for objs in self.dbus_busses[bus_name]:
-					inst_name = objs['name']
-					print "Chassis control: "+inst_name
-					obj =  bus.get_object(bus_name,obj_path+"/"+inst_name)
-					self.dbus_objects[inst_name] = dbus.Interface(obj, objs['intf'])
-	
+	def getInterface(self,name):
+		o = self.dbus_objects[name]
+		obj = bus.get_object(o['bus_name'],o['object_name'])
+		return dbus.Interface(obj,o['interface_name'])
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='s')
@@ -85,40 +61,56 @@
 		in_signature='', out_signature='')
 	def setIdentify(self):
 		print "Turn on identify"
-		self.dbus_objects['ChassisIdentify1'].setOn()
+		intf = self.getInterface('identify_led')
+		intf.setOn()	
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def clearIdentify(self):
-		print "Turn off identify"
-		r=self.dbus_objects['ChassisIdentify1'].setOff()
+		print "Turn on identify"
+		intf = self.getInterface('identify_led')
+		intf.setOff()
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
-	def setPowerOn(self):
+	def powerOn(self):
 		print "Turn on power and boot"
-		self.power_sequence = 0
 		self.reboot = 0
 		if (self.getPowerState()==0):
-			self.dbus_objects['PowerControl1'].setPowerState(POWER_ON)
-			self.power_sequence = 1
+			intf = self.getInterface('power_control')
+			intf.setPowerState(POWER_ON)
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
-	def setPowerOff(self):
-		self.power_sequence = 0
+	def powerOff(self):
 		print "Turn off power"
-		self.dbus_objects['PowerControl1'].setPowerState(POWER_OFF);
+		intf = self.getInterface('power_control')
+		intf.setPowerState(POWER_OFF)
+		return None
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='')
+	def softPowerOff(self):
+		print "Soft off power"
+		## Somehow tell host to shutdown via ipmi
+		return None
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='')
+	def reboot(self):
+		print "Rebooting"
+		self.reboot=1
+		intf.softPowerOff()
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='i')
 	def getPowerState(self):
-		state = self.dbus_objects['PowerControl1'].getPowerState();
-		return state
+		intf = self.getInterface('power_control')
+		return intf.getPowerState()
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
@@ -132,36 +124,26 @@
 
 
 	## Signal handler
+
+	def SystemStateHandler(self,state_name):
+		if (state_name == "POWERED_OFF" and self.reboot==1):
+			self.powerOn()
+				
+
 	def power_button_signal_handler(self):
 		# toggle power
 		state = self.getPowerState()
 		if state == POWER_OFF:
-			self.setPowerOn()
+			self.powerOn()
 		elif state == POWER_ON:
-			self.setPowerOff();
+			self.powerOff();
 		
 		# TODO: handle long press and reset
 
-	## Signal handlers
-	def power_good_signal_handler(self):
-		if (self.power_sequence==1):
-			self.dbus_objects['HostControl1'].boot()
-			self.power_sequence = 2
-
-	def host_status_signal_handler(self,value):
-		if (value == BOOTED and self.power_sequence==2):
-			self.power_sequence=0
-			print "Host booted"
-
-	def power_lost_signal_handler(self):
-		## Reboot if power is lost but reboot requested
-		if (self.reboot == 1):
-			self.setPowerOn()
-
 	def host_watchdog_signal_handler(self):
-		print "Watchdog Error, Rebooting"
+		print "Watchdog Error, Hard Rebooting"
 		self.reboot = 1
-		self.setPowerOff()
+		self.powerOff()
 		
 
 if __name__ == '__main__':
diff --git a/bin/fru_manager.py b/bin/fru_manager.py
new file mode 100644
index 0000000..1150552
--- /dev/null
+++ b/bin/fru_manager.py
@@ -0,0 +1,148 @@
+#!/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'
+FRU_PATH = System.FRU_PATH
+
+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 = {}
+		for fid in System.FRUS.keys():
+			self.updateFru(fid,System.FRUS[fid])
+			
+			
+	#@dbus.service.signal(DBUS_NAME)
+	#def OpenBmcRunning(self):
+	#	pass
+	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/ipmi_bt.py b/bin/ipmi_bt.py
deleted file mode 100644
index d3e79cd..0000000
--- a/bin/ipmi_bt.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import subprocess
-import dbus
-from gi.repository import GObject
-import dbus.service
-import dbus.mainloop.glib
-
-if (len(sys.argv) < 2):
-	print "Usage:  ipmi_bt.py [system name]"
-	exit(1)
-
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.control.IpmiBt'
-OBJ_NAME = '/org/openbmc/control/IpmiBt'
-
-class IpmiBt(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-	
-	@dbus.service.signal(DBUS_NAME)
-	def UpdateFru(self, iid, message):
- 		pass
-
-	@dbus.service.signal(DBUS_NAME)
-	def UpdateSensor(self, iid, message):
- 		pass
-
-	@dbus.service.method(DBUS_NAME)
-	def emitUpdateFru(self,ipmi_id,mfg):
-		data = {
-			'manufacturer' : mfg
-		}
-        	self.UpdateFru(ipmi_id,data)
-        	return 'Signal emitted'
-
-	@dbus.service.method(DBUS_NAME)
-	def emitUpdateSensor(self,ipmi_id,data):
-        	self.UpdateSensor(ipmi_id,dbus.Byte(int(data)))
-		print "update sensor emitted"
-        	return 'Signal emitted'
-
-	def getSensor(self,ipmi_id):
-		obj =  bus.get_object('org.openbmc.managers.IpmiTranslator',
-				'/org/openbmc/managers/IpmiTranslator/Barreleye')
-		intf = dbus.Interface(obj, 'org.openbmc.managers.IpmiTranslator' )
-		return intf.getSensor(ipmi_id)
-
-	def pokeHostWatchdog(self):
-		obj =  bus.get_object('org.openbmc.managers.IpmiTranslator',
-				'/org/openbmc/managers/IpmiTranslator/Barreleye')
-		intf = dbus.Interface(obj, 'org.openbmc.managers.IpmiTranslator' )
-		intf.pokeHostWatchdog()
-
-	def startHostWatchdog(self):
-		obj =  bus.get_object('org.openbmc.managers.IpmiTranslator',
-				'/org/openbmc/managers/IpmiTranslator/Barreleye')
-		intf = dbus.Interface(obj, 'org.openbmc.managers.IpmiTranslator' )
-		intf.startHostWatchdog()
-
-
-
-
-
-if __name__ == '__main__':
-	
-	cmd = ""
-	data = None
-	ipmi_id = 0
-	if (len(sys.argv) > 2):
-		cmd = sys.argv[2]
-	if (len(sys.argv) > 3):
-		ipmi_id = int(sys.argv[3])
-	if (len(sys.argv)>4):
-		data = sys.argv[4]
-
-	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()
-
-	if (cmd == 'updatefru'):
-		obj.emitUpdateFru(ipmi_id,data)
-	elif (cmd == 'setsensor'):
-		obj.emitUpdateSensor(ipmi_id,data)
-	elif (cmd == 'getsensor'):
-		print obj.getSensor(ipmi_id)
-	elif (cmd == 'pokewatchdog'):
-		print obj.pokeHostWatchdog()
-	elif (cmd == 'startwatchdog'):
-		print obj.startHostWatchdog()
-	else:
-		print "ERROR: Invalid command"
-		print "Valid commands: updatefru, setsensor, getsensor, startwatchdog, pokewatchdog"		
-
-    #mainloop.run()
-
diff --git a/bin/ipmi_manager.py b/bin/ipmi_manager.py
new file mode 100644
index 0000000..479d1a1
--- /dev/null
+++ b/bin/ipmi_manager.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+import sys
+import subprocess
+from gi.repository 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/ipmi_translator.py b/bin/ipmi_translator.py
deleted file mode 100644
index 2f3d0bb..0000000
--- a/bin/ipmi_translator.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import subprocess
-from gi.repository import GObject
-
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import PropertyManager
-
-if (len(sys.argv) < 2):
-	print "Usage:  ipmi_translator.py [system name]"
-	exit(1)
-
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.managers.IpmiTranslator'
-OBJ_NAME = '/org/openbmc/managers/IpmiTranslator/'+sys.argv[1]
-ID_LOOKUP = {
-	'BUS_NAME' : {},
-	'FRU' : {},
-	'SENSOR' : {}, 
-}
-
-
-class IpmiTranslator(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-		self.property_manager = PropertyManager.PropertyManager(bus,System.CACHE_PATH)
-		bus.add_signal_receiver(self.UpdateFruHandler,
-					dbus_interface = 'org.openbmc.control.IpmiBt', 
-					signal_name = "UpdateFru")
-		bus.add_signal_receiver(self.UpdateSensorHandler,
-					dbus_interface = 'org.openbmc.control.IpmiBt', 
-					signal_name = "UpdateSensor")
-
-		## generate fru and sensor id to dbus object path lookup
-		for bus_name in System.SYSTEM_CONFIG.keys():
-			obj_name = "/"+bus_name.replace('.','/')
-			for instances in System.SYSTEM_CONFIG[bus_name]['instances']:
-				obj_path = obj_name+"/"+instances['name']
-				if (instances.has_key('sensor_id')):
-					iid = instances['sensor_id']
-					ID_LOOKUP['BUS_NAME'][iid] = bus_name
-					ID_LOOKUP['SENSOR'][iid] = obj_path
-				if (instances.has_key('fru_id')):
-					iid = instances['fru_id']
-					ID_LOOKUP['BUS_NAME'][iid] = bus_name
-					ID_LOOKUP['FRU'][iid] = obj_path
-
-				
-	## TODO: Should be event driven instead of calling object methods because
-	##       object could be hung
-	def UpdateFruHandler(self,fru_id,data):
-		if (ID_LOOKUP['FRU'].has_key(fru_id)):
-			obj_path = ID_LOOKUP['FRU'][fru_id]
-			bus_name = ID_LOOKUP['BUS_NAME'][fru_id]
-			## save fru object to object and disk
-			interface_name = 'org.openbmc.Fru'
-			cache = System.CACHED_INTERFACES.has_key(interface_name)
-			self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
-		else:
-			## TODO: error handling
-			pass
-
-	def UpdateSensorHandler(self,sensor_id,value):
-		if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
-			obj_path = ID_LOOKUP['SENSOR'][sensor_id]
-			bus_name = ID_LOOKUP['BUS_NAME'][sensor_id]
-
-			## change to variant data type
-			## comes in off dbus from ipmi_bt as a basic data type
-			dvalue = Openbmc.DbusProperty('value',value)
-			dvalue.setVariant(1)
-			## save sensor value
-			interface_name = 'org.openbmc.SensorValue'
-			cache = System.CACHED_INTERFACES.has_key(interface_name)
-			obj = bus.get_object(bus_name,obj_path)
-			intf = dbus.Interface(obj, interface_name)
-			intf.setValue(dvalue.getValue())
-		else:
-			## TODO: error handling
-			pass
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='i', out_signature='v')
-	def getSensor(self,sensor_id):
-		val = 0
-		if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
-			obj_path = ID_LOOKUP['SENSOR'][sensor_id]
-			bus_name = ID_LOOKUP['BUS_NAME'][sensor_id]
-			print "getSensor: "+obj_path+","+bus_name
-			## TODO don't do hardcoding
-			obj =  bus.get_object('org.openbmc.managers.Sensors',
-					'/org/openbmc/managers/Sensors/Barreleye')
-			intf = dbus.Interface(obj, 'org.openbmc.managers.Sensors' )
-			val = intf.getSensor(obj_path)
-
-		return val
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='')
-	def pokeHostWatchdog(self):
-		## TODO don't do hardcoding
-		obj =  bus.get_object('org.openbmc.watchdog.HostWatchdog',
-				'/org/openbmc/watchdog/HostWatchdog/Watchdog1')
-		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.HostWatchdog',
-				'/org/openbmc/watchdog/HostWatchdog/Watchdog1')
-		intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
-		intf.start()
-
-		return None
-
-
-
-
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = dbus.SessionBus()
-    name = dbus.service.BusName(DBUS_NAME,bus)
-    obj = IpmiTranslator(bus,OBJ_NAME)
-    mainloop = GObject.MainLoop()
-
-    print "Running IpmiTranslator"
-    mainloop.run()
-
diff --git a/bin/ipmitool.py b/bin/ipmitool.py
new file mode 100644
index 0000000..973f071
--- /dev/null
+++ b/bin/ipmitool.py
@@ -0,0 +1,47 @@
+#!/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 cb0904e..bcf3fd8 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -13,12 +13,12 @@
 import Openbmc
 
 DBUS_NAME = 'org.openbmc.managers.Sensors'
-OBJ_NAME = '/org/openbmc/managers/Sensors/'+sys.argv[1]
+OBJ_NAME = '/org/openbmc/managers/Sensors'
 
 class SensorManager(dbus.service.Object):
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
-		bus.add_signal_receiver(self.UpdateSensor,
+		bus.add_signal_receiver(self.SensorChangedHandler,
 					dbus_interface = 'org.openbmc.SensorValue', 
 					signal_name = 'Changed', path_keyword='path')
 		bus.add_signal_receiver(self.NormalThreshold,
@@ -32,16 +32,46 @@
 					signal_name = 'Critical', path_keyword='path')
 
 		self.sensor_cache = {}
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='a{sv}')
+	def getSensorsAll(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):
+		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')
 	def getSensor(self,path):
-		val = None
+		val = 0
 		if (self.sensor_cache.has_key(path) == True):
 			val = self.sensor_cache[path]['value']
+		else:
+			# TODO: error handling
+			print "Unknown sensor at: "+path
 		return val
-		
-	def UpdateSensor(self,value,units,path = None):
+	
+	## Signal handlers	
+	def SensorChangedHandler(self,value,units,path = None):
 		self.initSensorEntry(path)
 		self.sensor_cache[path]['value'] = value
 		self.sensor_cache[path]['units'] = units
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')
