diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
index 33cd466..b535d50 100644
--- a/objects/button_power_obj.c
+++ b/objects/button_power_obj.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
 #include "interfaces/openbmc_intf.h"
 #include "gpio.h"
 #include "openbmc.h"
@@ -9,7 +10,7 @@
 static GDBusObjectManagerServer *manager = NULL;
 
 //This object will use these GPIOs
-GPIO button    = (GPIO){ "POWER_BUTTON" };
+GPIO gpio_button    = (GPIO){ "POWER_BUTTON" };
 
 static gboolean
 on_is_on       (Button          *btn,
@@ -31,6 +32,15 @@
 	button_complete_sim_button_press(btn,invocation);
 	return TRUE;
 }
+static gboolean
+on_button_interrupt( GIOChannel *channel,
+               GIOCondition condition,
+               gpointer user_data )
+{
+	Button* button = object_get_button((Object*)user_data);
+	printf("Power Button pressed\n");
+	button_emit_button_pressed(button);
+}
 
 static void 
 on_bus_acquired (GDBusConnection *connection,
@@ -47,36 +57,46 @@
 	}	
   	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);
+	gchar *s;
+	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
+	object = object_skeleton_new (s);
+	g_free (s);
 
-		Button* button = button_skeleton_new ();
-		object_skeleton_set_button (object, button);
-		g_object_unref (button);
+	Button* button = button_skeleton_new ();
+	object_skeleton_set_button (object, button);
+	g_object_unref (button);
 
-		//define method callbacks
-		g_signal_connect (button,
-                    "handle-is-on",
-                    G_CALLBACK (on_is_on),
-                    NULL); /* user_data */
-		g_signal_connect (button,
+	//define method callbacks
+	g_signal_connect (button,
+                   "handle-is-on",
+                   G_CALLBACK (on_is_on),
+                   NULL); /* user_data */
+	g_signal_connect (button,
                     "handle-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);
 
-		/* 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);
+
+	// get gpio device paths
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_init(connection,&gpio_button);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_open_interrupt(&gpio_button,on_button_interrupt,object);
+		if (rc != GPIO_OK) { break; }
+	} while(0);
+	if (rc != GPIO_OK)
+	{
+		printf("ERROR PowerButton: GPIO setup (rc=%d)\n",rc);
+	} 
+
 }
 
 static void
@@ -84,7 +104,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-//  g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -92,7 +111,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
- // g_print ("Lost the name %s\n", name);
 }
 
 
