diff --git a/Makefile b/Makefile
index b7f0053..b11c405 100644
--- a/Makefile
+++ b/Makefile
@@ -58,8 +58,8 @@
 control_bmc: control_bmc_obj.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/control_bmc_obj.o $(LDFLAGS) $(LIBS)
 
-sensor_occ: sensor_occ_obj.o libopenbmc_intf
-	$(CC) -o bin/$@.exe obj/sensor_occ_obj.o $(LDFLAGS) $(LIBS)
+control_bmc_barreleye: control_bmc_barreleye.o libopenbmc_intf
+	$(CC) -o bin/$@.exe obj/control_bmc_barreleye.o $(LDFLAGS) $(LIBS)
 
 board_vpd: board_vpd_obj.o libopenbmc_intf
 	$(CC) -o bin/$@.exe obj/board_vpd_obj.o $(LDFLAGS) $(LIBS)
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index 289c6ad..a0ef920 100755
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import sys
 import uuid
@@ -149,8 +149,8 @@
 
 	def host_watchdog_signal_handler(self):
 		print "Watchdog Error, Hard Rebooting"
-		self.reboot = 1
-		self.powerOff()
+		#self.reboot = 1
+		#self.powerOff()
 		
 
 if __name__ == '__main__':
diff --git a/bin/download_manager.py b/bin/download_manager.py
index 35859a5..74449a3 100755
--- a/bin/download_manager.py
+++ b/bin/download_manager.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import sys
 import gobject
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index d27abd3..a162bad 100755
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import os
 import sys
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index a91235e..9bb42d9 100755
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import sys
 #from gi.repository import GObject
diff --git a/bin/sensors_virtual_p8.py b/bin/sensors_virtual_p8.py
index c348e83..b3c975a 100755
--- a/bin/sensors_virtual_p8.py
+++ b/bin/sensors_virtual_p8.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import sys
 #from gi.repository import GObject
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 7f94578..f7bfdad 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python -u
 
 import sys
 import subprocess
diff --git a/objects/sensor_occ_obj.c b/objects/sensor_occ_obj.c
deleted file mode 100644
index 669579f..0000000
--- a/objects/sensor_occ_obj.c
+++ /dev/null
@@ -1,183 +0,0 @@
-#include "interfaces/openbmc_intf.h"
-#include "openbmc.h"
-
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-static const gchar* dbus_object_path = "/org/openbmc/sensors";
-static const gchar* dbus_name        = "org.openbmc.sensors.Occ";
-static guint heartbeat = 0;
-
-static GDBusObjectManagerServer *manager = NULL;
-static gchar *instance_name = NULL;
-
-static gboolean poll_occ(gpointer user_data)
-{
-	//g_dbus_object_get_object_path(G_DBUS_OBJECT(user_data)),
-	Occ* occ = object_get_occ((Object*)user_data);
-
-	gchar *s;
-	s = g_strdup_printf ("%s/Temperature/P8_%s_Core_%d",
-			dbus_object_path,occ_get_instance_name(occ),1);
-	g_print("%s\n",s);
-
-	GDBusInterface* interface = g_dbus_object_manager_get_interface((GDBusObjectManager*)manager,s,
-		"org.openbmc.SensorValue");
-
-	if (interface != NULL)
-	{
-		SensorValue* sensor = (SensorValue*) interface;
-		GVariant *value = NEW_VARIANT_U(10);
-		sensor_value_set_value(sensor,value);
-		const gchar* units = sensor_value_get_units(sensor);
-		sensor_value_emit_changed(sensor,sensor_value_get_value(sensor),units);
-	}
-	g_free (s);
-	//g_free(interface);
-	return TRUE;
-}
-
-static gboolean
-on_init (Occ         *occ,
-         GDBusMethodInvocation  *invocation,
-         gpointer                user_data)
-{
-	guint poll_interval = occ_get_poll_interval(occ);
-	g_timeout_add(poll_interval, poll_occ, user_data);
-	occ_complete_init(occ,invocation);
-	return TRUE;
-}
-static gboolean
-on_init_sensor (SensorValue         *sensor,
-         GDBusMethodInvocation  *invocation,
-         gpointer                user_data)
-{
-	//must implement init method
-	sensor_value_complete_init(sensor,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);
-
-		Occ *occ = occ_skeleton_new ();
-  		object_skeleton_set_occ (object, occ);
-  		g_object_unref (occ);
-		occ_set_instance_name(occ,cmd->argv[i]);
-
-		SensorI2c *i2c = sensor_i2c_skeleton_new ();
-  		object_skeleton_set_sensor_i2c (object, i2c);
-  		g_object_unref (i2c);
-
-		g_signal_connect (occ,
-               	    "handle-init",
-               	    G_CALLBACK (on_init),
-               	    object); /* user_data */
-	
-		//g_timeout_add(3000, poll_occ, 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);
-	
-		int c;	
-		for (c=0;c<12;c++)
-		{
- 			s = g_strdup_printf ("%s/Temperature/P8_%s_Core_%d",dbus_object_path,cmd->argv[i],c);
-			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);
-			GVariant* v_new_value = NEW_VARIANT_U(c);
-			sensor_value_set_value(sensor,v_new_value);
-			sensor_value_set_units(sensor,"C");
-
-			g_signal_connect (sensor,
-        	       	    "handle-init",
-               		    G_CALLBACK (on_init_sensor),
-               	    	    NULL); /* user_data */
-
-			//emit changed signal so sensor manager sees initial value
-			sensor_value_emit_changed(sensor,sensor_value_get_value(sensor),sensor_value_get_units(sensor));
-  			/* 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);
-	g_print("shutting down: %s\n",name);
-	cmdline *cmd = user_data;
-	g_main_loop_quit(cmd->loop);	
-}
-
-
-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);
-  cmd.loop = loop;
-
-  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;
-}
