diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index ae48df0..6fb8fb3 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -43,10 +43,18 @@
 		'system_state' : 'STANDBY',
 		'start_process' : True,
 		'monitor_process' : True,
-		'process_name' : 'inventory_manager.py',
+		'process_name' : 'inventory_items.py',
 		'heartbeat' : 'no',
 		'instances' : [	{ 'name' : 'Barreleye' } ]
 	}
+SYSTEM_CONFIG['org.openbmc.control.PciePresent'] = {
+		'system_state' : 'POWERING_ON',
+		'start_process' : True,
+		'monitor_process' : False,
+		'process_name' : 'pcie_slot_present.exe',
+		'heartbeat' : 'no',
+		'instances' : [	{ 'name' : 'Slots_0' } ]
+	}
 
 
 SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
@@ -140,15 +148,7 @@
 		'monitor_process' : True,
 		'process_name' : 'sensor_host_status.exe',
 		'heartbeat' : "no",
-		'instances' : [ { 'name' : 'HostStatus_0',
-				'properties' : { 
-					'org.openbmc.SensorIpmi': {
-						'sensor_id' : 43,
-					},
-				}
-
-			}
-		]
+		'instances' : [ { 'name' : 'HostStatus_0' } ]
 	}
 SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
 		'system_state' : 'STANDBY',
@@ -224,80 +224,149 @@
 	'name'       : True,
 	'user_label' : True,
 	'location'   : True,
-	'state'   : True,
+	'state'      : True,
 	'cache'      : True
 }
+INVENTORY_ROOT = '/org/openbmc/inventory/items'
 
 FRU_INSTANCES = {
-	'/system' :
+	'<inventory_root>/system' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['SYSTEM'],
-		'fru'	       : True,
+		'fru_type'        : Openbmc.FRU_TYPES['SYSTEM'],
+		'is_fru'       : True,
 	},
-	'/system/motherboard' :
+	'<inventory_root>/system/io_board' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['MAIN_PLANAR'],
+		'fru_type'        : Openbmc.FRU_TYPES['MAIN_PLANAR'],
 		'manufacturer' : 'FOXCONN',
-		'fru'	       : True,
-		'fru_id'       : 31,
-		'location' : 'C0',
+		'is_fru'       : True,
+		'location'     : 'C1',
 	},
-	'/system/fan0' :
+
+	'<inventory_root>/system/motherboard' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['FAN'],
+		'fru_type'        : Openbmc.FRU_TYPES['MAIN_PLANAR'],
+		'manufacturer' : 'FOXCONN',
+		'is_fru'       : True,
+		'location'     : 'C0',
+	},
+	'<inventory_root>/system/fan0' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['FAN'],
 		'manufacturer' : 'DELTA',
-		'fru'	       : True,
-		'location' : 'F0',
+		'is_fru'       : True,
+		'location'     : 'F0',
 	},
-	'/system/fan1' :
+	'<inventory_root>/system/fan1' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['FAN'],
+		'fru_type'        : Openbmc.FRU_TYPES['FAN'],
 		'manufacturer' : 'DELTA',
-		'fru'	       : True,
-		'location' : 'F1',
+		'is_fru'       : True,
+		'location'     : 'F1',
 	},
-	'/system/motherboard/bmc' :
+	'<inventory_root>/system/io_board/bmc' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['BMC'],
+		'fru_type'        : Openbmc.FRU_TYPES['BMC'],
 		'manufacturer' : 'ASPEED',
-		'fru'	       : True,
+		'is_fru'       : False,
 	},
-	'/system/motherboard/cpu0' :
+	'<inventory_root>/system/motherboard/cpu0' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['CPU'],
+		'fru_type'        : Openbmc.FRU_TYPES['CPU'],
 		'manufacturer' : 'IBM',
-		'fru'	       : True,
-		'location' : 'P0',
-		'fru_id'   : 10,
+		'is_fru'       : True,
+		'location'     : 'P0',
 	},
-	'/system/motherboard/cpu0/core0' :
+	'<inventory_root>/system/motherboard/cpu0/core0' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['CORE'],
-		'fru'	       : False,
-		'sensor_id'    : 1,	
+		'fru_type'        : Openbmc.FRU_TYPES['CORE'],
+		'is_fru'       : False,
 	},
-	'/system/motherboard/cpu0/core1' :
+	'<inventory_root>/system/motherboard/cpu0/core1' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['CORE'],
-		'fru'	       : False,
-		'sensor_id'    : 2,	
+		'fru_type'        : Openbmc.FRU_TYPES['CORE'],
+		'is_fru'       : False,
 	},
-	'/system/motherboard/dimm0' :
+	'<inventory_root>/system/motherboard/dimm0' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['DIMM'],
-		'fru'	       : True,
-		'fru_id'       : 12,
-		'sensor_id'    : 20,	
+		'fru_type'        : Openbmc.FRU_TYPES['DIMM'],
+		'is_fru'       : True,
 	},
-	'/system/motherboard/dimm1' :
+	'<inventory_root>/system/motherboard/dimm1' :
 	{
-		'ftype'        : Openbmc.FRU_TYPES['DIMM'],
-		'fru'	       : True,
-		'fru_id'       : 13,
-		'sensor_id'    : 21,	
+		'fru_type'        : Openbmc.FRU_TYPES['DIMM'],
+		'is_fru'       : True,
 	},
+	'<inventory_root>/system/io_board/pcie_left_slot_riser' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['RISER_CARD'],
+		'user_label'      : 'Left Slot Riser',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_right_slot_riser' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['RISER_CARD'],
+		'user_label'      : 'Right Slot Riser',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_x16_slot_riser' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['RISER_CARD'],
+		'user_label'      : 'PCIE x16 Slot Riser',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_slot0' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['PCIE_CARD'],
+		'user_label'      : 'OCP Mezz card 0',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_slot1' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['PCIE_CARD'],
+		'user_label'      : 'OCP Mezz card 1',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_slot2' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['PCIE_CARD'],
+		'user_label'      : 'OCP Mezz card 2',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_mezz0' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['PCIE_CARD'],
+		'user_label'      : 'OCP Mezz card 0',
+		'is_fru'       : True,
+	},
+	'<inventory_root>/system/io_board/pcie_mezz1' :
+	{
+		'fru_type'        : Openbmc.FRU_TYPES['PCIE_CARD'],
+		'user_label'      : 'OCP Mezz card 1',
+		'is_fru'       : True,
+	},
+
 }
 
+ID_LOOKUP = {
+	'FRU' : {
+		'14' : '<inventory_root>/system/motherboard/dimm0',
+	},
+	'SENSOR' : {
+		'21' : '<inventory_root>/system/motherboard/dimm0',
+		'14' : '/org/openbmc/sensors/HostStatus_0',
+	},
+	'GPIO_PRESENT' : {
+		'SLOT0_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_left_slot_riser', 
+		'SLOT1_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_right_slot_riser', 
+		'SLOT2_RISER_PRESENT' : '<inventory_root>/system/io_board/pcie_x16_slot_riser',
+		'SLOT0_PRESENT' : '<inventory_root>/system/io_board/pcie_slot0', 
+		'SLOT1_PRESENT' : '<inventory_root>/system/io_board/pcie_slot1', 
+		'SLOT2_PRESENT' : '<inventory_root>/system/io_board/pcie_slot2',
+		'MEZZ0_PRESENT' : '<inventory_root>/system/io_board/pcie_mezz0', 
+		'MEZZ1_PRESENT' : '<inventory_root>/system/io_board/pcie_mezz1',
+	}
+}
 
 GPIO_CONFIG = {}
 GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 4, 'direction': 'out' }
@@ -307,5 +376,14 @@
 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' }
+GPIO_CONFIG['POWER_BUTTON'] =  { 'gpio_num': 32, 'direction': 'in' }
+GPIO_CONFIG['SLOT0_RISER_PRESENT'] =   { 'gpio_num': 104, 'direction': 'in' }
+GPIO_CONFIG['SLOT1_RISER_PRESENT'] =   { 'gpio_num': 105, 'direction': 'in' }
+GPIO_CONFIG['SLOT2_RISER_PRESENT'] =   { 'gpio_num': 106, 'direction': 'in' }
+GPIO_CONFIG['SLOT0_PRESENT'] =  { 'gpio_num': 107, 'direction': 'in' }
+GPIO_CONFIG['SLOT1_PRESENT'] =  { 'gpio_num': 108, 'direction': 'in' }
+GPIO_CONFIG['SLOT2_PRESENT'] =  { 'gpio_num': 109, 'direction': 'in' }
+GPIO_CONFIG['MEZZ0_PRESENT'] =  { 'gpio_num': 112, 'direction': 'in' }
+GPIO_CONFIG['MEZZ1_PRESENT'] =  { 'gpio_num': 113, 'direction': 'in' }
+
 
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 625f36c..af7e79b 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -15,6 +15,7 @@
 	'FAN' : 5,
 	'BMC' : 6,
 	'CORE' : 7,
+	'PCIE_CARD' : 8,
 }
 FRU_STATES = {
 	'NORMAL'            : 0,
@@ -56,30 +57,39 @@
 
 
 def get_objs(bus,bus_name,path,objects):
-	obj = bus.get_object(bus_name,path)
+	#print ">>>>>>>>>>>>>>>>>>>>>>>>>>>> "+bus_name+"; "+path
+	tmp_path = path
+	if (path == ""):
+		tmp_path="/"
+	obj = bus.get_object(bus_name,tmp_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()
+	parent = True
 	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)
+		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:
+		if (node.attrib.has_key('name') == True):
 			node_name = node.attrib['name']
-			if (node_name != path):
-				get_objs(bus,bus_name,path+"/"+node.attrib['name'],objects)
+			if (parent == False):
+				get_objs(bus,bus_name,path+"/"+node_name,objects)
+			else:
+				if (node_name != "" and node_name != path):
+					get_objs(bus,bus_name,node_name,objects)
+			
+		parent = False
 
 
 class DbusProperty:
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
new file mode 100644
index 0000000..f679fee
--- /dev/null
+++ b/bin/inventory_items.py
@@ -0,0 +1,135 @@
+#!/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_items.py [system name]"
+	exit(1)
+System = __import__(sys.argv[1])
+import Openbmc
+
+
+INTF_NAME = 'org.openbmc.InventoryItem'
+DBUS_NAME = 'org.openbmc.managers.Inventory'
+
+FRUS = System.FRU_INSTANCES
+FRU_PATH = System.FRU_PATH
+
+class Inventory(dbus.service.Object):
+	def __init__(self,bus,name):
+		dbus.service.Object.__init__(self,bus,name)
+		self.objects = [ ]
+
+	def addItem(self,item):
+		self.objects.append(item)
+
+	@dbus.service.method("org.openbmc.managers.Inventory",
+		in_signature='', out_signature='a{sa{sv}}')
+	def getItems(self):
+		tmp_obj = {}
+		for item in self.objects:
+			tmp_obj[str(item.item['name'])]=item.getItemDict()
+		return tmp_obj
+			
+
+
+class InventoryItem(dbus.service.Object):
+	def __init__(self,bus,name):
+		dbus.service.Object.__init__(self,bus,name)
+		## store all properties in a dict so can easily
+		## send on dbus
+		self.item = {
+			'name' : name,
+			'is_fru' : False,
+			'fru_type' : 0,
+			'state'  : 0,
+			'data' : { 'manufacturer' : "" }
+		}
+		#self.name = name
+		#self.is_fru = False
+		#self.fru_type = 0
+		self.cache = True
+		#self.state = 0
+
+	def getItemDict(self):
+		return self.item
+
+	@dbus.service.signal('org.openbmc.EventLog')
+	def EventLog(self, priority, message, rc):
+        	pass
+		
+	@dbus.service.method('org.openbmc.InventoryItem',
+		in_signature='a{sv}', out_signature='')
+	def update(self,data):
+		## translate dbus data into basic data types
+		for k in data.keys():
+			d = Openbmc.DbusProperty(k,data[k])
+			self.item['data'][str(k)] = d.getBaseValue()
+		self.saveToCache()
+
+	@dbus.service.method("org.openbmc.SensorValue",
+		in_signature='y', out_signature='')
+	def setValue(self,data):
+		self.item['state'] = data
+		#self.saveToCache()
+		print "Update Fru State: "+str(self.item['state'])
+
+	def isCached(self):
+		return self.cache
+
+	def getCacheFilename(self):
+		global FRU_PATH
+		name = self.item['name'].replace('/','.')
+		filename = FRU_PATH+name[1:]+".fru"
+		return filename
+	
+	def saveToCache(self):
+		if (self.isCached() == False):
+			return
+		print "Caching: "+self.item['name']
+		# TODO: error handling
+		output = open(self.getCacheFilename(), 'wb')
+		## just pickle dict not whole object
+		cPickle.dump(self.item['data'],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
+			# TODO: error handling
+			p = open(filename, 'rb')
+			data2 = cPickle.load(p)
+			for k in data2.keys():
+				self.item['data'][k] = data2[k]
+
+
+
+if __name__ == '__main__':
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+    bus = dbus.SessionBus()
+    name = dbus.service.BusName(DBUS_NAME,bus)
+    mainloop = gobject.MainLoop()
+    obj_parent = Inventory(bus, '/org/openbmc/managers/Inventory')
+
+    for f in FRUS.keys():
+	obj_path=f.replace("<inventory_root>",System.INVENTORY_ROOT)
+    	obj = InventoryItem(bus,obj_path)
+	obj.is_fru = FRUS[f]['is_fru']
+	obj.fru_type = FRUS[f]['fru_type']
+	obj.loadFromCache();
+	obj_parent.addItem(obj)
+	
+    print "Running Inventory Manager"
+    mainloop.run()
+
diff --git a/bin/inventory_manager.py b/bin/inventory_manager.py
deleted file mode 100644
index 75cc390..0000000
--- a/bin/inventory_manager.py
+++ /dev/null
@@ -1,177 +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:  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
-		name = self.fru.replace('/','.')
-		filename = FRU_PATH+name[1:]+".fru"
-		return filename
-	
-	def saveToCache(self):
-		if (self.isCached() == False):
-			return
-		print "Caching: "+self.fru
-		# TODO: error handling
-		output = open(self.getCacheFilename(), 'wb')
-		## just pickle dict not whole object
-		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
-			# TODO: error handling
-			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,
-					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 = {}
-
-		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
-
-	@dbus.service.signal('org.openbmc.EventLog')
-	def EventLog(self, priority, message, rc):
-        	pass
-		
-	def UpdateFruHandler(self,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):
-		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):
-			self.EventLog(1,"FRU ID not found: "+str(iid),1)
-		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
index 1d0061d..290fc33 100644
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -10,21 +10,12 @@
 
 import Openbmc
 
-DBUS_NAME = 'org.openbmc.sensors.IpmiBt'
-OBJ_NAME = '/org/openbmc/sensors/IpmiBt'
+SENSOR_INTERFACE = "org.openbmc.SensorValue"
 
 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():
 	obj =  bus.get_object('org.openbmc.watchdog.Host',
@@ -47,17 +38,16 @@
 
 
 if __name__ == '__main__':
-	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+	#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()
+	#name = dbus.service.BusName(DBUS_NAME,bus)
+	#mainloop = gobject.MainLoop()
 
 	cmd = sys.argv[1]
 	data = None
 	ipmi_id = dbus.Byte(0)
 	if (len(sys.argv) > 2):
-		ipmi_id = dbus.Byte(int(sys.argv[2]))
+		ipmi_id = sys.argv[2]
 	if (len(sys.argv)>3):
 		data = sys.argv[3]
 
@@ -68,18 +58,36 @@
 		intf = getChassisControl()
 		intf.powerOff()
 	elif (cmd == "setsensor"):
-		obj.SetSensor(ipmi_id,dbus.Byte(int(data)))
+		intf_sys = Openbmc.getManagerInterface(bus,"System")
+		obj_info = intf_sys.getObjectFromId("SENSOR",ipmi_id)
+		obj_path = obj_info['obj_path']
+		bus_name = obj_info['bus_name']
+		if (obj_path != "" and bus_name != ""):
+			obj = bus.get_object(bus_name,obj_path)
+			intf = dbus.Interface(obj,SENSOR_INTERFACE)
+			intf.setValue(dbus.Byte(int(data)))	
+			
 	elif (cmd == "getsensors"):
 		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
 		data = intf_sens.getSensors()
 		prettyPrint(data)
 	elif (cmd == "updatefru"):
 		d = { 'manufacturer' : data }	
-		obj.UpdateFru(ipmi_id,d)
+		intf_sys = Openbmc.getManagerInterface(bus,"System")
+		obj_info = intf_sys.getObjectFromId("FRU",ipmi_id)
+		obj_path = obj_info['obj_path']
+		bus_name = obj_info['bus_name']
+		if (obj_path != "" and bus_name != ""):
+			obj = bus.get_object(bus_name,obj_path)
+			intf = dbus.Interface(obj,"org.openbmc.InventoryItem")
+			intf.update(d)	
+
 	elif (cmd == "getfrus"):
 		intf_fru = Openbmc.getManagerInterface(bus,"Inventory")
-		data = intf_fru.getFrus()
-		prettyPrint(data)
+		data = intf_fru.getItems()
+		for i in data:
+			for k in data[i].keys():
+				print k+" = "+str(data[i][k]) 
 	elif (cmd == "pokewatchdog"):
 		intf = self.getWatchdog()
 		intf.poke()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 1bc90a3..a5b8023 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -2,7 +2,6 @@
 
 import sys
 import subprocess
-#from gi.repository import GObject
 import gobject
 import dbus
 import dbus.service
@@ -41,15 +40,23 @@
 					signal_name = "EventLog",
 					path_keyword='path')
 
-
-
 		self.current_state = ""
 		self.system_states = {}
+		self.bus_name_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)
+	
+		## replace symbolic path in ID_LOOKUP
+		for category in System.ID_LOOKUP:
+			for key in System.ID_LOOKUP[category]:
+				val = System.ID_LOOKUP[category][key]
+				new_val = val.replace("<inventory_root>",System.INVENTORY_ROOT)
+				System.ID_LOOKUP[category][key] = new_val
+	
 		self.SystemStateHandler("INIT")
 		print "SystemManager Init Done"
 
@@ -86,7 +93,27 @@
 			method()
 
 		self.current_state = state_name
-			
+		
+	@dbus.service.method(DBUS_NAME,
+		in_signature='ss', out_signature='a{ss}')
+	def getObjectFromId(self,category,key):
+		bus_name = ""
+		obj_path = ""
+
+		if (System.ID_LOOKUP.has_key(category)):
+			if (System.ID_LOOKUP[category].has_key(key)):
+				obj_path = System.ID_LOOKUP[category][key]
+		else:
+			print "ERROR: key not found: "+category+","+key
+
+		if (self.bus_name_lookup.has_key(obj_path)):
+			bus_name = self.bus_name_lookup[obj_path]
+		else:
+			print "ERROR: bus name not found for: "+obj_path
+		r = { 'bus_name' : bus_name, 'obj_path' : obj_path }
+		return r
+	
+	
 	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']
@@ -154,11 +181,13 @@
 
 	def NewBusHandler(self, bus_name, a, b):
 		if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
+			objects = {}
+			Openbmc.get_objs(bus,bus_name,"",objects)
+			for instance_name in objects.keys():
+				self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+			
 			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)				
-	
 				for instance_name in objects.keys(): 
 					obj_path = objects[instance_name]['PATH']
 					for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
