diff --git a/Makefile b/Makefile
index 23b53ce..02f51f1 100644
--- a/Makefile
+++ b/Makefile
@@ -37,9 +37,6 @@
 led_controller: led_controller.o gpio.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/gpio.o obj/led_controller.o $(LDFLAGS) $(LIBS)
 
-sensor_ambient: sensor_threshold.o sensor_temperature_ambient_obj.o libopenbmc_intf
-	$(CC) -o bin/$@.exe obj/sensor_threshold.o obj/sensor_temperature_ambient_obj.o $(LDFLAGS) $(LIBS)
-
 button_power: button_power_obj.o gpio.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/button_power_obj.o obj/gpio.o $(LDFLAGS) $(LIBS)
 
@@ -74,4 +71,4 @@
 	$(CC) -o bin/$@.exe obj/hwmon_intf.o $(LDFLAGS) $(LIBS)
 
 
-all: setup libopenbmc_intf power_control led_controller sensor_ambient button_power control_host fan host_watchdog control_bmc board_vpd pcie_slot_present flash_bios flasher control_bmc_barreleye
+all: setup libopenbmc_intf power_control led_controller button_power control_host fan host_watchdog control_bmc board_vpd pcie_slot_present flash_bios flasher control_bmc_barreleye
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
deleted file mode 100644
index eb8fe8c..0000000
--- a/objects/sensor_temperature_ambient_obj.c
+++ /dev/null
@@ -1,187 +0,0 @@
-#include "interfaces/openbmc_intf.h"
-#include "openbmc.h"
-#include "sensor_threshold.h"
-
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static const gchar* dbus_object_path = "/org/openbmc/sensors";
-static const gchar* dbus_name        = "org.openbmc.sensors.Temperature.Ambient";
-static guint heartbeat = 0;
-
-static GDBusObjectManagerServer *manager = NULL;
-
-static gboolean
-poll_sensor(gpointer user_data)
-{
-	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",
-	//	sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c),value);
-
-	value = value+1;
-	// Do this in case of an error
-	//sensor_value_emit_error(sensor);
-
-	if (heartbeat > 4000)
-	{
-		heartbeat = 0;
-		sensor_value_emit_heartbeat(sensor,dbus_name);
-	}
-	else
- 	{
-		heartbeat = heartbeat+poll_interval;
-	}
-
-    // End actually reading sensor
-
-    //if changed, set property and emit signal
-    if (value != GET_VARIANT_D(v_value))
-    {
-	GVariant* v_new_value = NEW_VARIANT_D(value);
-	sensor_value_set_value(sensor,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;
-}
-
-static gboolean
-on_init         (SensorValue  *sen,
-                GDBusMethodInvocation  *invocation,
-                gpointer                user_data)
-{
-
-	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;
-}
-
-
-
-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/Temperature/%s",dbus_object_path,cmd->argv[i]);
-		ObjectSkeleton *object = object_skeleton_new (s);
-		g_free (s);
-
-		SensorValue *sensor = sensor_value_skeleton_new ();
-  		object_skeleton_set_sensor_value (object, sensor);
-  		g_object_unref (sensor);
-		
-		SensorThreshold *threshold = sensor_threshold_skeleton_new();
-		object_skeleton_set_sensor_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 properties
-		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,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_upper_warning(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_lower_warning(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-		sensor_threshold_set_lower_critical(threshold,
-			g_variant_new_variant(g_variant_new_double(0.0)));
-
-		//define method callbacks here
-
- 		g_signal_connect (sensor,
-                    "handle-init",
-                    G_CALLBACK (on_init),
-                    object); /* user_data */
- 
-  		g_signal_connect (threshold,
-                    "handle-get-state",
-                    G_CALLBACK (get_threshold_state),
-                    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));
-  		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 (DBUS_TYPE,
-                       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;
-}
