diff --git a/objects/host_watchdog_obj.c b/objects/host_watchdog_obj.c
new file mode 100644
index 0000000..6396658
--- /dev/null
+++ b/objects/host_watchdog_obj.c
@@ -0,0 +1,146 @@
+#include "interfaces/watchdog.h"
+#include "openbmc.h"
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static const gchar* dbus_object_path = "/org/openbmc/watchdog/HostWatchdog";
+static const gchar* dbus_name        = "org.openbmc.watchdog.HostWatchdog";
+
+static GDBusObjectManagerServer *manager = NULL;
+
+
+static gboolean
+poll_watchdog(gpointer user_data)
+{
+	Watchdog *watchdog = object_get_watchdog((Object*)user_data);
+
+ 	guint count = watchdog_get_watchdog(watchdog);
+	g_print("Polling watchdog: %d\n",count);
+	
+	if (count == 0)
+	{
+		watchdog_emit_watchdog_error(watchdog);
+	}
+
+	//reset watchdog
+	watchdog_set_watchdog(watchdog,0);	
+	return TRUE;
+}
+
+static gboolean
+on_start        (Watchdog  *wd,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	guint poll_interval = watchdog_get_poll_interval(wd);
+  	g_timeout_add(poll_interval, poll_watchdog, user_data);
+	watchdog_complete_start(wd,invocation);
+	return TRUE;
+}
+
+static gboolean
+on_poke         (Watchdog  *wd,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	watchdog_set_watchdog(wd,1);
+	watchdog_complete_poke(wd,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/%s",dbus_object_path,cmd->argv[i]);
+		ObjectSkeleton *object = object_skeleton_new (s);
+		g_free (s);
+
+		Watchdog *wd = watchdog_skeleton_new ();
+  		object_skeleton_set_watchdog (object, wd);
+  		g_object_unref (wd);
+		
+  		// set properties
+  		watchdog_set_watchdog(wd,1);
+		
+		//define method callbacks here
+ 		g_signal_connect (wd,
+                    "handle-start",
+                    G_CALLBACK (on_start),
+                    object); /* user_data */
+ 
+ 		g_signal_connect (wd,
+                    "handle-poke",
+                    G_CALLBACK (on_poke),
+                    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 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 (G_BUS_TYPE_SESSION,
+                       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;
+}
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index c0047bd..ce9144b 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -42,23 +42,6 @@
  				control_power_emit_power_good(control_power);
  			}
 		}
-	//}
-	//else
-	//{
-		//TODO: error handling
-	/*	GVariantBuilder *b;
-		GVariant *dict;
-		b = g_variant_builder_new (G_VARIANT_TYPE ("a{ss}"));
-		g_variant_builder_add (b, "{ss}", "object",dbus_object_path);
-		g_variant_builder_add (b, "{ss}", "message", "Unable to read pgood gpio");
-		char buf[254];
-		sprintf(buf,"%s/gpio%d",pgood.dev,pgood.num);
-		g_variant_builder_add (b, "{ss}", "gpio",buf);
-		
-		dict = g_variant_builder_end (b);
-		event_log_emit_event_log(event_log,dict);
-		
-	}*/
 	return TRUE;
 }
 
@@ -77,23 +60,31 @@
                                                 "Invalid power state");
 		return TRUE;
 	}
+	// return from method call
+	control_power_complete_set_power_state(pwr,invocation);
 	if (state == control_power_get_state(pwr))
 	{
-		g_dbus_method_invocation_return_dbus_error (invocation,
-                                                "org.openbmc.ControlPower.Error.Failed",
-                                                "Power Control is already at requested state");
-		return TRUE;     
+		g_print("Power already at requested state: %d\n",state);
 	}
+	else
+	{
+		g_print("Set power state: %d\n",state);
+		gpio_open(&power_pin);
+		gpio_write(&power_pin,!state); 
+		gpio_close(&power_pin);
+		control_power_set_state(pwr,state);
+	}
+	return TRUE;
+}
 
-	//go ahead and return from method call
-	control_power_complete_set_power_state(pwr,invocation);
-
-	g_print("Set power state: %d\n",state);
-	gpio_open(&power_pin);
-	gpio_write(&power_pin,!state); 
-	gpio_close(&power_pin);
-
-	control_power_set_state(pwr,state);
+static gboolean
+on_init (Control         *control,
+         GDBusMethodInvocation  *invocation,
+         gpointer                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;
 }
 
@@ -152,7 +143,12 @@
                 	    G_CALLBACK (on_get_power_state),
                 	    NULL); /* user_data */
 
-		g_timeout_add(5000, poll_pgood, object);
+		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));
diff --git a/objects/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
index a085220..bd16935 100644
--- a/objects/sensor_host_status_obj.c
+++ b/objects/sensor_host_status_obj.c
@@ -1,48 +1,45 @@
 #include "interfaces/sensor.h"
 #include "openbmc.h"
 
-
+#define BOOTED 100
 /* ---------------------------------------------------------------------------------------------------- */
 
 static const gchar* dbus_object_path = "/org/openbmc/sensors/HostStatus";
 static const gchar* dbus_name        = "org.openbmc.sensors.HostStatus";
-static const guint poll_interval = 3000;
 static guint heartbeat = 0;
 
 static GDBusObjectManagerServer *manager = NULL;
-/*
-static gboolean
-on_get_units    (SensorValue  *sen,
-                GDBusMethodInvocation  *invocation,
-                gpointer                user_data)
-{
-  const gchar* val = sensor_value_get_units(sen);
-  sensor_value_complete_get_units(sen,invocation,val);
-  return TRUE;
-}
 
 static gboolean
-on_get (SensorValue                 *sen,
+on_set_value    (SensorValue  *sen,
                 GDBusMethodInvocation  *invocation,
+		GVariant*    value,
                 gpointer                user_data)
 {
-  guint reading = sensor_value_get_value(sen);
-  sensor_value_complete_get_value(sen,invocation,reading);
-  return TRUE;
-}
-static gboolean
-on_set (SensorValue                 *sen,		
-                GDBusMethodInvocation  *invocation,
-		guint                   value,
-                gpointer                user_data)
-{
-	GVariant* v = NEW_VARIANT_U(value);
-	sensor_value_set_value(sen,v);
-	sensor_value_emit_changed(sen,v,sensor_value_get_units(sen));
+	SensorMatch *match = object_get_sensor_match((Object*)user_data);
+	sensor_value_set_value(sen,value);
+	sensor_value_emit_changed(sen,value,"");
+	// Important host status values
+	guchar host_status = g_variant_get_byte(g_variant_get_variant(value));
+
+	if (host_status == BOOTED)
+	{
+		sensor_match_set_state(match,host_status);
+		sensor_match_emit_sensor_match(match,host_status);
+	}
 	sensor_value_complete_set_value(sen,invocation);
 	return TRUE;
 }
-*/
+
+static gboolean
+on_init         (SensorValue  *sen,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	sensor_value_complete_init(sen,invocation);
+	return TRUE;
+}
+
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -68,26 +65,28 @@
 		SensorValue *sensor = sensor_value_skeleton_new ();
   		object_skeleton_set_sensor_value (object, sensor);
   		g_object_unref (sensor);
+
+		SensorMatch *match = sensor_match_skeleton_new ();
+  		object_skeleton_set_sensor_match (object, match);
+  		g_object_unref (match);
 	
 		//must init variant
-		GVariant* v = NEW_VARIANT_U(0);
+		GVariant* v = NEW_VARIANT_B(0);
 		sensor_value_set_value(sensor,v);
 	
-  		// set units
+		// set units
   		sensor_value_set_units(sensor,"");
+  		sensor_value_set_settable(sensor,TRUE);
+
   		//define method callbacks here
-  		//g_signal_connect (sensor,
-                //    "handle-get-value",
-                //    G_CALLBACK (on_get),
-                //    NULL); /* user_data */
-  		//g_signal_connect (sensor,
-                //    "handle-get-units",
-                //    G_CALLBACK (on_get_units),
-                //    NULL); /* user_data */
-  		//g_signal_connect (sensor,
-                //    "handle-set-value",
-                //    G_CALLBACK (on_set),
-                //    NULL); /* user_data */
+  		g_signal_connect (sensor,
+                    "handle-init",
+                    G_CALLBACK (on_init),
+                    NULL); /* 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) */
   		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
index 70787dd..4f1b32a 100644
--- a/objects/sensor_temperature_ambient_obj.c
+++ b/objects/sensor_temperature_ambient_obj.c
@@ -7,25 +7,20 @@
 
 static const gchar* dbus_object_path = "/org/openbmc/sensors/Temperature/Ambient";
 static const gchar* dbus_name        = "org.openbmc.sensors.Temperature.Ambient";
-static const guint poll_interval = 3000;
 static guint heartbeat = 0;
 
 static GDBusObjectManagerServer *manager = NULL;
 
-static gboolean inited = FALSE;
-
 static gboolean
 poll_sensor(gpointer user_data)
 {
-	if (!inited)
-	{
-		return TRUE;
-	}
 	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",
@@ -46,17 +41,13 @@
     // End actually reading sensor
 
     //if changed, set property and emit signal
-  //  if (value != sensor_value_get_value(sensor)
     if (value != GET_VARIANT_D(v_value))
     {
-	// they don't appear to provide a function to modify float value in varait
-	// so it seems I have to create a new one
 	GVariant* v_new_value = NEW_VARIANT_D(value);
 	sensor_value_set_value(sensor,v_new_value);
-
-       sensor_value_set_value(sensor,v_new_value);
-       //sensor_value_emit_changed(sensor,v_new_value,sensor_value_get_units(sensor));
-       check_thresholds(threshold,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;
 }
@@ -66,9 +57,11 @@
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-  inited = TRUE;
-  sensor_value_complete_init(sen,invocation);
-  return TRUE;
+
+	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;
 }
 
 
@@ -112,6 +105,7 @@
 		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,
@@ -128,14 +122,14 @@
  		g_signal_connect (sensor,
                     "handle-init",
                     G_CALLBACK (on_init),
-                    NULL); /* user_data */
+                    object); /* user_data */
  
   		g_signal_connect (threshold,
                     "handle-get-state",
                     G_CALLBACK (get_threshold_state),
                     NULL); /* user_data */
 
-  		g_timeout_add(poll_interval, poll_sensor, object);
+
 
   		/* Export the object (@manager takes its own reference to @object) */
   		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
