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()
