lots of changes
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)