diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 835ed7a..53df62d 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -21,9 +21,9 @@
 
 static GDBusObjectManagerServer *manager = NULL;
 
-guint tmp_pgood = 0;
-guint last_pgood = 0;
-guint pgood_timeout_count = 0;
+//guint tmp_pgood = 0;
+//guint last_pgood = 0;
+time_t pgood_timeout_start = 0;
 
 static gboolean poll_pgood(gpointer user_data)
 {
@@ -38,21 +38,22 @@
 	guint poll_int = control_get_poll_interval(control);
 	if (poll_int == 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0");
+		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0",0);
 		return FALSE;
 	}
-	//calculate timeout count
-	guint pgood_timeout = control_power_get_pgood_timeout(control_power)/poll_int;
-
-	if (pgood_timeout_count > pgood_timeout)
+	//handle timeout
+	time_t current_time = time(NULL);
+	if (difftime(current_time,pgood_timeout_start) > control_power_get_pgood_timeout(control_power)
+		&& pgood_timeout_start != 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout");
+		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout",0);
 		// set timeout to 0 so timeout doesn't happen again
 		control_power_set_pgood_timeout(control_power,0);
-		pgood_timeout_count = 0;
+		pgood_timeout_start = 0;
 		return TRUE;
 	}
 	//For simulation, remove
+	/*
 	if (tmp_pgood!=last_pgood) {
 		if (tmp_pgood == 1) {
 			control_emit_goto_system_state(control,"POWERED_ON");
@@ -60,10 +61,14 @@
 			control_emit_goto_system_state(control,"POWERED_OFF");
 		}
 	}
-
+	
 	last_pgood = tmp_pgood;
+	*/
 	uint8_t gpio;
-	int rc = gpio_read(&pgood,&gpio);
+	
+	int rc = gpio_open(&pgood);
+	rc = gpio_read(&pgood,&gpio);
+	gpio_close(&pgood);	
 	if (rc == GPIO_OK)
 	{
 		//if changed, set property and emit signal
@@ -82,18 +87,21 @@
  			}
 		}
 	} else {
-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error");
+		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)
+		control_power_get_pgood_timeout(control_power) > 0)
 	{
-		pgood_timeout_count++;
+		if (pgood_timeout_start == 0 ) {
+			pgood_timeout_start = current_time;
+		}
 	}
 	else 
 	{
-		pgood_timeout_count = 0;
+		pgood_timeout_start = 0;
 	}
 	return TRUE;
 }
@@ -126,13 +134,13 @@
 	{
 		g_print("Set power state: %d\n",state);
 		//temporary until real hardware works
-		tmp_pgood = state;
+		//tmp_pgood = state;
 		int error = 0;
 		do {
 			error = gpio_open(&power_pin);
-			if (error != GPIO_OK) {	break;	}
+			if (error != GPIO_OK) { break;	}
 			error = gpio_write(&power_pin,!state);
-			if (error != GPIO_OK) {	break;	}
+			if (error != GPIO_OK) { break;	}
 			gpio_close(&power_pin);
 			control_power_set_state(pwr,state);
 			if (state == 1) {
@@ -143,7 +151,7 @@
 		} while(0);
 		if (error != GPIO_OK)
 		{
-			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");
+			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO set power state error",error);
 		}
 	}
 	return TRUE;
@@ -154,6 +162,7 @@
          GDBusMethodInvocation  *invocation,
          gpointer                user_data)
 {
+	pgood_timeout_start = 0;
 	guint poll_interval = control_get_poll_interval(control);
 	g_timeout_add(poll_interval, poll_pgood, user_data);
 	control_complete_init(control,invocation);
@@ -184,49 +193,45 @@
 		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]);
-		g_print("%s\n",s);
-  		object = object_skeleton_new (s);
-  		g_free (s);
+	gchar *s;
+  	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
+	g_print("%s\n",s);
+  	object = object_skeleton_new (s);
+  	g_free (s);
 
-		ControlPower* control_power = control_power_skeleton_new ();
-		object_skeleton_set_control_power (object, control_power);
-		g_object_unref (control_power);
+	ControlPower* control_power = control_power_skeleton_new ();
+	object_skeleton_set_control_power (object, control_power);
+	g_object_unref (control_power);
+	
+	Control* control = control_skeleton_new ();
+	object_skeleton_set_control (object, control);
+	g_object_unref (control);
 
-		Control* control = control_skeleton_new ();
-		object_skeleton_set_control (object, control);
-		g_object_unref (control);
+	EventLog* event_log = event_log_skeleton_new ();
+	object_skeleton_set_event_log (object, event_log);
+	g_object_unref (event_log);
 
-		EventLog* event_log = event_log_skeleton_new ();
-		object_skeleton_set_event_log (object, event_log);
-		g_object_unref (event_log);
+	//define method callbacks here
+	g_signal_connect (control_power,
+       	            "handle-set-power-state",
+               	    G_CALLBACK (on_set_power_state),
+               	    object); /* user_data */
 
-		//define method callbacks here
-		g_signal_connect (control_power,
-        	            "handle-set-power-state",
-                	    G_CALLBACK (on_set_power_state),
-                	    object); /* user_data */
+	g_signal_connect (control_power,
+               	    "handle-get-power-state",
+               	    G_CALLBACK (on_get_power_state),
+               	    NULL); /* user_data */
 
-		g_signal_connect (control_power,
-                	    "handle-get-power-state",
-                	    G_CALLBACK (on_get_power_state),
-                	    NULL); /* user_data */
-
-		g_signal_connect (control,
-                	    "handle-init",
-                	    G_CALLBACK (on_init),
-                	    object); /* user_data */
+	g_signal_connect (control,
+               	    "handle-init",
+               	    G_CALLBACK (on_init),
+               	    object); /* 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);
 
@@ -239,12 +244,21 @@
 		rc = gpio_init(connection,&pgood);
 		if (rc != GPIO_OK) { break; }
 		rc = gpio_open(&pgood);
-		if (rc != GPIO_OK) { break; }
+
 	} while(0);
 	if (rc != GPIO_OK)
 	{
-		//event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");
+		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error",rc);
 	}
+	int rc = gpio_open(&pgood);
+	rc = gpio_read(&pgood,&gpio);
+	gpio_close(&pgood);	
+	if (rc == GPIO_OK) {
+		control_power_set_pgood(control_power,gpio);
+
+	} else {
+	}
+
 }
 
 static void
