lots of changes
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 7d0bf12..65d8683 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -2,6 +2,10 @@
 import dbus
 import Openbmc
 
+HOME_PATH = '/media/sf_vbox/openbmc/'
+BIN_PATH = HOME_PATH+'bin/'
+CACHE_PATH = HOME_PATH+'cache/'
+
 CACHED_INTERFACES = {
 	'org.openbmc.Fru' : True
 }
@@ -9,7 +13,8 @@
 SYSTEM_CONFIG = {}
 
 SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
-		'exe_name' : 'bin/sensor_manager.py',
+		'start_process' : True,
+		'process_name' : 'sensor_manager.py',
 		'heartbeat' : 'no',
 		'rest_name' : 'sensors',
 		'instances' : [	
@@ -20,21 +25,9 @@
 		]
 	}
 
-#SYSTEM_CONFIG['org.openbmc.managers.Frus'] = {
-#		'exe_name' : 'bin/fru_manager.py',
-#		'heartbeat' : 'no',
-#		'rest_name' : 'frus',
-#		'instances' : [	
-#			{
-#				'name' : 'Barreleye',
-#				'user_label': 'Fru Manager',
-#			}
-#		]
-#	}
-
-
 SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
-		'exe_name' : 'bin/eventlogger.py',
+		'start_process' : True,
+		'process_name' : 'eventlogger.py',
 		'heartbeat' : 'no',
 		'rest_name' : 'events',
 		'instances' : [	
@@ -46,7 +39,8 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.managers.IpmiTranslator'] = {
-		'exe_name' : 'bin/ipmi_translator.py',
+		'start_process' : True,
+		'process_name' : 'ipmi_translator.py',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
@@ -58,7 +52,8 @@
 
 
 SYSTEM_CONFIG['org.openbmc.control.Power'] = {
-		'exe_name' : 'bin/power_control.exe',
+		'start_process' : True,
+		'process_name' : 'power_control.exe',
 		'heartbeat' : 'yes',
 		'instances' : [	
 			{
@@ -69,9 +64,10 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.sensors.Temperature.Ambient'] = {
-		'exe_name' : 'bin/sensor_ambient.exe',
+		'start_process' : True,
+		'process_name' : 'sensor_ambient.exe',
 		'heartbeat' : 'yes',
-		'init_methods' : ['org.openbmc.SensorInteger'],
+		'init_methods' : ['org.openbmc.SensorValue'],
 		'poll_interval': 5000,    
 		'instances' : [	
 			{
@@ -79,7 +75,7 @@
 				'user_label': 'Ambient Temperature 1',
 				'sensor_id' : 41,
 				'properties' : { 
-					'org.openbmc.SensorIntegerThreshold' : {
+					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
 						'lower_warning' : 10,
 						'upper_warning' : 15,
@@ -95,7 +91,7 @@
 				'name' : 'AmbientTemperature2',
 				'user_label': 'Ambient Temperature 2',
  				'properties' : { 
-					'org.openbmc.SensorIntegerThreshold' : {
+					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
 						'lower_warning' : 10,
 						'upper_warning' : 15,
@@ -110,7 +106,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.buttons.ButtonPower'] = {
-		'exe_name' : 'bin/button_power.exe',
+		'start_process' : True,
+		'process_name' : 'button_power.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
@@ -120,7 +117,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.sensors.HostStatus'] = {
-		'exe_name' : 'bin/sensor_host_status.exe',
+		'start_process' : True,
+		'process_name' : 'sensor_host_status.exe',
 		'heartbeat' : "no",
 		'instances' : [	
 			{
@@ -131,7 +129,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
-		'exe_name' : 'bin/chassis_identify.exe',
+		'start_process' : True,
+		'process_name' : 'chassis_identify.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
@@ -141,7 +140,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
-		'exe_name' : 'bin/flash_bios.exe',
+		'start_process' : True,
+		'process_name' : 'flash_bios.exe',
 		'heartbeat' : 'no',
 		'rest_name' : 'flash',
 		'instances' : [	
@@ -152,7 +152,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Host'] = {
-		'exe_name' : 'bin/control_host.exe',
+		'start_process' : True,
+		'process_name' : 'control_host.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
@@ -162,7 +163,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
-		'exe_name' : 'bin/chassis_control.py',
+		'start_process' : True,
+		'process_name' : 'chassis_control.py',
 		'heartbeat' : 'no',
 		'rest_name' : 'chassis',
 		'instances' : [	
@@ -173,7 +175,8 @@
 		]
 	}
 SYSTEM_CONFIG['org.openbmc.frus.Fan'] = {
-		'exe_name' : 'bin/fan.exe',
+		'start_process' : True,
+		'process_name' : 'fan.exe',
 		'heartbeat' : 'no',
 		'instances' : [	
 			{
@@ -253,7 +256,8 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.frus.Board'] = {
-		'exe_name' : 'bin/fru_board.exe',
+		'start_process' : True,
+		'process_name' : 'fru_board.exe',
 		'init_methods' : ['org.openbmc.Fru'],
 		'heartbeat' : 'no',
 		'instances' : [
@@ -277,7 +281,8 @@
 	}
 
 SYSTEM_CONFIG['org.openbmc.frus.Fru'] = {
-		'exe_name' : 'bin/fru_generic.exe',
+		'start_process' : True,
+		'process_name' : 'fru_generic.exe',
 		'heartbeat' : 'no',
 		'instances' : [
 			{
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index ffa38dd..4b10739 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -18,11 +18,22 @@
 		['NONE','CPU','DIMM','BACKPLANE','RISER_CARD','FAN']
 }
 
+
+def object_to_bus_name(obj):
+	parts = obj.split('/')
+	parts.pop(0)
+	parts.pop()
+	return ".".join(parts)	
+
+def bus_to_object_name(bus_name):
+	return "/"+bus_name.replace('.','/')
+
+
 class DbusProperty:
 	def __init__(self,name,value):
 		self.dbusBaseType = {
 			'dbus.Byte' : 'int',
-			'dbus.Float' : 'float',
+			'dbus.Double' : 'float',
 			'dbus.Int32' : 'int',
 			'dbus.UInt32' : 'long',
 			'dbus.String' : 'str',
@@ -30,23 +41,28 @@
 		}
 		self.name = str(name)	
 		self.dbusType = str(type(value)).split("'")[1]
+		self.variant_level = value.variant_level
 		self.value = None
+
 		try: 
 			self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
 		except:
 			raise Exception("Unknown dbus type: "+self.dbusType)
 
-	def changeValue(self,value):
+	def setValue(self,value):
 		try: 
 			self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
 		except:
 			raise Exception("Unknown dbus type: "+self.dbusType)
 
+	def setVariant(self,variant_level):
+		self.variant_level = variant_level
 
 	def getName(self):
 		return self.name
+
 	def getValue(self):
-		e = self.dbusType+"(self.value)"
+		e = self.dbusType+"(self.value, variant_level="+str(self.variant_level)+")"
 		return eval(e)
 
 	#def __getstate__(self):
diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
index 312c688..ff0e200 100644
--- a/bin/PropertyManager.py
+++ b/bin/PropertyManager.py
@@ -4,81 +4,84 @@
 import cPickle
 import os
 import Openbmc
-import gobject
 import dbus
 import dbus.service
 import dbus.mainloop.glib
+from gi.repository import Gio, GLib, GObject
 
 
-SAVE_PATH = 'data/'
-
-def loadProperties(bus,bus_name,obj_path,properties):
-	## Load properties from system config
-	obj = bus.get_object(bus_name,obj_path)
-	dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-	for prop_interface in properties.keys():
-		print "Intf: "+prop_interface
-		for prop in properties[prop_interface]:
-			tmp_val = dbus_properties.Get(prop_interface,prop)
-			dbus_prop = Openbmc.DbusProperty(prop,tmp_val)
-			value = properties[prop_interface][prop]
-			dbus_prop.changeValue(value)
-			dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
-		
-		## if save file exists, overlay properties from file
-		directory = obj_path.replace('/','.')
-		directory = SAVE_PATH+directory.lstrip('.')
-		filename = directory+"/"+prop_interface
-		if (os.path.isfile(filename) == False):
-			## not an error	
-			print "No cache available for: "+filename
-		else:
-			try:
-				print "Loading from disk: "+obj_path
-				output = open(filename, 'rb')
-				dbus_props = cPickle.load(output)
-				output.close()
-				save_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-				for dbus_prop in dbus_props:
-					save_properties.Set(prop_interface,dbus_prop.getName(),dbus_prop.getValue())
-		
-			except Exception as e:
-				## TODO: Error handling
-				print "Error loadFru: "+str(e)
-
-	return None
-
-def saveProperties(bus,bus_name,obj_path,interface_name,cache,properties):
-	obj = bus.get_object(bus_name,obj_path)
-	prop_intf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-
-	for prop in properties.keys():
-		print "Saving properties: "+prop
-		prop_intf.Set(interface_name,prop,properties[prop])
-
-
-	dbus_props = []
-	if (cache):
-		print "Caching: "+obj_path
-		all_properties = prop_intf.GetAll(interface_name)
-		for prop in all_properties.keys():
-			dbus_prop = Openbmc.DbusProperty(prop,all_properties[prop])
-			dbus_props.append(dbus_prop)
-		
-		try:
+class PropertyManager():
+	def __init__(self,bus,save_path):
+		self.bus = bus
+		self.save_path = save_path
+	
+	def loadProperties(self,bus_name,obj_path,properties):
+		## Load properties from system config
+		obj = self.bus.get_object(bus_name,obj_path)
+		dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+		for prop_interface in properties.keys():
+			for prop in properties[prop_interface]:
+				tmp_val = dbus_properties.Get(prop_interface,prop)
+				dbus_prop = Openbmc.DbusProperty(prop,tmp_val)
+				value = properties[prop_interface][prop]
+				dbus_prop.setValue(value)
+				dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
+			
+			## if save file exists, overlay properties from file
 			directory = obj_path.replace('/','.')
-			directory = SAVE_PATH+directory.lstrip('.')
-			filename = directory+"/"+interface_name	
-			if not os.path.exists(directory):
-   				os.makedirs(directory)
-
-			output = open(filename, 'wb')
-			cPickle.dump(dbus_props,output)
-			output.close()	
-		except Exception as e:
-			## TODO: error handling
-			print str(e)
+			directory = self.save_path+directory.lstrip('.')
+			filename = directory+"/"+prop_interface
+			if (os.path.isfile(filename) == False):
+				## not an error	
+				print "No cache available for: "+filename
+			else:
+				try:
+					print "Loading from disk: "+obj_path
+					output = open(filename, 'rb')
+					dbus_props = cPickle.load(output)
+					output.close()
+					save_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+					for dbus_prop in dbus_props:
+						save_properties.Set(prop_interface,dbus_prop.getName(),dbus_prop.getValue())
 		
-	return None
+				except Exception as e:
+					## TODO: Error handling
+					print "Error loadFru: "+str(e)
+
+		return None
+
+	def saveProperties(self,bus_name,obj_path,interface_name,cache,properties):
+		obj = self.bus.get_object(bus_name,obj_path)
+		prop_intf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+
+		for prop in properties.keys():
+			print "Saving properties: "+prop
+			## convert property to correct dbus type
+			print type(properties[prop])
+			prop_intf.Set(interface_name,prop,properties[prop])
+
+		dbus_props = []
+		if (cache):
+			print "Caching: "+obj_path
+			all_properties = prop_intf.GetAll(interface_name)
+			for prop in all_properties.keys():
+				dbus_prop = Openbmc.DbusProperty(prop,all_properties[prop])
+				dbus_props.append(dbus_prop)
+		
+			try:
+				directory = obj_path.replace('/','.')
+				directory = self.save_path+directory.lstrip('.')
+				filename = directory+"/"+interface_name	
+				if not os.path.exists(directory):
+   					os.makedirs(directory)
+
+				output = open(filename, 'wb')
+				cPickle.dump(dbus_props,output)
+				output.close()	
+			except Exception as e:
+				## TODO: error handling
+				print str(e)
+		
+		return None
 
 
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index ccea354..15a8feb 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-import gobject
+from gi.repository import GObject
 import dbus
 import dbus.service
 import dbus.mainloop.glib
@@ -143,7 +143,7 @@
     bus = dbus.SessionBus()
     name = dbus.service.BusName(DBUS_NAME, bus)
     obj = ChassisControlObject(bus, OBJ_NAME)
-    mainloop = gobject.MainLoop()
+    mainloop = GObject.MainLoop()
     
     print "Running ChassisControlService"
     mainloop.run()
diff --git a/bin/eventlogger.py b/bin/eventlogger.py
index 113bd03..3701d28 100644
--- a/bin/eventlogger.py
+++ b/bin/eventlogger.py
@@ -1,12 +1,13 @@
 #!/usr/bin/env python
 
 import sys
-import gobject
+import syslog
+import json
+from gi.repository import GObject
 import dbus
 import dbus.service
 import dbus.mainloop.glib
-import syslog
-import json
+
 
 DBUS_NAME = 'org.openbmc.loggers.EventLogger'
 OBJ_NAME = '/org/openbmc/loggers/EventLogger/'+sys.argv[1]
@@ -30,7 +31,7 @@
     bus = dbus.SessionBus()
     name = dbus.service.BusName(DBUS_NAME, bus)
     obj = EventLogger(bus, OBJ_NAME)
-    mainloop = gobject.MainLoop()
+    mainloop = GObject.MainLoop()
     
     print "Running EventLogger"
     mainloop.run()
diff --git a/bin/ipmi_bt.py b/bin/ipmi_bt.py
index 8e4566e..375eb2a 100644
--- a/bin/ipmi_bt.py
+++ b/bin/ipmi_bt.py
@@ -2,11 +2,10 @@
 
 import sys
 import subprocess
-import gobject
 import dbus
+from gi.repository import GObject
 import dbus.service
 import dbus.mainloop.glib
-import xml.etree.ElementTree as ET
 
 if (len(sys.argv) < 2):
 	print "Usage:  ipmi_bt.py [system name]"
@@ -62,7 +61,7 @@
 	bus = dbus.SessionBus()
 	name = dbus.service.BusName(DBUS_NAME,bus)
 	obj = IpmiBt(bus,OBJ_NAME)
-	mainloop = gobject.MainLoop()
+	mainloop = GObject.MainLoop()
 
 	if (cmd == 'updatefru'):
 		obj.emitUpdateFru(ipmi_id,data)
diff --git a/bin/ipmi_translator.py b/bin/ipmi_translator.py
index ec56057..f7a7aab 100644
--- a/bin/ipmi_translator.py
+++ b/bin/ipmi_translator.py
@@ -2,11 +2,11 @@
 
 import sys
 import subprocess
-import gobject
+from gi.repository import GObject
+
 import dbus
 import dbus.service
 import dbus.mainloop.glib
-import xml.etree.ElementTree as ET
 import PropertyManager
 
 if (len(sys.argv) < 2):
@@ -28,6 +28,7 @@
 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")
@@ -59,7 +60,7 @@
 			## save fru object to object and disk
 			interface_name = 'org.openbmc.Fru'
 			cache = System.CACHED_INTERFACES.has_key(interface_name)
-			PropertyManager.saveProperties(bus,bus_name,obj_path,interface_name,cache,data)
+			self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
 		else:
 			## TODO: error handling
 			pass
@@ -68,21 +69,25 @@
 		if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
 			obj_path = ID_LOOKUP['SENSOR'][sensor_id]
 			bus_name = ID_LOOKUP['BUS_NAME'][sensor_id]
-			data = { 'value' : value }
+
+			## change to variant data type
+			## comes in off dbus from ipmi_bt as a basic data type
+			dvalue = Openbmc.DbusProperty('value',value)
+			dvalue.setVariant(2)
+			data = { 'value' : dvalue.getValue() }
 			## save sensor value
 			## TODO:  need to accomodate any sensor interface
-			interface_name = 'org.openbmc.SensorInteger'
-			#cache = System.CACHED_INTERFACES.has_key(interface_name)
+			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(value)
-			PropertyManager.saveProperties(bus,bus_name,obj_path,interface_name,cache,data)
+			self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
 		else:
 			## TODO: error handling
 			pass
 
 	@dbus.service.method(DBUS_NAME,
-		in_signature='i', out_signature='i')
+		in_signature='i', out_signature='v')
 	def getSensor(self,sensor_id):
 		val = 0
 		if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
@@ -104,7 +109,7 @@
     bus = dbus.SessionBus()
     name = dbus.service.BusName(DBUS_NAME,bus)
     obj = IpmiTranslator(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
+    mainloop = GObject.MainLoop()
 
     print "Running IpmiTranslator"
     mainloop.run()
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 33feebf..2314a7f 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-import gobject
+from gi.repository import GObject
 import dbus
 import dbus.service
 import dbus.mainloop.glib
@@ -9,7 +9,7 @@
 if (len(sys.argv) < 2):
 	print "Usage:  sensor_manager.py [system name]"
 	exit(1)
-
+System = __import__(sys.argv[1])
 import Openbmc
 
 DBUS_NAME = 'org.openbmc.managers.Sensors'
@@ -19,66 +19,67 @@
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
 		bus.add_signal_receiver(self.UpdateSensor,
-					dbus_interface = 'org.openbmc.SensorInteger', 
-					signal_name = 'Changed', path_keyword='path')
+					dbus_interface = 'org.freedesktop.DBus.Properties', 
+					signal_name = 'PropertiesChanged', path_keyword='path')
 		bus.add_signal_receiver(self.NormalThreshold,
-					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					dbus_interface = 'org.openbmc.SensorThreshold', 
 					signal_name = 'Normal', path_keyword='path')
 		bus.add_signal_receiver(self.WarningThreshold,
-					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					dbus_interface = 'org.openbmc.SensorThreshold', 
 					signal_name = 'Warning', path_keyword='path')
 		bus.add_signal_receiver(self.CriticalThreshold,
-					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					dbus_interface = 'org.openbmc.SensorThreshold', 
 					signal_name = 'Critical', path_keyword='path')
 
 		self.sensor_cache = {}
 		
 	@dbus.service.method(DBUS_NAME,
-		in_signature='s', out_signature='i')
+		in_signature='s', out_signature='v')
 	def getSensor(self,path):
 		val = None
 		if (self.sensor_cache.has_key(path) == True):
 			val = self.sensor_cache[path]['value']
 		return val
 		
-	def UpdateSensor(self,value, units, path = None):
-		if (self.sensor_cache.has_key(path) == False):
-			self.sensor_cache[path] = {}
-		self.sensor_cache[path]['value'] = value
-		self.sensor_cache[path]['units'] = units
+	def UpdateSensor(self,interface,prop_dict,props, path = None):
+		if (interface == "org.openbmc.SensorValue"):
+			self.initSensorEntry(path)
+			for p in prop_dict.keys():	
+				self.sensor_cache[path][p] = prop_dict[p]
 
 	@dbus.service.signal(DBUS_NAME)
 	def CriticalThreshold(self, path = None):
 		print "Critical: "+path
-		if (self.sensor_cache.has_key(path) == False):
-			self.sensor_cache[path] = {}
+		self.initSensorEntry(path)
 		self.sensor_cache[path]['threshold'] = "CRITICAL"
 
-
 	@dbus.service.signal(DBUS_NAME)
 	def WarningThreshold(self, path = None):
-		print "Warning: "+path
-		if (self.sensor_cache.has_key(path) == False):
-			self.sensor_cache[path] = {}
+		print "Warning:"+path
+		self.initSensorEntry(path)
 		self.sensor_cache[path]['threshold'] = "WARNING"
 
-
 	@dbus.service.signal(DBUS_NAME)
 	def NormalThreshold(self, path = None):
 		print "Normal: "+path
-		if (self.sensor_cache.has_key(path) == False):
-			self.sensor_cache[path] = {}
+		self.initSensorEntry(path)
 		self.sensor_cache[path]['threshold'] = "NORMAL"
 
+	def initSensorEntry(self,path):
+		if (self.sensor_cache.has_key(path) == False):
+			self.sensor_cache[path] = {}
+			obj = bus.get_object(Openbmc.object_to_bus_name(path),path)
+			intf = dbus.Interface(obj,'org.freedesktop.DBus.Properties')
+			self.sensor_cache[path]['units'] = intf.Get('org.openbmc.SensorValue','units')
+			
 
-
-
+				
 if __name__ == '__main__':
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
     bus = dbus.SessionBus()
     name = dbus.service.BusName(DBUS_NAME,bus)
     obj = SensorManager(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
+    mainloop = GObject.MainLoop()
 
     print "Running Sensor Manager"
     mainloop.run()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 3275dc9..e96e547 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -2,11 +2,11 @@
 
 import sys
 import subprocess
-import gobject
+from gi.repository import GObject
+
 import dbus
 import dbus.service
 import dbus.mainloop.glib
-#import xml.etree.ElementTree as ET
 import os
 import PropertyManager
 
@@ -25,20 +25,12 @@
 class SystemManager(dbus.service.Object):
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
-		#self.sensor_manager_running = False
-		#self.fru_manager_running = False
-		#self.inited = False
 		
+		self.property_manager = PropertyManager.PropertyManager(bus,System.CACHE_PATH)
 		## Signal handlers
 		bus.add_signal_receiver(self.NewBusHandler,
 					dbus_interface = 'org.freedesktop.DBus', 
 					signal_name = "NameOwnerChanged")
-		#bus.add_signal_receiver(self.FruRunningHandler,
-		#			dbus_interface = 'org.openbmc.managers.Frus'
-		#			signal_name = "OpenBmcRunning")
-		#bus.add_signal_receiver(self.SensorRunningHandler,
-		#			dbus_interface = 'org.openbmc.managers.Sensors'
-		#			signal_name = "OpenBmcRunning")
 		bus.add_signal_receiver(self.CacheMeHandler,
 					signal_name = 'CacheMe', path_keyword='path',interface_keyword='interface')
 
@@ -52,56 +44,58 @@
 			pass
 		
 		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
-    		gobject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
+    		GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
 
 	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)
-		PropertyManager.saveProperties(bus,busname,path,interface,cache,data)
+		self.property_manager.saveProperties(busname,path,interface,cache,data)
 
 
 	def start_process(self,bus_name):
-		exe_name = System.SYSTEM_CONFIG[bus_name]['exe_name']
-		cmdline = [ ]
-		cmdline.append(exe_name)
-		for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
-			cmdline.append(instance['name'])
-		try:
-			print "Starting process: "+" ".join(cmdline)
-			System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline);
-		except Exception as e:
-			## TODO: error
-			print "Error starting process: "+" ".join(cmdline)
+		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)
+			for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
+				cmdline.append(instance['name'])
+			try:
+				print "Starting process: "+" ".join(cmdline)
+				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"
 		for bus_name in System.SYSTEM_CONFIG.keys():
-			## even if process doesn't request heartbeat check, 
-			##   make sure process is still alive
-			p = System.SYSTEM_CONFIG[bus_name]['popen']
-			p.poll()
-			if (p.returncode != None):
-				print "Process for "+bus_name+" appears to be dead"
-				self.start_process(bus_name)
-
-			## process is alive, now check if heartbeat received
-			## during previous interval
-			elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
-				if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
-					print "Heartbeat error: "+bus_name
-					p = System.SYSTEM_CONFIG[bus_name]['popen']
-					## TODO: error checking
-					p.poll()
-					if (p.returncode == None):
-						print "Process must be hung, so killing"
-						p.kill()
+			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
+				## even if process doesn't request heartbeat check, 
+				##   make sure process is still alive
+				p = System.SYSTEM_CONFIG[bus_name]['popen']
+				p.poll()
+				if (p.returncode != None):
+					print "Process for "+bus_name+" appears to be dead"
+					self.start_process(bus_name)
+	
+				## process is alive, now check if heartbeat received
+				## during previous interval
+				elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
+					if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
+						print "Heartbeat error: "+bus_name
+						p = System.SYSTEM_CONFIG[bus_name]['popen']
+						## TODO: error checking
+						p.poll()
+						if (p.returncode == None):
+							print "Process must be hung, so killing"
+							p.kill()
 						
-					self.start_process(bus_name)			
-				else:
-					System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-					print "Heartbeat ok: "+bus_name
+						self.start_process(bus_name)			
+					else:
+						System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
+						print "Heartbeat ok: "+bus_name
 					
 		return True
 
@@ -121,7 +115,7 @@
 					obj_path = obj_root+'/'+instance['name']
 					obj_paths.append(obj_path)
 					if (instance.has_key('properties')):
-						PropertyManager.loadProperties(bus,bus_name,obj_path,												instance['properties'])
+						self.property_manager.loadProperties(bus_name,obj_path,												instance['properties'])
 
 				## After object properties are setup, call init method if requested
 				if (System.SYSTEM_CONFIG[bus_name].has_key('init_methods')):
@@ -154,7 +148,7 @@
     bus = dbus.SessionBus()
     name = dbus.service.BusName(DBUS_NAME,bus)
     obj = SystemManager(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
+    mainloop = GObject.MainLoop()
 
     print "Running SystemManager"
     mainloop.run()