diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 9f9ba03..e77a438 100755
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -22,7 +22,7 @@
 	'HOST_POWERING_ON',
 	'HOST_POWERED_ON',
 	'HOST_BOOTING',
-	'HOST_UP',
+	'HOST_BOOTED',
 	'HOST_POWERED_DOWN',
 ]
 
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 1518f74..b11c7be 100755
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -6,27 +6,6 @@
 GPIO_DEV = '/sys/class/gpio'
 BUS = "system"
 
-FRU_TYPES = {
-	'SYSTEM' : 0,
-	'CPU' : 1,
-	'DIMM' : 2,
-	'MAIN_PLANAR' : 3,
-	'RISER_CARD' : 4,
-	'DAUGHTER_CARD' : 5,
-	'FAN' : 6,
-	'BMC' : 7,
-	'CORE' : 8,
-	'PCIE_CARD' : 9,
-	'MEMORY_BUFFER' : 10,
-}
-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'],
@@ -145,6 +124,28 @@
 		except:
         		self.properties[interface_name][property_name] = new_value
 
+	@dbus.service.method(dbus.PROPERTIES_IFACE,
+		in_signature='sa{sv}')
+	def SetAll(self, interface_name, prop_dict):
+		if (self.properties.has_key(interface_name) == False):
+			self.properties[interface_name] = {}
+
+		value_changed  = False
+		for property_name in prop_dict:
+			new_value = prop_dict[property_name]
+			try:
+				old_value = self.properties[interface_name][property_name] 
+				if (old_value != new_value):
+					self.properties[interface_name][property_name] = new_value
+					value_changed = True
+				
+			except:
+        			self.properties[interface_name][property_name] = new_value
+				value_changed = True
+		if (value_changed == True):
+			self.PropertiesChanged(interface_name, prop_dict, [])
+	
+
 	@dbus.service.signal(dbus.PROPERTIES_IFACE,
 		signature='sa{sv}as')
 	def PropertiesChanged(self, interface_name, changed_properties,
diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index 286c9cf..13ae975 100755
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -22,7 +22,7 @@
 	'HOST_POWERING_ON',
 	'HOST_POWERED_ON',
 	'HOST_BOOTING',
-	'HOST_UP',
+	'HOST_BOOTED',
 	'HOST_POWERED_DOWN',
 ]
 
@@ -53,6 +53,15 @@
 
 SYSTEM_CONFIG = {}
 
+SYSTEM_CONFIG['org.openbmc.managers.Property'] = {
+		'system_state' : 'BMC_INIT',
+		'start_process' : False,
+		'monitor_process' : False,
+		'process_name' : 'property_manager.py',
+		'heartbeat' : 'no',
+		'instances' : [	{ 'name' : SYSTEM_NAME } ]
+	}
+
 SYSTEM_CONFIG['org.openbmc.control.Bmc'] = {
 		'system_state' : 'BMC_INIT',
 		'start_process' : True,
@@ -205,13 +214,10 @@
 		'instances' : [	{'name' : 'Fan_0' }, {'name' : 'Fan_1'}, {'name' : 'Fan_2'} ]
 	}
 
-NON_CACHABLE_PROPERTIES = {
-	'name'       : True,
-	'user_label' : True,
-	'location'   : True,
-	'state'      : True,
-	'cache'      : True
-}
+CACHED_INTERFACES = {
+		"org.openbmc.InventoryItem" : True,
+		"org.openbmc.control.Chassis" : True,
+	}
 INVENTORY_ROOT = '/org/openbmc/inventory'
 
 FRU_INSTANCES = {
@@ -310,7 +316,7 @@
 		0x04 : '<inventory_root>/system/chassis/motherboard/dimm1',
 		0x05 : '<inventory_root>/system/chassis/motherboard/dimm2',
 		0x06 : '<inventory_root>/system/chassis/motherboard/dimm3',
-		0xff : '<inventory_root>/system',
+		0x35 : '<inventory_root>/system',
 	},
 	'FRU_STR' : {
 		'PRODUCT_15' : '<inventory_root>/system',
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index a0ef920..c2a2af2 100755
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -18,10 +18,10 @@
 
 BOOTED = 100
 
-class ChassisControlObject(dbus.service.Object):
+class ChassisControlObject(Openbmc.DbusProperties):
 	def __init__(self,bus,name):
 		self.dbus_objects = { }
-
+		Openbmc.DbusProperties.__init__(self)
 		dbus.service.Object.__init__(self,bus,name)
 		## load utilized objects
 		self.dbus_objects = {
@@ -36,12 +36,12 @@
 				'interface_name' : 'org.openbmc.Led'
 			}
 		}
-		#self.power_sequence = 0
-		self.reboot = 0	
-		self.last_power_state = 0
 
 		#uuid
-		self.id = 0
+		self.Set(DBUS_NAME,"uuid",str(uuid.uuid1()))
+		self.Set(DBUS_NAME,"reboot",0)
+		self.Set(DBUS_NAME,"power_policy",0)	
+		self.Set(DBUS_NAME,"last_system_state","")	
 
 		bus.add_signal_receiver(self.power_button_signal_handler, 
 					dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed", 
@@ -56,13 +56,6 @@
 		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')
-	def getID(self):
-		if (self.id==0):
-			#calculate uuuid
-			self.id = uuid.uuid1()
-		return str(self.id)
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
@@ -84,7 +77,7 @@
 		in_signature='', out_signature='')
 	def powerOn(self):
 		print "Turn on power and boot"
-		self.reboot = 0
+		self.Set(DBUS_NAME,"reboot",0)
 		if (self.getPowerState()==0):
 			intf = self.getInterface('power_control')
 			intf.setPowerState(POWER_ON)
@@ -102,14 +95,16 @@
 		in_signature='', out_signature='')
 	def softPowerOff(self):
 		print "Soft off power"
-		## Somehow tell host to shutdown via ipmi
+		## TODO: Somehow tell host to shutdown via ipmi
+		## for now hard power off
+		self.powerOff()	
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def reboot(self):
 		print "Rebooting"
-		self.reboot=1
+		self.Set(DBUS_NAME,"reboot",1)
 		intf.softPowerOff()
 		return None
 
@@ -127,13 +122,15 @@
 	@dbus.service.method(DBUS_NAME,
 		in_signature='i', out_signature='')
 	def setPowerPolicy(self,policy):
+		self.Set(DBUS_NAME,"power_policy",policy)	
 		return None
 
 
 	## Signal handler
 
 	def SystemStateHandler(self,state_name):
-		if (state_name == "HOST_POWERED_OFF" and self.reboot==1):
+		self.Set(DBUS_NAME,"last_system_state",state_name)	
+		if (state_name == "HOST_POWERED_OFF" and self.Get(DBUS_NAME,"reboot")==1):
 			self.powerOn()
 				
 
@@ -149,8 +146,8 @@
 
 	def host_watchdog_signal_handler(self):
 		print "Watchdog Error, Hard Rebooting"
-		#self.reboot = 1
-		#self.powerOff()
+		self.Set(DBUS_NAME,"reboot",1)
+		self.powerOff()
 		
 
 if __name__ == '__main__':
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index a162bad..78691d6 100755
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -30,7 +30,7 @@
 		if not os.path.exists(FRU_PATH):
    			os.makedirs(FRU_PATH)
 
-
+		
 		self.objects = [ ]
 
 	def addItem(self,item):
@@ -63,10 +63,8 @@
 		in_signature='a{sv}', out_signature='')
 	def update(self,data):
 		## translate dbus data into basic data types
-		for k in data.keys():
-			self.setField(k,data[k])
-
-		self.saveToCache()
+		self.SetAll(INTF_NAME,data)
+		#self.saveToCache()
 
 	@dbus.service.method(INTF_NAME,
 		in_signature='s', out_signature='')
@@ -135,7 +133,7 @@
     	obj = InventoryItem(bus,obj_path)
 	obj.setField('is_fru',FRUS[f]['is_fru'])
 	obj.setField('fru_type',FRUS[f]['fru_type'])
-	obj.loadFromCache();
+	#obj.loadFromCache();
 	obj_parent.addItem(obj)
 	
     print "Running Inventory Manager"
diff --git a/bin/system_manager.py b/bin/system_manager.py
index f7bfdad..03ad9f4 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -192,11 +192,16 @@
 				Openbmc.get_objs(bus,bus_name,"",objects)
 				for instance_name in objects.keys():
 					obj_path = objects[instance_name]['PATH']
+					#obj = bus.get_object("org.openbmc.managers.Property",
+					#		"/org/openbmc/managers/Property")
+					#intf = dbus.Interface(obj,"org.openbmc.managers.Property")
+					#intf.loadFromCache(bus_name,obj_path)
 					self.bus_name_lookup[obj_path] = bus_name
 					if (System.EXIT_STATE_DEPEND[self.current_state].has_key(obj_path) == True):
 						System.EXIT_STATE_DEPEND[self.current_state][obj_path] = 1
 								
-			except:
+			except Exception as e:
+				print e
 				pass
 	
 			if (System.SYSTEM_CONFIG.has_key(bus_name)):
