diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 65d8683..50a3492 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -1,4 +1,6 @@
 #! /usr/bin/python
+
+## todos: event logger, 
 import dbus
 import Openbmc
 
@@ -12,6 +14,24 @@
 
 SYSTEM_CONFIG = {}
 
+SYSTEM_CONFIG['org.openbmc.watchdog.HostWatchdog'] = {
+		'start_process' : True,
+		'process_name' : 'host_watchdog.exe',
+		'heartbeat' : 'no',
+		'rest_name' : 'watchdog',
+		'instances' : [	
+			{
+				'name' : 'Watchdog1',
+				'user_label': 'Host Watchdog',
+				'properties' : { 
+					'org.openbmc.Watchdog' : {
+						'poll_interval': 300000,
+					}
+				}
+			}
+		]
+	}
+
 SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
 		'start_process' : True,
 		'process_name' : 'sensor_manager.py',
@@ -59,6 +79,11 @@
 			{
 				'name' : 'PowerControl1',
 				'user_label': 'Power control',
+				'properties' : { 
+					'org.openbmc.Control': {
+						'poll_interval' : 3000
+					}
+				}
 			}
 		]
 	}
@@ -68,13 +93,15 @@
 		'process_name' : 'sensor_ambient.exe',
 		'heartbeat' : 'yes',
 		'init_methods' : ['org.openbmc.SensorValue'],
-		'poll_interval': 5000,    
 		'instances' : [	
 			{
 				'name' : 'AmbientTemperature1',
 				'user_label': 'Ambient Temperature 1',
 				'sensor_id' : 41,
 				'properties' : { 
+					'org.openbmc.SensorValue': {
+						'poll_interval' : 5000
+					},
 					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
 						'lower_warning' : 10,
@@ -91,6 +118,9 @@
 				'name' : 'AmbientTemperature2',
 				'user_label': 'Ambient Temperature 2',
  				'properties' : { 
+					'org.openbmc.SensorValue': {
+						'poll_interval' : 5000
+					},
 					'org.openbmc.SensorThreshold' : {
 						'lower_critical': 5,
 						'lower_warning' : 10,
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 4b10739..12f93c7 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -1,4 +1,5 @@
 import dbus
+import xml.etree.ElementTree as ET
 
 BUS_PREFIX = 'org.openbmc'
 GPIO_DEV = '/sys/class/gpio'
@@ -28,6 +29,19 @@
 def bus_to_object_name(bus_name):
 	return "/"+bus_name.replace('.','/')
 
+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):
diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
index ff0e200..6af3af7 100644
--- a/bin/PropertyManager.py
+++ b/bin/PropertyManager.py
@@ -57,7 +57,6 @@
 		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 = []
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index 15a8feb..4be1afc 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -12,10 +12,13 @@
 POWER_OFF = 0
 POWER_ON = 1
 
+BOOTED = 100
+
 class ChassisControlObject(dbus.service.Object):
 	def __init__(self,bus,name):
 		self.dbus_objects = { }
 
+		dbus.service.Object.__init__(self,bus,name)
 		## load utilized objects
 		self.dbus_busses = {
 			'org.openbmc.control.Power' : 
@@ -26,16 +29,10 @@
 				[ { 'name' : 'HostControl1',     'intf' : 'org.openbmc.control.Host' } ]
 		}
 		self.power_sequence = 0
-		dbus.service.Object.__init__(self,bus,name)
-		bus = dbus.SessionBus()
-		try: 
-			for bus_name in self.dbus_busses.keys():
-				self.request_name(bus_name,"",bus_name)
+		self.reboot = 0	
+		self.last_power_state = 0
 
-		except:
-			## its ok if this fails.  hotplug will detect too
-			print "Warning: One of processes not started yet."
-			pass
+		bus = dbus.SessionBus()
 
 		## add signal handler to detect when new objects show up on dbus
 		bus.add_signal_receiver(self.request_name,
@@ -46,9 +43,23 @@
 					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",
-					path="/org/openbmc/control/Power/PowerControl1")
+					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")
+    		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")
 
+		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):
@@ -60,6 +71,7 @@
 				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'])
 	
@@ -69,7 +81,6 @@
 	def getID(self):
 		return id
 
-
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def setIdentify(self):
@@ -77,7 +88,6 @@
 		self.dbus_objects['ChassisIdentify1'].setOn()
 		return None
 
-
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def clearIdentify(self):
@@ -90,6 +100,7 @@
 	def setPowerOn(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
@@ -98,6 +109,7 @@
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def setPowerOff(self):
+		self.power_sequence = 0
 		print "Turn off power"
 		self.dbus_objects['PowerControl1'].setPowerState(POWER_OFF);
 		return None
@@ -118,9 +130,10 @@
 	def setPowerPolicy(self,policy):
 		return None
 
+
 	## Signal handler
 	def power_button_signal_handler(self):
-		# only power on if not currently powered on
+		# toggle power
 		state = self.getPowerState()
 		if state == POWER_OFF:
 			self.setPowerOn()
@@ -129,13 +142,27 @@
 		
 		# TODO: handle long press and reset
 
-	## Signal handler
+	## 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"
+		self.reboot = 1
+		self.setPowerOff()
+		
 
 if __name__ == '__main__':
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
diff --git a/bin/ipmi_bt.py b/bin/ipmi_bt.py
index 375eb2a..d3e79cd 100644
--- a/bin/ipmi_bt.py
+++ b/bin/ipmi_bt.py
@@ -39,7 +39,7 @@
 
 	@dbus.service.method(DBUS_NAME)
 	def emitUpdateSensor(self,ipmi_id,data):
-        	self.UpdateSensor(ipmi_id,int(data))
+        	self.UpdateSensor(ipmi_id,dbus.Byte(int(data)))
 		print "update sensor emitted"
         	return 'Signal emitted'
 
@@ -49,11 +49,31 @@
 		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 = sys.argv[2]
-	ipmi_id = int(sys.argv[3])
+	
+	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]
 
@@ -69,7 +89,13 @@
 		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_translator.py b/bin/ipmi_translator.py
index f7a7aab..2f3d0bb 100644
--- a/bin/ipmi_translator.py
+++ b/bin/ipmi_translator.py
@@ -73,15 +73,13 @@
 			## 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() }
+			dvalue.setVariant(1)
 			## save sensor value
-			## TODO:  need to accomodate any sensor interface
 			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)
-			self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
+			intf.setValue(dvalue.getValue())
 		else:
 			## TODO: error handling
 			pass
@@ -99,10 +97,34 @@
 					'/org/openbmc/managers/Sensors/Barreleye')
 			intf = dbus.Interface(obj, 'org.openbmc.managers.Sensors' )
 			val = intf.getSensor(obj_path)
-			print "value = "+str(val)
 
 		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)
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 2314a7f..cb0904e 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -19,8 +19,8 @@
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
 		bus.add_signal_receiver(self.UpdateSensor,
-					dbus_interface = 'org.freedesktop.DBus.Properties', 
-					signal_name = 'PropertiesChanged', path_keyword='path')
+					dbus_interface = 'org.openbmc.SensorValue', 
+					signal_name = 'Changed', path_keyword='path')
 		bus.add_signal_receiver(self.NormalThreshold,
 					dbus_interface = 'org.openbmc.SensorThreshold', 
 					signal_name = 'Normal', path_keyword='path')
@@ -41,11 +41,10 @@
 			val = self.sensor_cache[path]['value']
 		return val
 		
-	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]
+	def UpdateSensor(self,value,units,path = None):
+		self.initSensorEntry(path)
+		self.sensor_cache[path]['value'] = value
+		self.sensor_cache[path]['units'] = units
 
 	@dbus.service.signal(DBUS_NAME)
 	def CriticalThreshold(self, path = None):
@@ -68,10 +67,6 @@
 	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__':
diff --git a/bin/system_manager.py b/bin/system_manager.py
index e96e547..cb37c41 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -3,13 +3,14 @@
 import sys
 import subprocess
 from gi.repository import GObject
-
 import dbus
 import dbus.service
 import dbus.mainloop.glib
 import os
 import PropertyManager
 
+import Openbmc
+
 if (len(sys.argv) < 2):
 	print "Usage:  system_manager.py [system name]"
 	exit(1)
@@ -25,15 +26,15 @@
 class SystemManager(dbus.service.Object):
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
-		
 		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.CacheMeHandler,
 					signal_name = 'CacheMe', path_keyword='path',interface_keyword='interface')
-
+		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
 
 		try:
 			# launch dbus object processes
@@ -43,8 +44,9 @@
 			## TODO: error handling
 			pass
 		
-		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
+		## Add poll for heartbeat
     		GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
+		
 
 	def CacheMeHandler(self,busname,path=None,interface=None):
 		#interface_name = 'org.openbmc.Fru'
@@ -115,15 +117,21 @@
 					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:
-						for init_interface in System.SYSTEM_CONFIG[bus_name]['init_methods']:
-							obj = bus.get_object(bus_name,obj_path)
-							intf = dbus.Interface(obj,init_interface)
-							print "calling init:" +init_interface
+				#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()
 
 
