diff --git a/objects/fan_generic_obj.c b/objects/fan_generic_obj.c
index 5dad61f..4c2ca35 100644
--- a/objects/fan_generic_obj.c
+++ b/objects/fan_generic_obj.c
@@ -41,17 +41,6 @@
   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,
@@ -91,10 +80,6 @@
                     "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);
 
diff --git a/objects/fru_board_obj.c b/objects/fru_board_obj.c
new file mode 100644
index 0000000..47683db
--- /dev/null
+++ b/objects/fru_board_obj.c
@@ -0,0 +1,121 @@
+#include "interfaces/fru.h"
+#include "openbmc.h"
+
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static const gchar* dbus_object_path = "/org/openbmc/frus/Board";
+static const gchar* dbus_name        = "org.openbmc.frus.Board";
+static const guint poll_interval = 5000;
+static guint heartbeat = 0;
+
+static GDBusObjectManagerServer *manager = NULL;
+
+static gboolean
+on_init         (Fru *fru,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+
+	FruEeprom *eeprom = object_get_fru_eeprom((Object*)user_data);
+
+	const gchar* dev_path = fru_eeprom_get_i2c_dev_path(eeprom);
+	const gchar* addr = fru_eeprom_get_i2c_address(eeprom);
+	g_print("Reading VPD EERPROM at: %s, %s\n",dev_path, addr);
+	fru_complete_init(fru,invocation);
+	fru_set_part_num(fru,"test part num");
+	
+	// add eeprom read code here
+	fru_emit_cache_me(fru,dbus_name);
+
+	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);
+
+		Fru *fru = fru_skeleton_new ();
+  		object_skeleton_set_fru (object, fru);
+  		g_object_unref (fru);
+
+		FruEeprom *eeprom = fru_eeprom_skeleton_new ();
+  		object_skeleton_set_fru_eeprom (object, eeprom);
+  		g_object_unref (eeprom);
+
+		g_signal_connect (fru,
+                    "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 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/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
index df5c326..29545d1 100644
--- a/objects/sensor_host_status_obj.c
+++ b/objects/sensor_host_status_obj.c
@@ -1,4 +1,4 @@
-#include "interfaces/sensor2.h"
+#include "interfaces/sensor.h"
 #include "openbmc.h"
 
 
@@ -32,16 +32,17 @@
 }
 
 static gboolean
-on_set_config (SensorInteger                 *sen,
+on_set (SensorInteger                 *sen,		
                 GDBusMethodInvocation  *invocation,
-		gchar**                  config,
+		guint                   value,
                 gpointer                user_data)
 {
-  sensor_integer_complete_set_config_data(sen,invocation);
-  return TRUE;
+	sensor_integer_set_value(sen,value);
+	sensor_integer_emit_changed(sen,value,sensor_integer_get_units(sen));
+	sensor_integer_complete_set_value(sen,invocation);
+	return TRUE;
 }
 
-
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -69,7 +70,7 @@
   		g_object_unref (sensor);
 		
   		// set units
-  		sensor_integer_set_units(sensor,"C");
+  		sensor_integer_set_units(sensor,"");
   		//define method callbacks here
   		g_signal_connect (sensor,
                     "handle-get-value",
@@ -79,12 +80,10 @@
                     "handle-get-units",
                     G_CALLBACK (on_get_units),
                     NULL); /* user_data */
-
   		g_signal_connect (sensor,
-                    "handle-set-config-data",
-                    G_CALLBACK (on_set_config),
+                    "handle-set-value",
+                    G_CALLBACK (on_set),
                     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));
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
index 848c786..52335d5 100644
--- a/objects/sensor_temperature_ambient_obj.c
+++ b/objects/sensor_temperature_ambient_obj.c
@@ -1,4 +1,4 @@
-#include "interfaces/sensor2.h"
+#include "interfaces/sensor.h"
 #include "openbmc.h"
 #include "sensor_threshold.h"
 
@@ -12,8 +12,6 @@
 
 static GDBusObjectManagerServer *manager = NULL;
 
-static gchar* i2c_bus = "";
-static gchar* i2c_address = "";
 static gboolean inited = FALSE;
 
 static gboolean
@@ -25,8 +23,11 @@
 	}
 	SensorInteger *sensor = object_get_sensor_integer((Object*)user_data);
 	SensorIntegerThreshold *threshold = object_get_sensor_integer_threshold((Object*)user_data);
+	SensorI2c *i2c = object_get_sensor_i2c((Object*)user_data);
+
  	guint value = sensor_integer_get_value(sensor);
 	//TOOD:  Change to actually read sensor
+	g_print("Reading I2C = %s; Address = %s\n",sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c));
 	value = value+1;
 	if (heartbeat > 10000)
 	{
@@ -44,7 +45,7 @@
     if (value != sensor_integer_get_value(sensor))
     {
        sensor_integer_set_value(sensor,value);
-       sensor_integer_emit_changed(sensor,value);
+       sensor_integer_emit_changed(sensor,value,sensor_integer_get_units(sensor));
        check_thresholds(threshold,value);
     }
     return TRUE;
@@ -56,7 +57,6 @@
                 gpointer                user_data)
 {
   inited = TRUE;
-  g_print("Sensor init");
   sensor_integer_complete_init(sen,invocation);
   return TRUE;
 }
@@ -82,19 +82,6 @@
   return TRUE;
 }
 
-static gboolean
-on_set_config (SensorInteger                 *sen,
-                GDBusMethodInvocation  *invocation,
-		gchar**                  config,
-                gpointer                user_data)
-{
-  g_print("I2C bus = %s\n",config[0]);
-  g_print("I2C addr = %s\n",config[1]);
-  sensor_integer_complete_set_config_data(sen,invocation);
-  return TRUE;
-}
-
-
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -125,6 +112,11 @@
 		object_skeleton_set_sensor_integer_threshold (object,threshold);
 		g_object_unref (threshold);
 
+		SensorI2c *i2c = sensor_i2c_skeleton_new();
+		object_skeleton_set_sensor_i2c (object,i2c);
+		g_object_unref (i2c);
+
+
   		// set units
   		sensor_integer_set_units(sensor,"C");
 		sensor_integer_threshold_set_state(threshold,NOT_SET);
@@ -138,11 +130,6 @@
                     G_CALLBACK (on_get_units),
                     NULL); /* user_data */
 
-  		g_signal_connect (sensor,
-                    "handle-set-config-data",
-                    G_CALLBACK (on_set_config),
-                    NULL); /* user_data */
-
  		g_signal_connect (sensor,
                     "handle-init",
                     G_CALLBACK (on_init),
