diff --git a/Makefile b/Makefile
index 23b53ce..02f51f1 100644
--- a/Makefile
+++ b/Makefile
@@ -37,9 +37,6 @@
 led_controller: led_controller.o gpio.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/gpio.o obj/led_controller.o $(LDFLAGS) $(LIBS)
 
-sensor_ambient: sensor_threshold.o sensor_temperature_ambient_obj.o libopenbmc_intf
-	$(CC) -o bin/$@.exe obj/sensor_threshold.o obj/sensor_temperature_ambient_obj.o $(LDFLAGS) $(LIBS)
-
 button_power: button_power_obj.o gpio.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/button_power_obj.o obj/gpio.o $(LDFLAGS) $(LIBS)
 
@@ -74,4 +71,4 @@
 	$(CC) -o bin/$@.exe obj/hwmon_intf.o $(LDFLAGS) $(LIBS)
 
 
-all: setup libopenbmc_intf power_control led_controller sensor_ambient button_power control_host fan host_watchdog control_bmc board_vpd pcie_slot_present flash_bios flasher control_bmc_barreleye
+all: setup libopenbmc_intf power_control led_controller button_power control_host fan host_watchdog control_bmc board_vpd pcie_slot_present flash_bios flasher control_bmc_barreleye
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index e77a438..d42dedb 100755
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -1,13 +1,9 @@
 #! /usr/bin/python
 
-import dbus
-import Openbmc
-
 HOME_PATH = './'
-CACHE_PATH = HOME_PATH+'cache/'
-FRU_PATH = CACHE_PATH+'frus/'
+CACHE_PATH = '/var/cache/obmc/'
 FLASH_DOWNLOAD_PATH = "/tmp"
-
+GPIO_BASE = 320
 SYSTEM_NAME = "Barreleye"
 
 
@@ -16,6 +12,7 @@
 ##   - a process emits a GotoSystemState signal with state name to goto
 ##   - objects specified in EXIT_STATE_DEPEND have started
 SYSTEM_STATES = [
+	'BASE_APPS',
 	'BMC_INIT',
 	'BMC_STARTING',
 	'BMC_READY',
@@ -27,191 +24,144 @@
 ]
 
 EXIT_STATE_DEPEND = {
+	'BASE_APPS' : {
+		'/org/openbmc/managers/Property': 0,
+	},
 	'BMC_STARTING' : {
 		'/org/openbmc/control/chassis0': 0,
 		'/org/openbmc/control/power0' : 0,
 		'/org/openbmc/control/led/BMC_READY' : 0,
-		'/org/openbmc/control/Host_0' : 0,
+		'/org/openbmc/control/host0' : 0,
+		'/org/openbmc/control/flash/bios' : 0,
 	}
 }
 
 ## method will be called when state is entered
 ENTER_STATE_CALLBACK = {
-	'HOST_POWERED_ON' : { 
-		'bus_name'    : 'org.openbmc.control.Host',
-		'obj_name'    : '/org/openbmc/control/Host_0',
-		'interface_name' : 'org.openbmc.control.Host',
-		'method_name' : 'boot'
+	'HOST_POWERED_ON' : {
+		'boot' : { 
+			'bus_name'    : 'org.openbmc.control.Host',
+			'obj_name'    : '/org/openbmc/control/host0',
+			'interface_name' : 'org.openbmc.control.Host',
+		}
 	},
 	'BMC_READY' : {
-		'bus_name'   : 'org.openbmc.control.led',
-		'obj_name'   : '/org/openbmc/control/led/BMC_READY',
-		'interface_name' : 'org.openbmc.Led',
-		'method_name' : 'setOn'
+		'setOn' : {
+			'bus_name'   : 'org.openbmc.control.led',
+			'obj_name'   : '/org/openbmc/control/led/BMC_READY',
+			'interface_name' : 'org.openbmc.Led',
+		},
+		'init' : {
+			'bus_name'   : 'org.openbmc.control.Flash',
+			'obj_name'   : '/org/openbmc/control/flash/bios',
+			'interface_name' : 'org.openbmc.Flash',
+		},
 	}
 }
 
-SYSTEM_CONFIG = {}
-
-SYSTEM_CONFIG['org.openbmc.control.Bmc'] = {
-		'system_state' : 'BMC_INIT',
-		'start_process' : True,
+APPS = {
+	'property_manager' : {
+		'system_state'    : 'BASE_APPS',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'control_bmc_barreleye.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'Bmc_0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.managers.Inventory'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'inventory_items.py',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : SYSTEM_NAME } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.PciePresent'] = {
-		'system_state' : 'HOST_POWERED_ON',
-		'start_process' : True,
+		'process_name'    : 'property_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'bmc_init' : {
+		'system_state'    : 'BMC_INIT',
+		'start_process'   : True,
 		'monitor_process' : False,
-		'process_name' : 'pcie_slot_present.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'Slots_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.sensor.Power8Virtual'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'control_bmc_barreleye.exe',
+	},
+	'inventory' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'sensors_virtual_p8.py',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'virtual' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'inventory_items.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'pcie_present' : {
+		'system_state'    : 'HOST_POWERED_ON',
+		'start_process'   : True,
+		'monitor_process' : False,
+		'process_name'    : 'pcie_slot_present.exe',
+	},
+	'virtual_sensors' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'sensor_manager.py',
-		'heartbeat' : 'no',
-		'instances' : [ { 'name' : SYSTEM_NAME } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'sensors_virtual_p8.py',
+	},
+	'sensor_manager' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'host_watchdog.exe',
-		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'HostWatchdog_0',
-				'properties' : { 
-					'org.openbmc.Watchdog' : {
-						'poll_interval': 30000,
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.control.Power'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'sensor_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'host_watchdog' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'host_watchdog.exe',
+	},
+	'power_control' : {	
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
 		'process_name' : 'power_control.exe',
-		'heartbeat' : 'no',
-		'instances' : [	
-			{
-				'name' : 'power0',
-				'user_label': 'Power control',
-				'properties' : { 
-					'org.openbmc.Control': {
-						'poll_interval' : 3000
-					},
-					'org.openbmc.control.Power': {
-						'pgood_timeout' : 10
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.buttons.Power'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'button_power.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'PowerButton_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.led'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'led_controller.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'Dummy' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.Flash'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'flash_bios.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'dummy' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.manager.Download'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'download_manager.py',
-		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : SYSTEM_NAME } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.control.Host'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'control_host.exe',
-		'heartbeat' : 'no',
-		'instances' : [ { 'name' : 'Host_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'chassis_control.py',
-		'heartbeat' : 'no',
-		'instances' : [ { 'name' : 'chassis0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.vpd'] = {
-		'system_state' : 'HOST_POWERED_ON',
-		'start_process' : False,
+		'args' : [ '3000', '10' ]
+	},
+	'power_button' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : False,
 		'monitor_process' : False,
-		'process_name' : 'board_vpd.exe',
-		'heartbeat' : 'no',
-		'instances' : [ { 'name' : 'MBVPD_0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.sensors.Fan'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'button_power.exe',
+	},
+	'led_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'fan.exe',
-		'heartbeat' : 'no',
-		'instances' : [	{'name' : 'Fan_0' }, {'name' : 'Fan_1'}, {'name' : 'Fan_2'} ]
+		'process_name'    : 'led_controller.exe',
+	},
+	'flash_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'flash_bios.exe',
+	},
+	'download_manager' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'download_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'host_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'control_host.exe',
+	},
+	'chassis_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'chassis_control.py',
+	},
+	'fans' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'fan.exe',
+		'args'            : [ 'fan0','fan1','fan2','fan3','fan4' ]
 	}
-
-NON_CACHABLE_PROPERTIES = {
-	'name'       : True,
-	'user_label' : True,
-	'location'   : True,
-	'state'      : True,
-	'cache'      : True
 }
+
+CACHED_INTERFACES = {
+		"org.openbmc.InventoryItem" : True,
+		"org.openbmc.control.Chassis" : True,
+	}
 INVENTORY_ROOT = '/org/openbmc/inventory'
 
 FRU_INSTANCES = {
@@ -311,8 +261,6 @@
 
 }
 
-
-
 ID_LOOKUP = {
 	'FRU' : {
 		0x0d : '<inventory_root>/system/chassis',
@@ -323,7 +271,7 @@
 		0x04 : '<inventory_root>/system/chassis/motherboard/dimm1',
 		0x05 : '<inventory_root>/system/chassis/motherboard/dimm2',
 		0x06 : '<inventory_root>/system/chassis/motherboard/dimm3',
-		0xff : '<inventory_root>/system',
+		0x35 : '<inventory_root>/system',
 	},
 	'FRU_STR' : {
 		'PRODUCT_15' : '<inventory_root>/system',
@@ -367,22 +315,31 @@
 }
 
 GPIO_CONFIG = {}
-GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 484, 'direction': 'out' }
-GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 485, 'direction': 'out' }
-GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 504, 'direction': 'out' }
-GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 449, 'direction': 'out'  }
-GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 486, 'direction': 'out'  }
-GPIO_CONFIG['PGOOD']      = { 'gpio_num': 503, 'direction': 'in'  }
-GPIO_CONFIG['IDENTIFY']   = { 'gpio_num': 474, 'direction': 'out' }
-GPIO_CONFIG['BMC_READY']   = { 'gpio_num': 474, 'direction': 'out' }
-GPIO_CONFIG['POWER_BUTTON'] =  { 'gpio_num': 448, 'direction': 'falling' }
-GPIO_CONFIG['SLOT0_RISER_PRESENT'] =   { 'gpio_num': 392, 'direction': 'in' }
-GPIO_CONFIG['SLOT1_RISER_PRESENT'] =   { 'gpio_num': 393, 'direction': 'in' }
-GPIO_CONFIG['SLOT2_RISER_PRESENT'] =   { 'gpio_num': 394, 'direction': 'in' }
-GPIO_CONFIG['SLOT0_PRESENT'] =  { 'gpio_num': 395, 'direction': 'in' }
-GPIO_CONFIG['SLOT1_PRESENT'] =  { 'gpio_num': 396, 'direction': 'in' }
-GPIO_CONFIG['SLOT2_PRESENT'] =  { 'gpio_num': 397, 'direction': 'in' }
-GPIO_CONFIG['MEZZ0_PRESENT'] =  { 'gpio_num': 400, 'direction': 'in' }
-GPIO_CONFIG['MEZZ1_PRESENT'] =  { 'gpio_num': 401, 'direction': 'in' }
+GPIO_CONFIG['FSI_CLK']    =   { 'gpio_pin': 'A4', 'direction': 'out' }
+GPIO_CONFIG['FSI_DATA']   =   { 'gpio_pin': 'A5', 'direction': 'out' }
+GPIO_CONFIG['FSI_ENABLE'] =   { 'gpio_pin': 'D0', 'direction': 'out' }
+GPIO_CONFIG['POWER_PIN']  =   { 'gpio_pin': 'E1', 'direction': 'out'  }
+GPIO_CONFIG['CRONUS_SEL'] =   { 'gpio_pin': 'A6', 'direction': 'out'  }
+GPIO_CONFIG['PGOOD']      =   { 'gpio_pin': 'C7', 'direction': 'in'  }
+GPIO_CONFIG['IDENTIFY']   =   { 'gpio_pin': 'R5', 'direction': 'out' }
+GPIO_CONFIG['BMC_READY']   =  { 'gpio_pin': 'H2', 'direction': 'out' }
+GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_pin': 'E0', 'direction': 'both' }
+GPIO_CONFIG['SLOT0_RISER_PRESENT'] =   { 'gpio_pin': 'N0', 'direction': 'in' }
+GPIO_CONFIG['SLOT1_RISER_PRESENT'] =   { 'gpio_pin': 'N1', 'direction': 'in' }
+GPIO_CONFIG['SLOT2_RISER_PRESENT'] =   { 'gpio_pin': 'N2', 'direction': 'in' }
+GPIO_CONFIG['SLOT0_PRESENT'] =         { 'gpio_pin': 'N3', 'direction': 'in' }
+GPIO_CONFIG['SLOT1_PRESENT'] =         { 'gpio_pin': 'N4', 'direction': 'in' }
+GPIO_CONFIG['SLOT2_PRESENT'] =         { 'gpio_pin': 'N5', 'direction': 'in' }
+GPIO_CONFIG['MEZZ0_PRESENT'] =         { 'gpio_pin': 'O0', 'direction': 'in' }
+GPIO_CONFIG['MEZZ1_PRESENT'] =         { 'gpio_pin': 'O1', 'direction': 'in' }
+
+def convertGpio(name):
+	name = name.upper()
+	c = name[0:1]
+	offset = int(name[1:])
+	a = ord(c)-65
+	base = a*8+GPIO_BASE
+	return base+offset
+
 
 
diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index f38fd73..c1b9238 100755
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -1,12 +1,9 @@
 #! /usr/bin/python
 
-import dbus
-import Openbmc
-
 HOME_PATH = './'
-CACHE_PATH = HOME_PATH+'cache/'
+CACHE_PATH = '/var/cache/obmc/'
 FLASH_DOWNLOAD_PATH = "/tmp"
-
+GPIO_BASE = 320
 SYSTEM_NAME = "Palmetto"
 
 
@@ -34,172 +31,132 @@
 		'/org/openbmc/control/chassis0': 0,
 		'/org/openbmc/control/power0' : 0,
 		'/org/openbmc/control/led/BMC_READY' : 0,
-		'/org/openbmc/control/Host_0' : 0,
+		'/org/openbmc/control/host0' : 0,
+		'/org/openbmc/control/flash/bios' : 0,
 	}
 }
 
 ## method will be called when state is entered
 ENTER_STATE_CALLBACK = {
-	'HOST_POWERED_ON' : { 
-		'bus_name'    : 'org.openbmc.control.Host',
-		'obj_name'    : '/org/openbmc/control/Host_0',
-		'interface_name' : 'org.openbmc.control.Host',
-		'method_name' : 'boot'
+	'HOST_POWERED_ON' : {
+		'boot' : { 
+			'bus_name'    : 'org.openbmc.control.Host',
+			'obj_name'    : '/org/openbmc/control/host0',
+			'interface_name' : 'org.openbmc.control.Host',
+		}
 	},
 	'BMC_READY' : {
-		'bus_name'   : 'org.openbmc.control.led',
-		'obj_name'   : '/org/openbmc/control/led/BMC_READY',
-		'interface_name' : 'org.openbmc.Led',
-		'method_name' : 'setOn'
+		'setOn' : {
+			'bus_name'   : 'org.openbmc.control.led',
+			'obj_name'   : '/org/openbmc/control/led/BMC_READY',
+			'interface_name' : 'org.openbmc.Led',
+		},
+		'init' : {
+			'bus_name'   : 'org.openbmc.control.Flash',
+			'obj_name'   : '/org/openbmc/control/flash/bios',
+			'interface_name' : 'org.openbmc.Flash',
+		},
 	}
 }
 
-SYSTEM_CONFIG = {}
-
-SYSTEM_CONFIG['org.openbmc.managers.Property'] = {
-		'system_state' : 'BASE_APPS',
-		'start_process' : True,
+APPS = {
+	'property_manager' : {
+		'system_state'    : 'BASE_APPS',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'property_manager.py',
-		'instances' : [	{ 'name' : SYSTEM_NAME } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.control.Bmc'] = {
-		'system_state' : 'BMC_INIT',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'control_bmc.exe',
-		'instances' : [	{ 'name' : 'Bmc_0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.managers.Inventory'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'inventory_items.py',
-		'instances' : [	{ 'name' : SYSTEM_NAME } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.PciePresent'] = {
-		'system_state' : 'HOST_POWERED_ON',
-		'start_process' : True,
+		'process_name'    : 'property_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'bmc_init' : {
+		'system_state'    : 'BMC_INIT',
+		'start_process'   : True,
 		'monitor_process' : False,
-		'process_name' : 'pcie_slot_present.exe',
-		'instances' : [	{ 'name' : 'Slots_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.sensor.Power8Virtual'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'control_bmc.exe',
+	},
+	'inventory' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'sensors_virtual_p8.py',
-		'instances' : [	{ 'name' : 'virtual' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'inventory_items.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'pcie_present' : {
+		'system_state'    : 'HOST_POWERED_ON',
+		'start_process'   : True,
+		'monitor_process' : False,
+		'process_name'    : 'pcie_slot_present.exe',
+	},
+	'virtual_sensors' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'sensor_manager.py',
-		'instances' : [ { 'name' : SYSTEM_NAME } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.watchdog.Host'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'sensors_virtual_p8.py',
+	},
+	'sensor_manager' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'host_watchdog.exe',
-		'instances' : [	
-			{
-				'name' : 'HostWatchdog_0',
-				'properties' : { 
-					'org.openbmc.Watchdog' : {
-						'poll_interval': 30000,
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.control.Power'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'sensor_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'host_watchdog' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'host_watchdog.exe',
+	},
+	'power_control' : {	
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
 		'process_name' : 'power_control.exe',
-		'instances' : [	
-			{
-				'name' : 'power0',
-				'user_label': 'Power control',
-				'properties' : { 
-					'org.openbmc.Control': {
-						'poll_interval' : 3000
-					},
-					'org.openbmc.control.Power': {
-						'pgood_timeout' : 10
-					}
-				}
-			}
-		]
-	}
-
-SYSTEM_CONFIG['org.openbmc.buttons.Power'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'button_power.exe',
-		'instances' : [	{ 'name' : 'PowerButton_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.led'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'led_controller.exe',
-		'instances' : [	{ 'name' : 'Dummy' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.Flash'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'flash_bios.exe',
-		'instances' : [	{ 'name' : 'dummy' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.manager.Download'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'download_manager.py',
-		'instances' : [	{ 'name' : SYSTEM_NAME } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.control.Host'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'control_host.exe',
-		'instances' : [ { 'name' : 'Host_0' } ]
-	}
-SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
-		'monitor_process' : True,
-		'process_name' : 'chassis_control.py',
-		'instances' : [ { 'name' : 'chassis0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.vpd'] = {
-		'system_state' : 'HOST_POWERED_ON',
-		'start_process' : False,
+		'args' : [ '3000', '10' ]
+	},
+	'power_button' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : False,
 		'monitor_process' : False,
-		'process_name' : 'board_vpd.exe',
-		'instances' : [ { 'name' : 'MBVPD_0' } ]
-	}
-
-SYSTEM_CONFIG['org.openbmc.sensors.Fan'] = {
-		'system_state' : 'BMC_STARTING',
-		'start_process' : True,
+		'process_name'    : 'button_power.exe',
+	},
+	'led_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
 		'monitor_process' : True,
-		'process_name' : 'fan.exe',
-		'instances' : [	{'name' : 'Fan_0' }, {'name' : 'Fan_1'}, {'name' : 'Fan_2'} ]
+		'process_name'    : 'led_controller.exe',
+	},
+	'flash_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'flash_bios.exe',
+	},
+	'download_manager' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'download_manager.py',
+		'args'            : [ SYSTEM_NAME ]
+	},
+	'host_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'control_host.exe',
+	},
+	'chassis_control' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'chassis_control.py',
+	},
+	'fans' : {
+		'system_state'    : 'BMC_STARTING',
+		'start_process'   : True,
+		'monitor_process' : True,
+		'process_name'    : 'fan.exe',
+		'args'            : [ 'fan0','fan1','fan2','fan3','fan4' ]
 	}
+}
 
 CACHED_INTERFACES = {
 		"org.openbmc.InventoryItem" : True,
@@ -208,88 +165,42 @@
 INVENTORY_ROOT = '/org/openbmc/inventory'
 
 FRU_INSTANCES = {
-	'<inventory_root>/system' :
-		{ 'fru_type' : 'SYSTEM','is_fru' : True, },
+	'<inventory_root>/system' : { 'fru_type' : 'SYSTEM','is_fru' : True, },
+	'<inventory_root>/system/chassis' : { 'fru_type' : 'SYSTEM','is_fru' : True, },
+	'<inventory_root>/system/chassis/motherboard' : { 'fru_type' : 'MAIN_PLANAR','is_fru' : True, },
 
-	'<inventory_root>/system/chassis' :
-		{ 'fru_type' : 'SYSTEM','is_fru' : True, },
+	'<inventory_root>/system/chassis/fan0' : { 'fru_type' : 'FAN','is_fru' : True, },
+	'<inventory_root>/system/chassis/fan1' : { 'fru_type' : 'FAN','is_fru' : True, },
+	'<inventory_root>/system/chassis/fan2' : { 'fru_type' : 'FAN','is_fru' : True, },
+	'<inventory_root>/system/chassis/fan3' : { 'fru_type' : 'FAN','is_fru' : True, },
+	'<inventory_root>/system/chassis/fan4' : { 'fru_type' : 'FAN','is_fru' : True, },
 
-	'<inventory_root>/system/chassis/motherboard' :
-		{ 'fru_type' : 'MAIN_PLANAR','is_fru' : True, },
-
-	'<inventory_root>/system/chassis/fan0' :
-		{ 'fru_type' : 'FAN','is_fru' : True, },
-	'<inventory_root>/system/chassis/fan1' :
-		{ 'fru_type' : 'FAN','is_fru' : True, },
-	'<inventory_root>/system/chassis/fan2' :
-		{ 'fru_type' : 'FAN','is_fru' : True, },
-	'<inventory_root>/system/chassis/fan3' :
-		{ 'fru_type' : 'FAN','is_fru' : True, },
-	'<inventory_root>/system/chassis/fan4' :
-		{ 'fru_type' : 'FAN','is_fru' : True, },
-
-	'<inventory_root>/system/chassis/motherboard/bmc' :
-		{ 'fru_type' : 'BMC','is_fru' : False, 
+	'<inventory_root>/system/chassis/motherboard/bmc' : { 'fru_type' : 'BMC','is_fru' : False, 
 			'manufacturer' : 'ASPEED' },
-	'<inventory_root>/system/chassis/motherboard/cpu0' :
-		{ 'fru_type' : 'CPU', 'is_fru' : True, },
+	'<inventory_root>/system/chassis/motherboard/cpu0' : { 'fru_type' : 'CPU', 'is_fru' : True, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core0' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core1' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core2' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core3' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core4' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core5' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core6' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core7' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core8' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core9' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core10' : { 'fru_type' : 'CORE', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/cpu0/core11' : { 'fru_type' : 'CORE', 'is_fru' : False, },
 
-	'<inventory_root>/system/chassis/motherboard/cpu0/core0' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core1' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core2' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core3' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core4' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core5' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core6' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core7' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core8' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core9' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core10' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
-
-	'<inventory_root>/system/chassis/motherboard/cpu0/core11' :
-		{ 'fru_type' : 'CORE', 'is_fru' : False, },
 	
-	'<inventory_root>/system/chassis/motherboard/centaur0' :
-		{ 'fru_type' : 'MEMORY_BUFFER', 'is_fru' : False, },
+	'<inventory_root>/system/chassis/motherboard/centaur0' : { 'fru_type' : 'MEMORY_BUFFER', 'is_fru' : False, },
 
-	'<inventory_root>/system/chassis/motherboard/dimm0' :
-		{ 'fru_type' : 'DIMM', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/motherboard/dimm0' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/motherboard/dimm1' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/motherboard/dimm2' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/motherboard/dimm3' : { 'fru_type' : 'DIMM', 'is_fru' : True,},
 
-	'<inventory_root>/system/chassis/motherboard/dimm1' :
-		{ 'fru_type' : 'DIMM', 'is_fru' : True,},
-
-	'<inventory_root>/system/chassis/motherboard/dimm2' :
-		{ 'fru_type' : 'DIMM', 'is_fru' : True,},
-
-	'<inventory_root>/system/chassis/motherboard/dimm3' :
-		{ 'fru_type' : 'DIMM', 'is_fru' : True,},
-
-	'<inventory_root>/system/chassis/io_board/pcie_slot0' :
-		{ 'fru_type' : 'PCIE_CARD', 'is_fru' : True,},
-
-	'<inventory_root>/system/chassis/io_board/pcie_slot1' :
-		{ 'fru_type' : 'PCIE_CARD', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/io_board/pcie_slot0' : { 'fru_type' : 'PCIE_CARD', 'is_fru' : True,},
+	'<inventory_root>/system/chassis/io_board/pcie_slot1' : { 'fru_type' : 'PCIE_CARD', 'is_fru' : True,},
 
 }
 
@@ -347,22 +258,31 @@
 }
 
 GPIO_CONFIG = {}
-GPIO_CONFIG['FSI_CLK']    = { 'gpio_num': 484, 'direction': 'out' }
-GPIO_CONFIG['FSI_DATA']   = { 'gpio_num': 485, 'direction': 'out' }
-GPIO_CONFIG['FSI_ENABLE'] = { 'gpio_num': 504, 'direction': 'out' }
-GPIO_CONFIG['POWER_PIN']  = { 'gpio_num': 449, 'direction': 'out'  }
-GPIO_CONFIG['CRONUS_SEL'] = { 'gpio_num': 486, 'direction': 'out'  }
-GPIO_CONFIG['PGOOD']      = { 'gpio_num': 503, 'direction': 'in'  }
-GPIO_CONFIG['IDENTIFY']   = { 'gpio_num': 365, 'direction': 'out' }
-GPIO_CONFIG['BMC_READY']   = { 'gpio_num': 365, 'direction': 'out' }
-GPIO_CONFIG['POWER_BUTTON'] =  { 'gpio_num': 448, 'direction': 'falling' }
-GPIO_CONFIG['SLOT0_RISER_PRESENT'] =   { 'gpio_num': 104, 'direction': 'in' }
-GPIO_CONFIG['SLOT1_RISER_PRESENT'] =   { 'gpio_num': 105, 'direction': 'in' }
-GPIO_CONFIG['SLOT2_RISER_PRESENT'] =   { 'gpio_num': 106, 'direction': 'in' }
-GPIO_CONFIG['SLOT0_PRESENT'] =  { 'gpio_num': 470, 'direction': 'in' }
-GPIO_CONFIG['SLOT1_PRESENT'] =  { 'gpio_num': 471, 'direction': 'in' }
-GPIO_CONFIG['SLOT2_PRESENT'] =  { 'gpio_num': 109, 'direction': 'in' }
-GPIO_CONFIG['MEZZ0_PRESENT'] =  { 'gpio_num': 112, 'direction': 'in' }
-GPIO_CONFIG['MEZZ1_PRESENT'] =  { 'gpio_num': 113, 'direction': 'in' }
+GPIO_CONFIG['FSI_CLK']    =   { 'gpio_pin': 'A4', 'direction': 'out' }
+GPIO_CONFIG['FSI_DATA']   =   { 'gpio_pin': 'A5', 'direction': 'out' }
+GPIO_CONFIG['FSI_ENABLE'] =   { 'gpio_pin': 'D0', 'direction': 'out' }
+GPIO_CONFIG['POWER_PIN']  =   { 'gpio_pin': 'E1', 'direction': 'out'  }
+GPIO_CONFIG['CRONUS_SEL'] =   { 'gpio_pin': 'A6', 'direction': 'out'  }
+GPIO_CONFIG['PGOOD']      =   { 'gpio_pin': 'C7', 'direction': 'in'  }
+GPIO_CONFIG['IDENTIFY']   =   { 'gpio_pin': 'R4', 'direction': 'out' }
+GPIO_CONFIG['BMC_READY']   =  { 'gpio_pin': 'R4', 'direction': 'out' }
+GPIO_CONFIG['POWER_BUTTON'] = { 'gpio_pin': 'E0', 'direction': 'both' }
+GPIO_CONFIG['SLOT0_RISER_PRESENT'] =   { 'gpio_pin': 'N0', 'direction': 'in' }
+GPIO_CONFIG['SLOT1_RISER_PRESENT'] =   { 'gpio_pin': 'N1', 'direction': 'in' }
+GPIO_CONFIG['SLOT2_RISER_PRESENT'] =   { 'gpio_pin': 'N2', 'direction': 'in' }
+GPIO_CONFIG['SLOT0_PRESENT'] =         { 'gpio_pin': 'N3', 'direction': 'in' }
+GPIO_CONFIG['SLOT1_PRESENT'] =         { 'gpio_pin': 'N4', 'direction': 'in' }
+GPIO_CONFIG['SLOT2_PRESENT'] =         { 'gpio_pin': 'N5', 'direction': 'in' }
+GPIO_CONFIG['MEZZ0_PRESENT'] =         { 'gpio_pin': 'O0', 'direction': 'in' }
+GPIO_CONFIG['MEZZ1_PRESENT'] =         { 'gpio_pin': 'O1', 'direction': 'in' }
+
+def convertGpio(name):
+	name = name.upper()
+	c = name[0:1]
+	offset = int(name[1:])
+	a = ord(c)-65
+	base = a*8+GPIO_BASE
+	return base+offset
+
 
 
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index b3d622c..0cac579 100755
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -10,7 +10,7 @@
 import Openbmc
 
 DBUS_NAME = 'org.openbmc.control.Chassis'
-OBJ_NAME = '/org/openbmc/control/'+sys.argv[1]
+OBJ_NAME = '/org/openbmc/control/chassis0'
 CONTROL_INTF = 'org.openbmc.Control'
 
 POWER_OFF = 0
@@ -37,7 +37,7 @@
 			},
 			'watchdog' : {				
 				'bus_name' : 'org.openbmc.watchdog.Host',
-				'object_name' : '/org/openbmc/watchdog/HostWatchdog_0',
+				'object_name' : '/org/openbmc/watchdog/host0',
 				'interface_name' : 'org.openbmc.Watchdog'
 			}
 		}
@@ -50,7 +50,7 @@
 
 		bus.add_signal_receiver(self.power_button_signal_handler, 
 					dbus_interface = "org.openbmc.Button", signal_name = "ButtonPressed", 
-					path="/org/openbmc/buttons/PowerButton_0" )
+					path="/org/openbmc/buttons/power0" )
     		bus.add_signal_receiver(self.host_watchdog_signal_handler, 
 					dbus_interface = "org.openbmc.Watchdog", signal_name = "WatchdogError")
 		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
diff --git a/bin/console b/bin/console
deleted file mode 100755
index d3fa8bb..0000000
--- a/bin/console
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/sh
-
-screen /dev/ttyS3 115200
-
diff --git a/bin/gpio2num b/bin/gpio2num
deleted file mode 100755
index a176ec5..0000000
--- a/bin/gpio2num
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/bin/python
-
-import sys
-
-if (len(sys.argv) <2):
-	print "Usage: gpio2num [gpio1] [gpio2] ... [gpion]"
-	print "\tExample: gpio2num A2 B4"
-	exit(0)
-
-sys.argv.pop(0)
-for name in sys.argv:
-	c = name[0:1]
-	num = name[1:]
-	a = ord(c)-65
-	base = 480 - (int(a/4) * 32)
-	offset = a%4*8 + int(num)
-	gpio_num = base+offset
-	print name+" = " + str(gpio_num)
diff --git a/bin/gpioutil b/bin/gpioutil
new file mode 100755
index 0000000..ab44b4d
--- /dev/null
+++ b/bin/gpioutil
@@ -0,0 +1,162 @@
+#!/usr/bin/env python
+
+import sys
+import os
+import getopt
+
+
+def printUsage():
+	print '\nUsage:'
+	print 'gpioutil SYSTEM_NAME -n GPIO_NAME  [-v value]'
+	print 'gpioutil SYSTEM_NAME -i GPIO_NUM  -d <DIRECTION = in,out,falling,rising,both> [-v value]'
+	print 'gpioutil SYSTEM_NAME -p PIN_NAME  -d <DIRECTION = in,out,falling,rising,both> [-v value]'
+	print 'gpioutil SYSTEM_NAME -l PIN_NAME     (lookup pin name only)'
+	exit(1)
+
+
+
+if (len(sys.argv) < 3):
+	printUsage()
+
+sys.argv.pop(0)
+libr = sys.argv.pop(0)
+System = __import__(libr)
+
+GPIO_SYSFS = '/sys/class/gpio/'
+
+class Gpio:
+	def __init__(self,gpio_num):
+		self.gpio_num = str(gpio_num)
+		self.direction = ''
+		self.interrupt = ''
+		self.exported = False
+
+	def getPath(self,name):
+		return GPIO_SYSFS+'gpio'+self.gpio_num+'/'+name
+	
+	def export(self):
+		if (os.path.exists(GPIO_SYSFS+'export') == False):
+			raise Exception("ERROR - GPIO_SYSFS path does not exist.  Does this platform support GPIOS?")
+		if (os.path.exists(GPIO_SYSFS+'gpio'+self.gpio_num) == False):
+			self.write(GPIO_SYSFS+'export',self.gpio_num)
+			
+		self.exported = True
+
+	def setDirection(self,dir):
+		if (self.exported == False):
+			raise Exception("ERROR - Not exported: "+self.getPath())
+
+		self.direction = ''
+		self.interrupt = ''
+		if (dir == 'in' or dir == 'out'):
+			self.direction = dir
+		elif (dir == 'rising' or 
+		      dir == 'falling' or
+		      dir == 'both'):
+			self.direction = 'in'
+			self.interrupt = dir
+			self.write(self.getPath('edge'),self.interrupt)
+		else:
+			raise Exception("ERROR - Invalid Direction: "+dir)
+		
+			
+		self.write(self.getPath('direction'),self.direction)
+			
+	def setValue(self,value):
+		if (value == '0'):
+			self.write(self.getPath('value'),'0')
+		elif (value == '1'):
+			self.write(self.getPath('value'),'1')
+		else:
+			raise Exception("ERROR - Invalid value: "+value)
+	
+	def getValue(self):
+		return self.read(self.getPath('value'))	
+
+	def write(self,path,data):
+		f = open(path,'w')
+		f.write(data)
+		f.close()
+
+
+	def read(self,path):
+		f = open(path,'r')
+		data = f.readline()
+		f.close()
+		return data
+
+
+
+if __name__ == '__main__':
+
+	try:
+		opts, args = getopt.getopt(sys.argv,"hn:i:d:v:p:l:")
+ 	except getopt.GetoptError:
+ 		printUsage()
+
+
+
+	lookup = False
+	gpio_name = ""
+	value = ""
+	direction = ""
+	for opt, arg in opts:
+ 		if opt == '-h':
+			printUsage()
+
+ 		elif opt in ("-n"):
+ 			gpio_name = arg
+			lookup = True
+ 		elif opt in ("-i"):
+ 			gpio_name = arg
+ 		elif opt in ("-d"):
+			direction = arg
+ 		elif opt in ("-v"):
+			value = arg
+		elif opt in ("-p"):
+			gpio_name = System.convertGpio(arg) 
+		elif opt in ("-l"):
+			gpio_name = System.convertGpio(arg)
+			print gpio_name
+			exit(0) 
+
+	gpio_info = {}
+	if (lookup == True):
+		if (System.GPIO_CONFIG.has_key(gpio_name) == False):
+			print "ERROR - GPIO Name doesn't exist"
+			print "Valid names: "
+			for n in System.GPIO_CONFIG:
+				print "\t"+n
+			exit(0)
+		gpio_info = System.GPIO_CONFIG[gpio_name]
+		direction = gpio_info['direction']
+		if (gpio_info.has_key('gpio_num')):
+			gpio_name = str(gpio_info['gpio_num'])
+		else:
+			gpio_name = str(System.convertGpio(gpio_info['gpio_pin']))
+		print "GPIO ID: "+gpio_name+"; DIRECTION: "+direction
+
+
+	## Rules
+	if (gpio_name == ""):
+		print "ERROR - Gpio not specified"
+		printUsage()
+
+	if (direction == "in" and value != ""):
+		print "ERROR - Value cannot be specified when direction = in"
+		printUsage()
+
+	gpio = Gpio(gpio_name)
+	try:
+		gpio.export()
+		if (direction != ""):
+			gpio.setDirection(direction)
+
+		if (value == ""):
+			print gpio.getValue()
+		else:
+			gpio.setValue(value)
+
+	except Exception as e:
+		print e
+		
diff --git a/bin/hconsole b/bin/hconsole
new file mode 100755
index 0000000..7fec020
--- /dev/null
+++ b/bin/hconsole
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+echo "Ctrl-a :quit to exit console.  [Enter] to continue"
+read a
+systemctl stop serial-getty@ttyS0   
+screen /dev/ttyS3 115200
+
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
deleted file mode 100755
index f8b921e..0000000
--- a/bin/ipmi_example.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import subprocess
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import PropertyManager
-
-import Openbmc
-
-SENSOR_INTERFACE = "org.openbmc.SensorValue"
-
-class IpmiBt(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-
-
-def getWatchdog():
-	obj =  bus.get_object('org.openbmc.watchdog.Host',
-			'/org/openbmc/watchdog/HostWatchdog_0')
-	intf = dbus.Interface(obj, 'org.openbmc.Watchdog' )
-	return intf
-
-def getChassisControl():
-	obj =  bus.get_object('org.openbmc.control.Chassis',
-			'/org/openbmc/control/chassis0')
-	intf = dbus.Interface(obj, 'org.openbmc.control.Chassis' )
-	return intf
-
-def prettyPrint(data):
-	for k in data.keys():
-		print k
-		for k2 in data[k].keys():
-			print "\t"+k2+" = "+str(data[k][k2])
-
-
-
-if __name__ == '__main__':
-	#dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-	bus = Openbmc.getDBus()
-
-	#name = dbus.service.BusName(DBUS_NAME,bus)
-	#mainloop = gobject.MainLoop()
-
-	cmd = sys.argv[1]
-	data = None
-	ipmi_id = dbus.Byte(0)
-	if (len(sys.argv) > 2):
-		ipmi_id = sys.argv[2]
-	if (len(sys.argv)>3):
-		data = sys.argv[3]
-
-	if (cmd == "poweron"):
-		intf = getChassisControl()
-		intf.powerOn()
-	elif (cmd == "poweroff"):
-		intf = getChassisControl()
-		intf.powerOff()
-	elif (cmd == "getid"):
-		intf = getChassisControl()
-		id = intf.getID()
-		print id
-	elif (cmd == "setsensor"):
-		intf_sys = Openbmc.getManagerInterface(bus,"System")
-		obj_info = intf_sys.getObjectFromByteId("SENSOR",chr(int(ipmi_id)))
-		obj_path = obj_info[1]
-		bus_name = obj_info[0]
-		if (obj_path != "" and bus_name != ""):
-			obj = bus.get_object(bus_name,obj_path)
-			intf = dbus.Interface(obj,)
-			intf.setValue(dbus.Byte(int(data)))	
-			
-	elif (cmd == "getsensors"):
-		intf_sens = Openbmc.getManagerInterface(bus,"Sensors")
-		data = intf_sens.getSensors()
-		prettyPrint(data)
-	elif (cmd == "updatefru"):
-		d = { 'manufacturer' : data }	
-		intf_sys = Openbmc.getManagerInterface(bus,"System")
-		c = chr(int(ipmi_id))
-		print c
-		obj_info = intf_sys.getObjectFromByteId("FRU",c)
-		intf_name = obj_info[2]
-		obj_path = obj_info[1]
-		bus_name = obj_info[0]
-		if (obj_path != "" and bus_name != ""):
-			obj = bus.get_object(bus_name,obj_path)
-			intf = dbus.Interface(obj,intf_name)
-			intf.update(d)	
-
-	elif (cmd == "getfrus"):
-		obj = bus.get_object('org.openbmc.managers.Inventory',
-				'/org/openbmc/inventory')
-		intf_fru = dbus.Interface(obj,'org.openbmc.Object.Enumerate')
-
-		data = intf_fru.enumerate()
-		for i in data:
-			print ">>>>>>>>"
-			print i
-			for k in data[i].keys():
-				print k+" = "+str(data[i][k]) 
-	elif (cmd == "updatefwftp"):
-		obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
-		intf = dbus.Interface(obj,"org.openbmc.Flash")
-		intf.updateViaTftp(sys.argv[2],sys.argv[3])
-	elif (cmd == "updatefwfile"):
-		obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
-		intf = dbus.Interface(obj,"org.openbmc.Flash")
-		intf.update(sys.argv[2])
-	elif (cmd == "fwstatus"):
-		intf = Openbmc.getManagerInterface(bus,"Flash")
-		status = intf.getStatus()
-		for i in status:
-			print i+" = "+status[i]
-	elif (cmd == "pokewatchdog"):
-		intf = getWatchdog()
-		intf.poke()
-	elif (cmd == "statewatchdog"):
-		intf = getWatchdog()
-		intf.start()
-	elif (cmd == "stopwatchdog"):
-		intf = getWatchdog()
-		intf.stop()
-	elif (cmd == "setwatchdog"):
-		count = int(sys.argv[2])
-		intf = getWatchdog()
-		intf.set(count)
-	else:
-		print "Unsupported command"
-
-
-
-
-
-
diff --git a/bin/obmcutil b/bin/obmcutil
index 4340f37..e4e07c4 100755
--- a/bin/obmcutil
+++ b/bin/obmcutil
@@ -52,7 +52,7 @@
 	},
 	'identify_led' : {
 		'bus_name' : 'org.openbmc.control.led',
-		'object_name' : '/org/openbmc/led/IDENTIFY',
+		'object_name' : '/org/openbmc/control/led/IDENTIFY',
 		'interface_name' : 'org.openbmc.Led'
 	},	
 	'chassis' : { 
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 75fb74f..b33f78f 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -7,9 +7,10 @@
 import dbus.service
 import dbus.mainloop.glib
 import os
-import PropertyManager
 import time
 import json
+import xml.etree.ElementTree as ET
+
 import Openbmc
 
 if (len(sys.argv) < 2):
@@ -27,10 +28,37 @@
 INTF_ITEM = 'org.openbmc.InventoryItem'
 INTF_CONTROL = 'org.openbmc.Control'
 
+def get_objects(bus,bus_name,path,objects):
+	tmp_path = path
+	if (path == ""):
+		tmp_path="/"
+
+	obj = bus.get_object(bus_name,tmp_path)
+	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
+ 	tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
+ 	root = tree.getroot()
+	parent = True
+	##print introspect_iface.Introspect()
+	for node in root.iter('node'):
+		for intf in node.iter('interface'):
+			objects[path] = True
+
+		if (node.attrib.has_key('name') == True):
+			node_name = node.attrib['name']
+			if (parent == False):
+				get_objects(bus,bus_name,path+"/"+node_name,objects)
+			else:
+				if (node_name != "" and node_name != path):
+					get_objects(bus,bus_name,node_name,objects)
+			
+		parent = False
+
+
+
+
 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,
@@ -43,11 +71,11 @@
 		self.bus_name_lookup = {}
 		self.bin_path = os.path.dirname(os.path.realpath(sys.argv[0]))
 
-		for bus_name in System.SYSTEM_CONFIG.keys():
-			sys_state = System.SYSTEM_CONFIG[bus_name]['system_state']
+		for name in System.APPS.keys():
+			sys_state = System.APPS[name]['system_state']
 			if (self.system_states.has_key(sys_state) == False):
 				self.system_states[sys_state] = []
-			self.system_states[sys_state].append(bus_name)
+			self.system_states[sys_state].append(name)
 	
 		## replace symbolic path in ID_LOOKUP
 		for category in System.ID_LOOKUP:
@@ -61,18 +89,6 @@
 
 
 	def SystemStateHandler(self,state_name):
-		print "Checking previous state started..."
-		i = 0
-		started = self.check_state_started()	
-		while(i<10 and started == False):
-			started = self.check_state_started()	
-			i=i+1
-			time.sleep(1)	
-
-		if (i == STATE_START_TIMEOUT):
-			print "ERROR: Timeout waiting for state to finish: "+self.current_state
-			return					
-		
 		## clearing object started flags
 		try:
 			for obj_path in System.EXIT_STATE_DEPEND[self.current_state]:
@@ -82,8 +98,8 @@
 
 		print "Running System State: "+state_name
 		if (self.system_states.has_key(state_name)):
-			for bus_name in self.system_states[state_name]:
-				self.start_process(bus_name)
+			for name in self.system_states[state_name]:
+				self.start_process(name)
 		
 		if (state_name == "BMC_INIT"):
 			## Add poll for heartbeat
@@ -144,81 +160,56 @@
 		byte = int(key)
 		return self.doObjectLookup(category,byte)
 	
-	def start_process(self,bus_name):
-		if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
-			process_name = self.bin_path+"/"+System.SYSTEM_CONFIG[bus_name]['process_name']
+	def start_process(self,name):
+		if (System.APPS[name]['start_process'] == True):
+			app = System.APPS[name]
+			process_name = self.bin_path+"/"+app['process_name']
 			cmdline = [ ]
 			cmdline.append(process_name)
-			System.SYSTEM_CONFIG[bus_name]['popen'] = None
-			for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
-				cmdline.append(instance['name'])
+			app['popen'] = None
+			if (app.has_key('args')):
+				for a in app['args']:
+					cmdline.append(a)
 			try:
-				print "Starting process: "+" ".join(cmdline)+": "+bus_name
-				System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline)
+				print "Starting process: "+" ".join(cmdline)+": "+name
+				app['popen'] = subprocess.Popen(cmdline)
 			except Exception as e:
 				## TODO: error
 				print "ERROR: starting process: "+" ".join(cmdline)
 
 	def heartbeat_check(self):
-		for bus_name in System.SYSTEM_CONFIG.keys():
-			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True and
-				System.SYSTEM_CONFIG[bus_name].has_key('popen') and
-				System.SYSTEM_CONFIG[bus_name]['monitor_process'] == True):
+		for name in System.APPS.keys():
+			app = System.APPS[name]
+			if (app['start_process'] == True and 
+				app.has_key('popen') and
+				app['monitor_process'] == True):
+
 				##   make sure process is still alive
-				p = System.SYSTEM_CONFIG[bus_name]['popen']
+				p = app['popen']
 				p.poll()
 				if (p.returncode != None):
-					print "Process for "+bus_name+" appears to be dead"
-					self.start_process(bus_name)
+					print "Process for "+name+" appears to be dead"
+					self.start_process(name)
 	
 		return True
 
-	def check_state_started(self):
-		r = True
-		if (self.current_state == ""):
-			return True
-		if (self.system_states.has_key(self.current_state)):
-			for bus_name in self.system_states[self.current_state]:
-				if (System.SYSTEM_CONFIG[bus_name].has_key('popen') == False and
-					System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
-					r = False
-					break;	
-		return r
-	
 	def NewBusHandler(self, bus_name, a, b):
 		if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
 			objects = {}
 			try:
-				Openbmc.get_objs(bus,bus_name,"",objects)
-				for instance_name in objects.keys():
-					obj_path = objects[instance_name]['PATH']
-					#obj = bus.get_object("org.openbmc.managers.Property",
-					#		"/org/openbmc/managers/Property")
-					#intf = dbus.Interface(obj,"org.openbmc.managers.Property")
-					#intf.loadFromCache(bus_name,obj_path)
+				get_objects(bus,bus_name,"",objects)
+				for obj_path in objects.keys():
 					self.bus_name_lookup[obj_path] = bus_name
+					print "New object: "+obj_path+" ("+bus_name+")"
 					if (System.EXIT_STATE_DEPEND[self.current_state].has_key(obj_path) == True):
 						System.EXIT_STATE_DEPEND[self.current_state][obj_path] = 1
 								
 			except Exception as e:
+				## object probably disappeared
+				#print e
 				pass
 	
-			if (System.SYSTEM_CONFIG.has_key(bus_name)):
-				for instance_name in objects.keys(): 
-					obj_path = objects[instance_name]['PATH']
-					for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
-						if (instance.has_key('properties') and instance['name'] == instance_name):
-							props = instance['properties']
-							print "Load Properties: "+obj_path
-							self.property_manager.loadProperties(bus_name,obj_path,props)
-					## If object has an init method, call it
-					for init_intf in objects[instance_name]['INIT']:
-						obj = bus.get_object(bus_name,obj_path)
-						intf = dbus.Interface(obj,init_intf)
-						print "Calling init method: " +obj_path+" : "+init_intf
-						intf.init()
-
-			## check if all objects are started to move to next state
+			## check if all required objects are started to move to next state
 			try:
 				state = 1
 				for obj_path in System.EXIT_STATE_DEPEND[self.current_state]:
@@ -236,16 +227,26 @@
 		in_signature='s', out_signature='sis')
 	def gpioInit(self,name):
 		gpio_path = ''
-		gpio_num = 0
+		gpio_num = -1
+		r = ['',gpio_num,'']
 		if (System.GPIO_CONFIG.has_key(name) == False):
 			# TODO: Error handling
 			print "ERROR: "+name+" not found in GPIO config table"
-			return ['',0,'']
 		else:
-			gpio_num = System.GPIO_CONFIG[name]['gpio_num']
-
-		return [Openbmc.GPIO_DEV, gpio_num, System.GPIO_CONFIG[name]['direction']]
-
+			
+			gpio_num = -1
+			gpio = System.GPIO_CONFIG[name]
+			if (System.GPIO_CONFIG[name].has_key('gpio_num')):
+				gpio_num = gpio['gpio_num']
+			else:
+				if (System.GPIO_CONFIG[name].has_key('gpio_pin')):
+					gpio_num = System.convertGpio(gpio['gpio_pin'])
+				else:
+					print "ERROR: SystemManager - GPIO lookup failed for "+name
+		
+			if (gpio_num != -1):
+				r = [Openbmc.GPIO_DEV, gpio_num, gpio['direction']]
+		return r
 		
 
 if __name__ == '__main__':
diff --git a/includes/gpio.c b/includes/gpio.c
index 51c2b82..6fed039 100644
--- a/includes/gpio.c
+++ b/includes/gpio.c
@@ -183,16 +183,17 @@
 int gpio_open_interrupt(GPIO* gpio, GIOFunc func, gpointer user_data)
 {
 	int rc = GPIO_OK;
-	char* buf;
+	char buf[255];
 	sprintf(buf, "%s/gpio%d/value", gpio->dev, gpio->num);
 	gpio->fd = open(buf, O_RDONLY | O_NONBLOCK );
+	gpio->irq_inited = false;
 	if (gpio->fd == -1)
 	{
 		rc = GPIO_OPEN_ERROR;
 	}
 	else
 	{
-		GIOChannel* channel = g_io_channel_unix_new( gpio->fd );
+		GIOChannel* channel = g_io_channel_unix_new( gpio->fd);
 		guint id = g_io_add_watch( channel, G_IO_PRI, func, user_data );
 	}
 	return rc;
diff --git a/includes/gpio.h b/includes/gpio.h
index d9279e4..6983e77 100644
--- a/includes/gpio.h
+++ b/includes/gpio.h
@@ -3,6 +3,7 @@
 
 #include <stdint.h>
 #include <gio/gio.h>
+#include <stdbool.h>
 
 typedef struct {
   gchar* name;
@@ -10,6 +11,7 @@
   uint16_t num;
   gchar* direction;
   int fd;
+  bool irq_inited;
 } GPIO;
 
 
diff --git a/includes/openbmc.h b/includes/openbmc.h
index ca44fb7..d0882c3 100644
--- a/includes/openbmc.h
+++ b/includes/openbmc.h
@@ -40,7 +40,8 @@
 typedef struct {
 	gint argc;
 	gchar **argv;
-	GMainLoop *loop;	
+	GMainLoop *loop;
+	gpointer user_data;	
 
 } cmdline;
 
diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
index 30078bb..93005a1 100644
--- a/objects/button_power_obj.c
+++ b/objects/button_power_obj.c
@@ -5,6 +5,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/buttons";
+static const gchar* instance_name = "power0";
 static const gchar* dbus_name        = "org.openbmc.buttons.Power";
 
 static GDBusObjectManagerServer *manager = NULL;
@@ -37,9 +38,34 @@
                GIOCondition condition,
                gpointer user_data )
 {
-	Button* button = object_get_button((Object*)user_data);
-	printf("Power Button pressed\n");
-	button_emit_button_pressed(button);
+
+	GError *error = 0;
+	gsize bytes_read = 0;
+	gchar buf[2]; 
+	buf[1] = '\0';
+	g_io_channel_seek_position( channel, 0, G_SEEK_SET, 0 );
+	GIOStatus rc = g_io_channel_read_chars( channel,
+                                            buf, 1,
+                                            &bytes_read,
+                                            &error );
+	printf("%s\n",buf);
+	
+	if (gpio_button.irq_inited)
+	{
+		Button* button = object_get_button((Object*)user_data);
+		if (buf[0] == '0')
+		{
+			printf("Power Button pressed\n");
+			button_emit_button_pressed(button);
+		}
+		else
+		{
+			printf("Power Button released\n");
+		}
+	} 
+	else { gpio_button.irq_inited = true; }
+
+	return TRUE;
 }
 
 static void 
@@ -50,15 +76,10 @@
 	ObjectSkeleton *object;
 	//g_print ("Acquired a message bus connection: %s\n",name);
  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
   	int i=0;
 	gchar *s;
-	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
+	s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
 	object = object_skeleton_new (s);
 	g_free (s);
 
diff --git a/objects/control_bmc_barreleye.c b/objects/control_bmc_barreleye.c
index 0e6c5cb..a3a19e8 100644
--- a/objects/control_bmc_barreleye.c
+++ b/objects/control_bmc_barreleye.c
@@ -12,6 +12,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/control";
+static const gchar* instance_name = "bmc0";
 static const gchar* dbus_name        = "org.openbmc.control.Bmc";
 
 //this probably should come from some global SOC config
@@ -23,7 +24,6 @@
 #define SPI_BASE		(off_t)0x1e630000
 #define SCU_BASE                (off_t)0x1e780000
 #define UART_BASE               (off_t)0x1e783000
-#define UART_BASE2              (off_t)0x1e785000
 #define COM_BASE                (off_t)0x1e789000
 #define COM_BASE2               (off_t)0x1e789100
 #define GPIO_BASE		(off_t)0x1e6e2000
@@ -72,11 +72,6 @@
 	devmem(bmcreg+0x00,0x00000000);  //Set Baud rate divisor -> 13 (Baud 115200)
 	devmem(bmcreg+0x04,0x00000000);  //Set Baud rate divisor -> 13 (Baud 115200)
 	devmem(bmcreg+0x08,0x000000c1);  //Disable Parity, 1 stop bit, 8 bits
-
-	bmcreg = memmap(mem_fd,UART_BASE2);
-	devmem(bmcreg+0x0c,0x00000000);
-	devmem(bmcreg+0x2c,0x00000000);
-
 	bmcreg = memmap(mem_fd,COM_BASE);
 	devmem(bmcreg+0x9C,0x08060000);  //Set UART routing
 
@@ -103,7 +98,6 @@
 	devmem(bmcreg+0x170,0x00000042);
 	devmem(bmcreg+0x174,0x00004000);
 
-
 	close(mem_fd);
 }
 
@@ -112,13 +106,25 @@
          GDBusMethodInvocation  *invocation,
          gpointer                user_data)
 {
+	//#ifdef __arm__
+	//reg_init();
+	//#endif
+	control_complete_init(control,invocation);
+	//control_emit_goto_system_state(control,"BMC_STARTING");
+	
+	return TRUE;
+}
+gboolean go(gpointer user_data)
+{
+ 	cmdline *cmd = user_data;
+	Control* control = object_get_control((Object*)cmd->user_data);
 	#ifdef __arm__
 	reg_init();
 	#endif
-	control_complete_init(control,invocation);
 	control_emit_goto_system_state(control,"BMC_STARTING");
 	
-	return TRUE;
+	//g_main_loop_quit(cmd->loop);
+	return FALSE;
 }
 
 static void 
@@ -128,47 +134,48 @@
 {
 	ObjectSkeleton *object;
  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
-  	int i=0;
-  	for (i=1;i<cmd->argc;i++)
-  	{
-		gchar *s;
-  		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
-  		object = object_skeleton_new (s);
-  		g_free (s);
 
-		ControlBmc* control_bmc = control_bmc_skeleton_new ();
-		object_skeleton_set_control_bmc (object, control_bmc);
-		g_object_unref (control_bmc);
+	gchar *s;
+	s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
+	object = object_skeleton_new (s);
+	g_free (s);
 
-		Control* control = control_skeleton_new ();
-		object_skeleton_set_control (object, control);
-		g_object_unref (control);
+	ControlBmc* control_bmc = control_bmc_skeleton_new ();
+	object_skeleton_set_control_bmc (object, control_bmc);
+	g_object_unref (control_bmc);
 
-		//define method callbacks here
-		g_signal_connect (control,
-        	            "handle-init",
-                	    G_CALLBACK (on_init),
-                	    NULL); /* user_data */
+	Control* control = control_skeleton_new ();
+	object_skeleton_set_control (object, control);
+	g_object_unref (control);
 
-		/* Export the object (@manager takes its own reference to @object) */
-		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
-		g_object_unref (object);
-	}
+	//define method callbacks here
+	g_signal_connect (control,
+       	            "handle-init",
+               	    G_CALLBACK (on_init),
+               	    NULL); /* user_data */
+
+	/* Export the object (@manager takes its own reference to @object) */
+	g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
+	g_object_unref (object);
+
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
+
+	//TODO:  This is a bad hack to wait for object to be on bus
+	//sleep(1);
+	cmd->user_data = object;
+	g_idle_add(go,cmd);
 }
 
+
 static void
 on_name_acquired (GDBusConnection *connection,
                   const gchar     *name,
                   gpointer         user_data)
 {
+
+
 }
 
 static void
@@ -179,8 +186,6 @@
 }
 
 
-
-
 /*----------------------------------------------------------------*/
 /* Main Event Loop                                                */
 
@@ -194,6 +199,7 @@
 
   guint id;
   loop = g_main_loop_new (NULL, FALSE);
+  cmd.loop = loop;
 
   id = g_bus_own_name (DBUS_TYPE,
                        dbus_name,
diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
index 2aedd04..9a7fd5f 100644
--- a/objects/control_bmc_obj.c
+++ b/objects/control_bmc_obj.c
@@ -12,6 +12,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/control";
+static const gchar* instance_name = "bmc0";
 static const gchar* dbus_name        = "org.openbmc.control.Bmc";
 
 //this probably should come from some global SOC config
@@ -103,13 +104,25 @@
          GDBusMethodInvocation  *invocation,
          gpointer                user_data)
 {
+	//#ifdef __arm__
+	//reg_init();
+	//#endif
+	control_complete_init(control,invocation);
+	//control_emit_goto_system_state(control,"BMC_STARTING");
+	
+	return TRUE;
+}
+gboolean go(gpointer user_data)
+{
+ 	cmdline *cmd = user_data;
+	Control* control = object_get_control((Object*)cmd->user_data);
 	#ifdef __arm__
 	reg_init();
 	#endif
-	control_complete_init(control,invocation);
 	control_emit_goto_system_state(control,"BMC_STARTING");
-	
-	return TRUE;
+
+	//g_main_loop_quit(cmd->loop);
+	return FALSE;
 }
 
 static void 
@@ -119,47 +132,48 @@
 {
 	ObjectSkeleton *object;
  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
-  	int i=0;
-  	for (i=1;i<cmd->argc;i++)
-  	{
-		gchar *s;
-  		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
-  		object = object_skeleton_new (s);
-  		g_free (s);
 
-		ControlBmc* control_bmc = control_bmc_skeleton_new ();
-		object_skeleton_set_control_bmc (object, control_bmc);
-		g_object_unref (control_bmc);
+	gchar *s;
+	s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
+	object = object_skeleton_new (s);
+	g_free (s);
 
-		Control* control = control_skeleton_new ();
-		object_skeleton_set_control (object, control);
-		g_object_unref (control);
+	ControlBmc* control_bmc = control_bmc_skeleton_new ();
+	object_skeleton_set_control_bmc (object, control_bmc);
+	g_object_unref (control_bmc);
 
-		//define method callbacks here
-		g_signal_connect (control,
-        	            "handle-init",
-                	    G_CALLBACK (on_init),
-                	    NULL); /* user_data */
+	Control* control = control_skeleton_new ();
+	object_skeleton_set_control (object, control);
+	g_object_unref (control);
 
-		/* Export the object (@manager takes its own reference to @object) */
-		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
-		g_object_unref (object);
-	}
+	//define method callbacks here
+	g_signal_connect (control,
+       	            "handle-init",
+               	    G_CALLBACK (on_init),
+               	    NULL); /* user_data */
+
+	/* Export the object (@manager takes its own reference to @object) */
+	g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
+	g_object_unref (object);
+
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
+
+	//TODO:  This is a bad hack to wait for object to be on bus
+	//sleep(1);
+	cmd->user_data = object;
+	g_idle_add(go,cmd);
 }
 
+
 static void
 on_name_acquired (GDBusConnection *connection,
                   const gchar     *name,
                   gpointer         user_data)
 {
+
+
 }
 
 static void
@@ -170,8 +184,6 @@
 }
 
 
-
-
 /*----------------------------------------------------------------*/
 /* Main Event Loop                                                */
 
@@ -185,6 +197,7 @@
 
   guint id;
   loop = g_main_loop_new (NULL, FALSE);
+  cmd.loop = loop;
 
   id = g_bus_own_name (DBUS_TYPE,
                        dbus_name,
diff --git a/objects/control_host_obj.c b/objects/control_host_obj.c
index d051f88..63a8d64 100644
--- a/objects/control_host_obj.c
+++ b/objects/control_host_obj.c
@@ -12,6 +12,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/control";
+static const gchar* instance_name = "host0";
 static const gchar* dbus_name        = "org.openbmc.control.Host";
 
 static GDBusObjectManagerServer *manager = NULL;
@@ -105,17 +106,10 @@
 	ObjectSkeleton *object;
 	//g_print ("Acquired a message bus connection: %s\n",name);
  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
-  	int i=0;
-  	for (i=1;i<cmd->argc;i++)
-  	{
+
 		gchar *s;
-		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
+		s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
 		object = object_skeleton_new (s);
 		g_free (s);
 		ControlHost* control_host = control_host_skeleton_new ();
@@ -140,7 +134,7 @@
 		/* Export the object (@manager takes its own reference to @object) */
 		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
 		g_object_unref (object);
-	}
+
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
 	
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index a3f3d03..4b82d67 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -47,6 +47,9 @@
 		{
 			printf("ERROR FlashControl: Unable to init\n");
 		}
+		//TODO: have to tune flash twice
+		sleep(1);
+		update(f,obj_path);
 	}
 	return TRUE;
 }
@@ -288,8 +291,8 @@
 		c--;
 	}
 
-	const char* inst[] = {"bios","bmc"};
-  	for (i=0;i<2;i++)
+	const char* inst[] = {"bios","bmc","bmc_ramdisk","bmc_kernel"};
+  	for (i=0;i<4;i++)
   	{
 		gchar* s;
 		s = g_strdup_printf ("%s/%s",dbus_object_path,inst[i]);
diff --git a/objects/flasher_obj.c b/objects/flasher_obj.c
index 53d62fd..26bf441 100644
--- a/objects/flasher_obj.c
+++ b/objects/flasher_obj.c
@@ -53,6 +53,7 @@
 
 static uint8_t FLASH_OK = 0;
 static uint8_t FLASH_ERROR = 1;
+static struct blocklevel_device *bl;
 
 static int erase_chip(void)
 {
@@ -71,6 +72,7 @@
 	return (rc);
 }
 
+
 void flash_message(GDBusConnection* connection,char* obj_path,char* method, char* error_msg)
 {
 	GDBusProxy *proxy;
@@ -296,13 +298,13 @@
 	atexit(flash_access_cleanup_pnor);
 }
 
-uint8_t flash(FlashControl* flash_control,bool bmc_flash, char* write_file, char* obj_path)
+uint8_t flash(FlashControl* flash_control,bool bmc_flash, uint32_t address, char* write_file, char* obj_path)
 {
 	bool has_sfc = false, has_ast = false, use_lpc = true;
 	bool erase = true, program = true;
-	uint32_t address = 0;
+
 	int rc;
-	printf("flasher: %s, BMC = %d\n",write_file,bmc_flash);
+	printf("flasher: %s, BMC = %d, address = 0x%x\n",write_file,bmc_flash,address);
 #ifdef __arm__
 	/* Check platform */
 	check_platform(&has_sfc, &has_ast);
@@ -390,10 +392,20 @@
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
 	bool bmc_flash = false;
+	uint32_t address = 0;
 	if (strcmp(cmd->argv[1],"bmc")==0) {
 		bmc_flash = true;
 	}
-	int rc = flash(flash_control,bmc_flash,cmd->argv[2],cmd->argv[3]);
+	if (strcmp(cmd->argv[1],"bmc_ramdisk")==0) {
+		bmc_flash = true;
+		address = 0x20300000;
+	}
+	if (strcmp(cmd->argv[1],"bmc_kernel")==0) {
+		bmc_flash = true;
+		address = 0x20080000;
+	}
+
+	int rc = flash(flash_control,bmc_flash,address,cmd->argv[2],cmd->argv[3]);
 	if (rc == FLASH_ERROR) {
 		flash_message(connection,cmd->argv[3],"error","Flash Error");
 	} else {
diff --git a/objects/host_watchdog_obj.c b/objects/host_watchdog_obj.c
index b1c8f2b..13208e2 100644
--- a/objects/host_watchdog_obj.c
+++ b/objects/host_watchdog_obj.c
@@ -5,6 +5,7 @@
 /* ---------------------------------------------------------------------------------------------------- */
 
 static const gchar* dbus_object_path = "/org/openbmc/watchdog";
+static const gchar* instance_name = "host0";
 static const gchar* dbus_name        = "org.openbmc.watchdog.Host";
 
 static GDBusObjectManagerServer *manager = NULL;
@@ -87,20 +88,10 @@
                  const gchar     *name,
                  gpointer         user_data)
 {
-  //	g_print ("Acquired a message bus connection: %s\n",name);
-
   	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
-  	int i=0;
-  	for (i=1;i<cmd->argc;i++)
-  	{
 		gchar *s;
- 		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
+ 		s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
 		ObjectSkeleton *object = object_skeleton_new (s);
 		g_free (s);
 
@@ -135,7 +126,6 @@
   		/* Export the object (@manager takes its own reference to @object) */
   		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
   		g_object_unref (object);
-	}
 
   /* Export all objects */
   g_dbus_object_manager_server_set_connection (manager, connection);
diff --git a/objects/led_controller.c b/objects/led_controller.c
index b4cd04d..29698fe 100644
--- a/objects/led_controller.c
+++ b/objects/led_controller.c
@@ -22,14 +22,14 @@
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-	printf("Turn on chassis identify led\n");
 	GPIO* mygpio = (GPIO*)user_data;
+	g_print("Turn on LED: %s\n",mygpio->name);
 	led_complete_set_on(led,invocation);
 	int rc = GPIO_OK;
 	do {
 		rc = gpio_open(mygpio);
 		if (rc != GPIO_OK) { break; }
-		rc = gpio_write(mygpio,1); 
+		rc = gpio_write(mygpio,0); 
 		if (rc != GPIO_OK) { break; }
 	} while(0);
 	gpio_close(mygpio);
@@ -47,14 +47,14 @@
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-	g_print("Turn off chassis identify led\n");
 	GPIO* mygpio = (GPIO*)user_data;
+	g_print("Turn off LED: %s\n",mygpio->name);
 	led_complete_set_off(led,invocation);
 	int rc = GPIO_OK;
 	do {
 		rc = gpio_open(mygpio);
 		if (rc != GPIO_OK) { break; }
-		rc = gpio_write(mygpio,0); 
+		rc = gpio_write(mygpio,1); 
 		if (rc != GPIO_OK) { break; }
 	} while(0);
 	gpio_close(mygpio);
@@ -73,11 +73,6 @@
 	ObjectSkeleton *object;
 
 	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
 
 	manager = g_dbus_object_manager_server_new (dbus_object_path);
 	int i = 0;
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index bdb7c9a..97d1021 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -13,6 +13,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/control";
+static const gchar* instance_name = "power0";
 static const gchar* dbus_name        = "org.openbmc.control.Power";
 
 //This object will use these GPIOs
@@ -145,8 +146,8 @@
          gpointer                user_data)
 {
 	pgood_timeout_start = 0;
-	guint poll_interval = control_get_poll_interval(control);
-	g_timeout_add(poll_interval, poll_pgood, user_data);
+	//guint poll_interval = control_get_poll_interval(control);
+	//g_timeout_add(poll_interval, poll_pgood, user_data);
 	control_complete_init(control,invocation);
 	return TRUE;
 }
@@ -168,14 +169,14 @@
 {
 	ObjectSkeleton *object;
  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
+	if (cmd->argc < 3)
 	{
-		g_print("No objects created.  Put object name(s) on command line\n");
+		g_print("Usage: power_control.exe [poll interval] [timeout]\n");
 		return;
 	}	
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
 	gchar *s;
-  	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
+  	s = g_strdup_printf ("%s/%s",dbus_object_path,instance_name);
   	object = object_skeleton_new (s);
   	g_free (s);
 
@@ -230,7 +231,19 @@
 	if (rc != GPIO_OK)
 	{
 		printf("ERROR PowerControl: GPIO setup (rc=%d)\n",rc);
-	} 
+	}
+	//start poll
+	pgood_timeout_start = 0;
+	int poll_interval = atoi(cmd->argv[1]);
+	int pgood_timeout = atoi(cmd->argv[2]);
+	if (poll_interval < 1000 || pgood_timeout <5) {
+		printf("ERROR PowerControl: poll_interval < 1000 or pgood_timeout < 5\n");
+	} else {
+		control_set_poll_interval(control,poll_interval);
+		control_power_set_pgood_timeout(control_power,pgood_timeout);
+		g_timeout_add(poll_interval, poll_pgood, object);
+	}
+ 
 }
 
 static void
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
deleted file mode 100644
index eb8fe8c..0000000
--- a/objects/sensor_temperature_ambient_obj.c
+++ /dev/null
@@ -1,187 +0,0 @@
-#include "interfaces/openbmc_intf.h"
-#include "openbmc.h"
-#include "sensor_threshold.h"
-
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static const gchar* dbus_object_path = "/org/openbmc/sensors";
-static const gchar* dbus_name        = "org.openbmc.sensors.Temperature.Ambient";
-static guint heartbeat = 0;
-
-static GDBusObjectManagerServer *manager = NULL;
-
-static gboolean
-poll_sensor(gpointer user_data)
-{
-	SensorValue *sensor = object_get_sensor_value((Object*)user_data);
-	SensorThreshold *threshold = object_get_sensor_threshold((Object*)user_data);
-	SensorI2c *i2c = object_get_sensor_i2c((Object*)user_data);
-
- 	GVariant* v_value = sensor_value_get_value(sensor);
-	guint poll_interval = sensor_value_get_poll_interval(sensor);
-
-	//TODO:  Change to actually read sensor
-	double value = GET_VARIANT_D(v_value);
-	//g_print("Reading I2C = %s; Address = %s; %f\n",
-	//	sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c),value);
-
-	value = value+1;
-	// Do this in case of an error
-	//sensor_value_emit_error(sensor);
-
-	if (heartbeat > 4000)
-	{
-		heartbeat = 0;
-		sensor_value_emit_heartbeat(sensor,dbus_name);
-	}
-	else
- 	{
-		heartbeat = heartbeat+poll_interval;
-	}
-
-    // End actually reading sensor
-
-    //if changed, set property and emit signal
-    if (value != GET_VARIANT_D(v_value))
-    {
-	GVariant* v_new_value = NEW_VARIANT_D(value);
-	sensor_value_set_value(sensor,v_new_value);
-	const gchar* units = sensor_value_get_units(sensor);
-	sensor_value_emit_changed(sensor,v_new_value,units);
-	check_thresholds(threshold,v_new_value);
-    }
-    return TRUE;
-}
-
-static gboolean
-on_init         (SensorValue  *sen,
-                GDBusMethodInvocation  *invocation,
-                gpointer                user_data)
-{
-
-	guint poll_interval = sensor_value_get_poll_interval(sen);
-	g_timeout_add(poll_interval, poll_sensor, user_data);
-	sensor_value_complete_init(sen,invocation);
-	return TRUE;
-}
-
-
-
-static void 
-on_bus_acquired (GDBusConnection *connection,
-                 const gchar     *name,
-                 gpointer         user_data)
-{
-  //	g_print ("Acquired a message bus connection: %s\n",name);
-
-  	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
-	{
-		g_print("No objects created.  Put object name(s) on command line\n");
-		return;
-	}	
-  	manager = g_dbus_object_manager_server_new (dbus_object_path);
-  	int i=0;
-  	for (i=1;i<cmd->argc;i++)
-  	{
-		gchar *s;
- 		s = g_strdup_printf ("%s/Temperature/%s",dbus_object_path,cmd->argv[i]);
-		ObjectSkeleton *object = object_skeleton_new (s);
-		g_free (s);
-
-		SensorValue *sensor = sensor_value_skeleton_new ();
-  		object_skeleton_set_sensor_value (object, sensor);
-  		g_object_unref (sensor);
-		
-		SensorThreshold *threshold = sensor_threshold_skeleton_new();
-		object_skeleton_set_sensor_threshold (object,threshold);
-		g_object_unref (threshold);
-
-		SensorI2c *i2c = sensor_i2c_skeleton_new();
-		object_skeleton_set_sensor_i2c (object,i2c);
-		g_object_unref (i2c);
-
-
-  		// set properties
-		GVariant* value = g_variant_new_variant(g_variant_new_double(1.0));
-		sensor_value_set_value(sensor,value);
-  		sensor_value_set_units(sensor,"C");
-  		sensor_value_set_settable(sensor,FALSE);
-		sensor_threshold_set_state(threshold,NOT_SET);
-		
-		sensor_threshold_set_upper_critical(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_upper_warning(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_lower_warning(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_lower_critical(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-
-		//define method callbacks here
-
- 		g_signal_connect (sensor,
-                    "handle-init",
-                    G_CALLBACK (on_init),
-                    object); /* user_data */
- 
-  		g_signal_connect (threshold,
-                    "handle-get-state",
-                    G_CALLBACK (get_threshold_state),
-                    NULL); /* user_data */
-
-
-
-  		/* Export the object (@manager takes its own reference to @object) */
-  		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
-  		g_object_unref (object);
-	}
-
-  /* Export all objects */
-  g_dbus_object_manager_server_set_connection (manager, connection);
-}
-
-static void
-on_name_acquired (GDBusConnection *connection,
-                  const gchar     *name,
-                  gpointer         user_data)
-{
-//  g_print ("Acquired the name %s\n", name);
-}
-
-static void
-on_name_lost (GDBusConnection *connection,
-              const gchar     *name,
-              gpointer         user_data)
-{
-//  g_print ("Lost the name %s\n", name);
-}
-
-
-gint
-main (gint argc, gchar *argv[])
-{
-  GMainLoop *loop;
-  cmdline cmd;
-  cmd.argc = argc;
-  cmd.argv = argv;
-  guint id;
-  loop = g_main_loop_new (NULL, FALSE);
-
-  id = g_bus_own_name (DBUS_TYPE,
-                       dbus_name,
-                       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
-                       G_BUS_NAME_OWNER_FLAGS_REPLACE,
-                       on_bus_acquired,
-                       on_name_acquired,
-                       on_name_lost,
-                       &cmd,
-                       NULL);
-
-  g_main_loop_run (loop);
-  
-  g_bus_unown_name (id);
-  g_main_loop_unref (loop);
-  return 0;
-}
