diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
index 93005a1..f436fde 100644
--- a/objects/button_power_obj.c
+++ b/objects/button_power_obj.c
@@ -2,12 +2,13 @@
 #include "interfaces/openbmc_intf.h"
 #include "gpio.h"
 #include "openbmc.h"
+#include "object_mapper.h"
 
 /* ---------------------------------------------------------------------------------------------------- */
 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 const int LONG_PRESS_SECONDS = 3;
 static GDBusObjectManagerServer *manager = NULL;
 
 //This object will use these GPIOs
@@ -29,8 +30,8 @@
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-	button_emit_button_pressed(btn);
-	button_complete_sim_button_press(btn,invocation);
+	button_emit_pressed(btn);
+	button_complete_sim_press(btn,invocation);
 	return TRUE;
 }
 static gboolean
@@ -50,24 +51,32 @@
                                             &error );
 	printf("%s\n",buf);
 	
+	time_t current_time = time(NULL);
 	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);
+			button_emit_pressed(button);
+			button_set_timer(button,(long)current_time);
 		}
 		else
 		{
-			printf("Power Button released\n");
+			long press_time = current_time-button_get_timer(button);
+			printf("Power Button released, held for %ld seconds\n",press_time);
+			if (press_time > LONG_PRESS_SECONDS)
+			{
+				button_emit_pressed_long(button);
+			} else {
+				button_emit_released(button);
+			}
 		}
 	} 
 	else { gpio_button.irq_inited = true; }
 
 	return TRUE;
 }
-
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -87,6 +96,10 @@
 	object_skeleton_set_button (object, button);
 	g_object_unref (button);
 
+	ObjectMapper* mapper = object_mapper_skeleton_new ();
+	object_skeleton_set_object_mapper (object, mapper);
+	g_object_unref (mapper);
+
 	//define method callbacks
 	g_signal_connect (button,
                    "handle-is-on",
@@ -116,8 +129,8 @@
 	if (rc != GPIO_OK)
 	{
 		printf("ERROR PowerButton: GPIO setup (rc=%d)\n",rc);
-	} 
-
+	}
+	emit_object_added((GDBusObjectManager*)manager); 
 }
 
 static void
