diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
index 4cd9b8d..33cd466 100644
--- a/objects/button_power_obj.c
+++ b/objects/button_power_obj.c
@@ -8,6 +8,9 @@
 
 static GDBusObjectManagerServer *manager = NULL;
 
+//This object will use these GPIOs
+GPIO button    = (GPIO){ "POWER_BUTTON" };
+
 static gboolean
 on_is_on       (Button          *btn,
                 GDBusMethodInvocation  *invocation,
@@ -20,15 +23,13 @@
 }
 
 static gboolean
-on_sim_button_press       (Button          *btn,
+on_button_press       (Button          *btn,
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-  g_print("Simulating button pressed\n");
-  button_emit_button_pressed(btn);
-  button_complete_sim_button_press(btn,invocation);
-  return TRUE;
-
+	button_emit_button_pressed(btn);
+	button_complete_sim_button_press(btn,invocation);
+	return TRUE;
 }
 
 static void 
@@ -64,9 +65,11 @@
                     NULL); /* user_data */
 		g_signal_connect (button,
                     "handle-sim-button-press",
-                    G_CALLBACK (on_sim_button_press),
+                    G_CALLBACK (on_button_press),
                     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);
diff --git a/objects/chassis_identify_obj.c b/objects/chassis_identify_obj.c
index a747d36..4a66515 100644
--- a/objects/chassis_identify_obj.c
+++ b/objects/chassis_identify_obj.c
@@ -17,9 +17,18 @@
 {
 	g_print("Turn on chassis identify led\n");
 	led_complete_set_on(led,invocation);
-	gpio_open(&led_gpio);
-	gpio_write(&led_gpio,1); 
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_open(&led_gpio);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_write(&led_gpio,1); 
+		if (rc != GPIO_OK) { break; }
+	} while(0);
 	gpio_close(&led_gpio);
+	if (rc != GPIO_OK)
+	{
+		g_print("GPIO Error: %d\n",rc);
+	}
 
 	return TRUE;
 
@@ -32,10 +41,18 @@
 {
 	g_print("Turn off chassis identify led\n");
 	led_complete_set_off(led,invocation);
-	gpio_open(&led_gpio);
-	gpio_write(&led_gpio,0); 
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_open(&led_gpio);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_write(&led_gpio,0); 
+		if (rc != GPIO_OK) { break; }
+	} while(0);
 	gpio_close(&led_gpio);
-
+	if (rc != GPIO_OK)
+	{
+		g_print("GPIO Error: %d\n",rc);
+	}
 	return TRUE;
 }
 
@@ -46,7 +63,6 @@
 {
 	ObjectSkeleton *object;
 
-	//g_print ("Acquired a message bus connection: %s\n",name);
 	cmdline *cmd = user_data;
 	if (cmd->argc < 2)
 	{
@@ -95,7 +111,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-  //g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -103,7 +118,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
- // g_print ("Lost the name %s\n", name);
 }
 
 
diff --git a/objects/pcie_slot_present_obj.c b/objects/pcie_slot_present_obj.c
new file mode 100644
index 0000000..8105f6f
--- /dev/null
+++ b/objects/pcie_slot_present_obj.c
@@ -0,0 +1,168 @@
+#include "interfaces/openbmc_intf.h"
+#include "openbmc.h"
+#include "gpio.h"
+#define NUM_SLOTS 8
+GPIO slots[NUM_SLOTS] = {
+	{ "SLOT0_RISER_PRESENT" },
+	{ "SLOT1_RISER_PRESENT" },
+	{ "SLOT2_RISER_PRESENT" },
+	{ "SLOT0_PRESENT" },
+	{ "SLOT1_PRESENT" },
+	{ "SLOT2_PRESENT" },
+	{ "MEZZ0_PRESENT" },
+	{ "MEZZ1_PRESENT" },
+};
+
+typedef struct {
+	const char* bus_name;
+	const char* path;
+} object_info;
+	
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+int get_object(GDBusProxy *proxy, GPIO* gpio, object_info* obj_info)
+{
+	g_print("Here: %s\n",gpio->name);
+ 	GError *error;
+	GVariant *parm;
+	GVariant *result;
+
+	error = NULL;
+	parm = g_variant_new("(ss)","GPIO_PRESENT",gpio->name);
+	result = g_dbus_proxy_call_sync (proxy,
+                                   "getObjectFromId",
+				   parm,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   NULL,
+                                   &error);
+	g_assert_no_error (error);
+	const gchar* bus_name;
+	const gchar* obj_path;
+	gsize bus_name_size;
+	gsize obj_path_size;
+	GVariantIter *iter = g_variant_iter_new(result);
+	GVariant* dict = g_variant_iter_next_value(iter);
+
+	GVariant* b = g_variant_lookup_value(dict,"bus_name",(const GVariantType *) "s");
+	bus_name = g_variant_get_string(b,&bus_name_size);
+	GVariant* o = g_variant_lookup_value(dict,"obj_path",(const GVariantType *) "s");
+	obj_path = g_variant_get_string(o,&obj_path_size);
+
+	int rc = 0;
+	if (bus_name_size ==  0 || obj_path_size == 0) {
+		g_print("ERROR: gpio %s not found in lookup\n",gpio->name);
+		rc = 1;
+
+	} else {
+		obj_info->bus_name = bus_name;
+		obj_info->path = obj_path;
+	}
+	g_variant_unref(b);
+	g_variant_unref(o);
+	g_variant_unref(dict);
+	g_variant_unref(result);
+
+	return rc;
+}
+
+int get_presence(GDBusConnection* connection, GPIO* gpio, uint8_t* present)
+{
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_init(connection,gpio);
+		if (rc != GPIO_OK) { break; }
+		uint8_t gpio_val;
+		rc = gpio_open(gpio);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_read(gpio,&gpio_val);
+		if (rc != GPIO_OK) { gpio_close(gpio); break; }
+		gpio_close(gpio);
+		*present = gpio_val;	
+	} while(0);
+	if (rc != GPIO_OK)
+	{
+		g_print("ERROR: gpio error %s\n",gpio->name);
+	}
+	return rc; 
+}
+
+void update_fru_obj(GDBusConnection* connection, object_info* obj_info, uint8_t state)
+{
+	GDBusProxy *proxy;
+ 	GError *error;
+	GVariant *parm;
+	GVariant *result;
+
+	error = NULL;
+	proxy = g_dbus_proxy_new_sync (connection,
+                             G_DBUS_PROXY_FLAGS_NONE,
+                             NULL,                      /* GDBusInterfaceInfo* */
+                             obj_info->bus_name, /* name */
+                             obj_info->path, /* object path */
+                             "org.openbmc.SensorValue",        /* interface name */
+                             NULL,                      /* GCancellable */
+                             &error);
+	g_assert_no_error (error);
+
+	error = NULL;
+	parm = g_variant_new("(y)",state);
+	
+	result = g_dbus_proxy_call_sync (proxy,
+                                   "setValue",
+				   parm,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   NULL,
+                                   &error);
+
+	g_assert_no_error (error);
+}
+
+gint
+main (gint argc, gchar *argv[])
+{
+	GMainLoop *loop;
+	GDBusConnection *c;
+	GDBusProxy *sys_proxy;
+ 	GError *error;
+	GVariant *parm;
+	GVariant *result;
+
+	loop = g_main_loop_new (NULL, FALSE);
+
+	error = NULL;
+	c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+
+	error = NULL;
+	sys_proxy = g_dbus_proxy_new_sync (c,
+                             G_DBUS_PROXY_FLAGS_NONE,
+                             NULL,                      /* GDBusInterfaceInfo* */
+                             "org.openbmc.managers.System", /* name */
+                             "/org/openbmc/managers/System", /* object path */
+                             "org.openbmc.managers.System",        /* interface name */
+                             NULL,                      /* GCancellable */
+                             &error);
+	g_assert_no_error (error);
+
+	int i = 0;
+	int rc = 0;	
+	for (i=0;i<NUM_SLOTS;i++)
+	{
+		object_info obj_info;
+		uint8_t present;
+		do {
+			rc = get_object(sys_proxy,&slots[i],&obj_info);
+			if (rc) { break; }
+			rc = get_presence(c,&slots[i],&present);
+			if (rc) { break; }
+			// TODO: send correct state
+			update_fru_obj(c,&obj_info,present);
+		} while(0);
+	}
+
+	g_object_unref(c);
+ 	g_main_loop_unref (loop);
+ 	return 0;
+}
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index bb0eaec..481c0d7 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -76,10 +76,8 @@
 		}
 	} else {
 		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error",rc);
-		//return FALSE;
 	}
 	//pgood is not at desired state yet
-	//g_print("GPIO: %d;  %d\n",gpio,control_power_get_state(control_power));
 	if (gpio != control_power_get_state(control_power) &&
 		control_power_get_pgood_timeout(control_power) > 0)
 	{
@@ -120,22 +118,19 @@
 	}
 	else
 	{
-		g_print("Set power state: %d\n",state);
-		//temporary until real hardware works
-		//tmp_pgood = state;
 		int error = 0;
 		do {
+			if (state == 1) {
+				control_emit_goto_system_state(control,"POWERING_ON");
+			} else {
+				control_emit_goto_system_state(control,"POWERING_OFF");
+			}
 			error = gpio_open(&power_pin);
 			if (error != GPIO_OK) { break;	}
 			error = gpio_write(&power_pin,!state);
 			if (error != GPIO_OK) { break;	}
 			gpio_close(&power_pin);
 			control_power_set_state(pwr,state);
-			if (state == 1) {
-				control_emit_goto_system_state(control,"POWERING_ON");
-			} else {
-				control_emit_goto_system_state(control,"POWERING_OFF");
-			}
 		} while(0);
 		if (error != GPIO_OK)
 		{
diff --git a/objects/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
index 05e02b2..825117a 100644
--- a/objects/sensor_host_status_obj.c
+++ b/objects/sensor_host_status_obj.c
@@ -27,41 +27,31 @@
 	control_complete_init(control,invocation);
 	return TRUE;
 }
-
-static void
-on_set_ipmi (GDBusConnection* connection,
-               const gchar* sender_name,
-               const gchar* object_path,
-               const gchar* interface_name,
-               const gchar* signal_name,
-               GVariant* parameters,
-               gpointer user_data) 
+static gboolean
+on_set_value    (SensorValue *sen,
+                GDBusMethodInvocation  *invocation,
+		guchar                  host_status,
+                gpointer                user_data)
 {
+	SensorValue *v = object_get_sensor_value((Object*)user_data);
 	SensorMatch *match = object_get_sensor_match((Object*)user_data);
-	SensorValue *sen = object_get_sensor_value((Object*)user_data);
-	SensorIpmi *ipmi = object_get_sensor_ipmi((Object*)user_data);
 	Control* control = object_get_control((Object*)user_data);
 	
-	guchar sensor_id;
-	guchar host_status;
-	g_variant_get (parameters, "(yy)", &sensor_id,&host_status);
-	guchar my_sensor_id = sensor_ipmi_get_sensor_id(ipmi);
-	if (my_sensor_id == sensor_id)
+	GVariant *old_value = sensor_value_get_value(sen);
+	GVariant *value = NEW_VARIANT_B(host_status);
+	if (VARIANT_COMPARE(old_value,value) != 0)
 	{
-		GVariant *old_value = sensor_value_get_value(sen);
-		GVariant *value = NEW_VARIANT_B(host_status);
-		if (VARIANT_COMPARE(old_value,value) != 0)
+		sensor_value_set_value(sen, value);
+		sensor_value_emit_changed(sen, value, "");
+		if (host_status == BOOTED)
 		{
-			sensor_value_set_value(sen, value);
-			sensor_value_emit_changed(sen, value, "");
-			if (host_status == BOOTED)
-			{
-				sensor_match_set_state(match,host_status);
-				sensor_match_emit_sensor_match(match,host_status);
-				control_emit_goto_system_state(control,"BOOTED");
-			}
+			sensor_match_set_state(match,host_status);
+			sensor_match_emit_sensor_match(match,host_status);
+			control_emit_goto_system_state(control,"BOOTED");
 		}
 	}
+	sensor_value_complete_set_value(sen,invocation);
+	return TRUE;
 }
 
 static void 
@@ -94,10 +84,6 @@
   		object_skeleton_set_sensor_match (object, match);
   		g_object_unref (match);
 
-		SensorIpmi *ipmi = sensor_ipmi_skeleton_new ();
-  		object_skeleton_set_sensor_ipmi (object, ipmi);
-  		g_object_unref (ipmi);
-
 		Control *control = control_skeleton_new ();
   		object_skeleton_set_control (object, control);
   		g_object_unref (control);
@@ -113,7 +99,7 @@
 		sensor_value_emit_changed(sensor,v,"");
 
 		//signal handlers
-		g_dbus_connection_signal_subscribe(connection,
+		/*g_dbus_connection_signal_subscribe(connection,
                                    "org.openbmc.sensors.IpmiBt",
                                    "org.openbmc.sensors.IpmiBt",
                                    "SetSensor",
@@ -123,6 +109,7 @@
                                    (GDBusSignalCallback) on_set_ipmi,
                                    object,
                                    NULL );
+		*/
   		//define method callbacks here
   		g_signal_connect (sensor,
                     "handle-init",
@@ -134,10 +121,10 @@
                     G_CALLBACK (on_init_control),
                     NULL); /* user_data */
 
-		//g_signal_connect (sensor,
-                  //  "handle-set-value",
-                  //  G_CALLBACK (on_set_value),
-                  //  object); /* user_data */
+		g_signal_connect (sensor,
+                    "handle-set-value",
+                    G_CALLBACK (on_set_value),
+                    object); /* user_data */
 
 
   		/* Export the object (@manager takes its own reference to @object) */
