diff --git a/objects/fan_generic_obj.c b/objects/fan_generic_obj.c
new file mode 100644
index 0000000..5dad61f
--- /dev/null
+++ b/objects/fan_generic_obj.c
@@ -0,0 +1,152 @@
+#include "interfaces/fru.h"
+#include "openbmc.h"
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static const gchar* dbus_object_path = "/org/openbmc/frus/Fan";
+static const gchar* dbus_name        = "org.openbmc.frus.Fan";
+static const guint poll_interval = 5000;
+static guint heartbeat = 0;
+
+static GDBusObjectManagerServer *manager = NULL;
+
+static gboolean
+poll_sensor(gpointer user_data)
+{
+    //FruFan *fan = object_get_fan((Object*)user_data);
+    return TRUE;
+}
+
+
+
+static gboolean
+on_set_speed    (FruFan  *fan,
+                GDBusMethodInvocation  *invocation,
+		guint                  speed,
+                gpointer                user_data)
+{
+  fru_fan_set_speed(fan,speed);
+  fru_fan_complete_set_speed(fan,invocation);
+  return TRUE;
+}
+
+static gboolean
+on_get_speed (FruFan                 *fan,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+  guint reading = fru_fan_get_speed(fan);
+  fru_fan_complete_get_speed(fan,invocation,reading);
+  return TRUE;
+}
+
+static gboolean
+on_set_config (FruFan                 *fan,
+                GDBusMethodInvocation  *invocation,
+		gchar**                  config,
+                gpointer                user_data)
+{
+  fru_fan_complete_set_config_data(fan,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);
+
+		FruFan *fan = fru_fan_skeleton_new ();
+  		object_skeleton_set_fru_fan (object, fan);
+  		g_object_unref (fan);
+
+		Fru *fru = fru_skeleton_new ();
+  		object_skeleton_set_fru (object, fru);
+  		g_object_unref (fru);
+		
+  		//define method callbacks here
+  		g_signal_connect (fan,
+                    "handle-get-speed",
+                    G_CALLBACK (on_get_speed),
+                    NULL); /* user_data */
+  		g_signal_connect (fan,
+                    "handle-set-speed",
+                    G_CALLBACK (on_set_speed),
+                    NULL); /* user_data */
+  		g_signal_connect (fan,
+                    "handle-set-config-data",
+                    G_CALLBACK (on_set_config),
+                    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));
+  		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/fru_generic_obj.c b/objects/fru_generic_obj.c
new file mode 100644
index 0000000..742ec9e
--- /dev/null
+++ b/objects/fru_generic_obj.c
@@ -0,0 +1,92 @@
+#include "interfaces/fru.h"
+#include "openbmc.h"
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static const gchar* dbus_object_path = "/org/openbmc/frus/Fru";
+static const gchar* dbus_name        = "org.openbmc.frus.Fru";
+static const guint poll_interval = 5000;
+static guint heartbeat = 0;
+
+static GDBusObjectManagerServer *manager = NULL;
+
+
+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);
+
+		Fru *fru = fru_skeleton_new ();
+  		object_skeleton_set_fru (object, fru);
+  		g_object_unref (fru);
+		
+  		/* 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 5d3315f..c0047bd 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -6,7 +6,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
-#include "interfaces/power_control.h"
+#include "interfaces/control.h"
 #include "openbmc.h"
 #include "gpio.h"
 
@@ -19,6 +19,51 @@
 
 static GDBusObjectManagerServer *manager = NULL;
 
+static gboolean poll_pgood(gpointer user_data)
+{
+	ControlPower *control_power = object_get_control_power((Object*)user_data);
+	Control* control = object_get_control((Object*)user_data);
+	EventLog* event_log = object_get_event_log((Object*)user_data);
+	control_emit_heartbeat(control,dbus_name);
+
+	//if (pgood.fd >= 0)
+	//{
+		uint8_t gpio = gpio_read(&pgood);
+		//if changed, set property and emit signal
+		if (gpio != control_power_get_pgood(control_power))
+		{
+ 			control_power_set_pgood(control_power,gpio);
+ 			if (gpio==0)
+ 			{
+ 				control_power_emit_power_lost(control_power);
+ 			}
+ 			else
+ 			{
+ 				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;
+}
+
+
+
 static gboolean
 on_set_power_state (ControlPower          *pwr,
                 GDBusMethodInvocation  *invocation,
@@ -88,6 +133,14 @@
 		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);
+
+		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",
@@ -99,6 +152,8 @@
                 	    G_CALLBACK (on_get_power_state),
                 	    NULL); /* user_data */
 
+		g_timeout_add(5000, poll_pgood, 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);
@@ -128,35 +183,6 @@
   g_print ("Lost the name %s\n", name);
 }
 
-static gboolean poll_pgood(gpointer user_data)
-{
-	ControlPower *control_power = object_get_control_power((Object*)user_data);
-
-	if (pgood.fd >= 0)
-	{
-		uint8_t gpio = gpio_read(&pgood);
-
-		//if changed, set property and emit signal
-		if (gpio != control_power_get_pgood(control_power))
-		{
- 			control_power_set_pgood(control_power,gpio);
- 			if (gpio==0)
- 			{
- 				control_power_emit_power_lost(control_power);
- 			}
- 			else
- 			{
- 				control_power_emit_power_good(control_power);
- 			}
-		}
-	}
-	else
-	{
-		//TODO: error handling
-		printf("Unable to read pgood\n");
-	}
-	return TRUE;
-}
 
 
 
@@ -184,8 +210,7 @@
                        &cmd,
                        NULL);
 
-  g_timeout_add(5000, poll_pgood, NULL);
-  g_main_loop_run (loop);
+   g_main_loop_run (loop);
   
   g_bus_unown_name (id);
   g_main_loop_unref (loop);
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
index 15e5f67..848c786 100644
--- a/objects/sensor_temperature_ambient_obj.c
+++ b/objects/sensor_temperature_ambient_obj.c
@@ -14,18 +14,21 @@
 
 static gchar* i2c_bus = "";
 static gchar* i2c_address = "";
+static gboolean inited = FALSE;
 
 static gboolean
 poll_sensor(gpointer user_data)
 {
+	if (!inited)
+	{
+		return TRUE;
+	}
 	SensorInteger *sensor = object_get_sensor_integer((Object*)user_data);
 	SensorIntegerThreshold *threshold = object_get_sensor_integer_threshold((Object*)user_data);
-
  	guint value = sensor_integer_get_value(sensor);
 	//TOOD:  Change to actually read sensor
 	value = value+1;
-
-	if (heartbeat > 30000)
+	if (heartbeat > 10000)
 	{
 		heartbeat = 0;
 		sensor_integer_emit_heartbeat(sensor,dbus_name);
@@ -40,7 +43,6 @@
     //if changed, set property and emit signal
     if (value != sensor_integer_get_value(sensor))
     {
-       //g_print("Sensor changed\n");
        sensor_integer_set_value(sensor,value);
        sensor_integer_emit_changed(sensor,value);
        check_thresholds(threshold,value);
@@ -48,6 +50,17 @@
     return TRUE;
 }
 
+static gboolean
+on_init         (SensorInteger  *sen,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+  inited = TRUE;
+  g_print("Sensor init");
+  sensor_integer_complete_init(sen,invocation);
+  return TRUE;
+}
+
 
 static gboolean
 on_get_units    (SensorInteger  *sen,
@@ -129,6 +142,11 @@
                     "handle-set-config-data",
                     G_CALLBACK (on_set_config),
                     NULL); /* user_data */
+
+ 		g_signal_connect (sensor,
+                    "handle-init",
+                    G_CALLBACK (on_init),
+                    NULL); /* user_data */
  
   		g_signal_connect (threshold,
                     "handle-set",
