diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index 4be1afc..455030b 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -7,7 +7,7 @@
 import dbus.mainloop.glib
 
 DBUS_NAME = 'org.openbmc.control.Chassis'
-OBJ_NAME = '/org/openbmc/control/Chassis/'+sys.argv[1]
+OBJ_NAME = '/org/openbmc/control/'+sys.argv[1]
 
 POWER_OFF = 0
 POWER_ON = 1
@@ -20,61 +20,37 @@
 
 		dbus.service.Object.__init__(self,bus,name)
 		## load utilized objects
-		self.dbus_busses = {
-			'org.openbmc.control.Power' : 
-				[ { 'name' : 'PowerControl1' ,   'intf' : 'org.openbmc.control.Power' } ],
-			'org.openbmc.leds.ChassisIdentify' :
-				[ { 'name' : 'ChassisIdentify1', 'intf' : 'org.openbmc.control.Chassis' } ],
-			'org.openbmc.control.Host' :
-				[ { 'name' : 'HostControl1',     'intf' : 'org.openbmc.control.Host' } ]
+		self.dbus_objects = {
+			'power_control' : { 
+				'bus_name' : 'org.openbmc.control.Power',
+				'object_name' : '/org/openbmc/control/SystemPower_0',
+				'interface_name' : 'org.openbmc.control.Power'
+			},
+			'identify_led' : {
+				'bus_name' : 'org.openbmc.leds.ChassisIdentify',
+				'object_name' : '/org/openbmc/leds/ChassisIdentify_0',
+				'interface_name' : 'org.openbmc.Led'
+			}
 		}
-		self.power_sequence = 0
+		#self.power_sequence = 0
 		self.reboot = 0	
 		self.last_power_state = 0
 
 		bus = dbus.SessionBus()
 
-		## add signal handler to detect when new objects show up on dbus
-		bus.add_signal_receiver(self.request_name,
-				dbus_interface = 'org.freedesktop.DBus', 
-				signal_name = "NameOwnerChanged")
 
 		bus.add_signal_receiver(self.power_button_signal_handler, 
 					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")
-   		bus.add_signal_receiver(self.power_lost_signal_handler, 
-					dbus_interface = "org.openbmc.control.Power", signal_name = "PowerLost")
+					path="/org/openbmc/buttons/PowerButton_0" )
     		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")
+		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
 
-		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):
-		# bus added
-		if (len(b) > 0 ):
-			## if bus in required list for this object, then save a pointer to interface
-			## for method calls
-			if (self.dbus_busses.has_key(bus_name)):
-				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'])
-	
+	def getInterface(self,name):
+		o = self.dbus_objects[name]
+		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')
@@ -85,40 +61,56 @@
 		in_signature='', out_signature='')
 	def setIdentify(self):
 		print "Turn on identify"
-		self.dbus_objects['ChassisIdentify1'].setOn()
+		intf = self.getInterface('identify_led')
+		intf.setOn()	
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
 	def clearIdentify(self):
-		print "Turn off identify"
-		r=self.dbus_objects['ChassisIdentify1'].setOff()
+		print "Turn on identify"
+		intf = self.getInterface('identify_led')
+		intf.setOff()
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
-	def setPowerOn(self):
+	def powerOn(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
+			intf = self.getInterface('power_control')
+			intf.setPowerState(POWER_ON)
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
-	def setPowerOff(self):
-		self.power_sequence = 0
+	def powerOff(self):
 		print "Turn off power"
-		self.dbus_objects['PowerControl1'].setPowerState(POWER_OFF);
+		intf = self.getInterface('power_control')
+		intf.setPowerState(POWER_OFF)
+		return None
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='')
+	def softPowerOff(self):
+		print "Soft off power"
+		## Somehow tell host to shutdown via ipmi
+		return None
+
+	@dbus.service.method(DBUS_NAME,
+		in_signature='', out_signature='')
+	def reboot(self):
+		print "Rebooting"
+		self.reboot=1
+		intf.softPowerOff()
 		return None
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='i')
 	def getPowerState(self):
-		state = self.dbus_objects['PowerControl1'].getPowerState();
-		return state
+		intf = self.getInterface('power_control')
+		return intf.getPowerState()
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='')
@@ -132,36 +124,26 @@
 
 
 	## Signal handler
+
+	def SystemStateHandler(self,state_name):
+		if (state_name == "POWERED_OFF" and self.reboot==1):
+			self.powerOn()
+				
+
 	def power_button_signal_handler(self):
 		# toggle power
 		state = self.getPowerState()
 		if state == POWER_OFF:
-			self.setPowerOn()
+			self.powerOn()
 		elif state == POWER_ON:
-			self.setPowerOff();
+			self.powerOff();
 		
 		# TODO: handle long press and reset
 
-	## 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"
+		print "Watchdog Error, Hard Rebooting"
 		self.reboot = 1
-		self.setPowerOff()
+		self.powerOff()
 		
 
 if __name__ == '__main__':
