diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
index 9ceaf9b..617e4a7 100644
--- a/objects/control_bmc_obj.c
+++ b/objects/control_bmc_obj.c
@@ -36,7 +36,7 @@
 			PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, base);
 
 	if (bmcreg == MAP_FAILED) {
-		perror("Unable to map LPC register memory");
+		printf("ERROR: Unable to map LPC register memory");
 		exit(1);
 	}
 	return bmcreg;
@@ -50,7 +50,7 @@
 	void *bmcreg;
 	int mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
 	if (mem_fd < 0) {
-		perror("Unable to open /dev/mem");
+		printf("ERROR: Unable to open /dev/mem");
 		exit(1);
 	}
 
@@ -114,7 +114,6 @@
                  gpointer         user_data)
 {
 	ObjectSkeleton *object;
-	//g_print ("Acquired a message bus connection: %s\n",name);
  	cmdline *cmd = user_data;
 	if (cmd->argc < 2)
 	{
@@ -138,10 +137,6 @@
 		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,
         	            "handle-init",
@@ -161,7 +156,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-//  g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -169,7 +163,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
-//  g_print ("Lost the name %s\n", name);
 }
 
 
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 4c40708..a4c51bd 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -4,7 +4,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/flash";
-static const gchar* dbus_name        = "org.openbmc.flash.BIOS";
+static const gchar* dbus_name        = "org.openbmc.flash.Bios";
 
 static GDBusObjectManagerServer *manager = NULL;
 
@@ -21,7 +21,7 @@
 }
 
 static gboolean
-on_update_via_file (Flash          *f,
+on_update (Flash          *f,
                 GDBusMethodInvocation  *invocation,
                 gchar*                  write_file,
                 gpointer                user_data)
@@ -39,7 +39,7 @@
   write_size = stbuf.st_size;
   erase_chip();
   program_file(write_file, address, write_size);
-  flash_complete_update_via_file(f,invocation);
+  flash_complete_update(f,invocation);
   return TRUE;
 }
 
@@ -71,8 +71,8 @@
 
 		//define method callbacks here
 		g_signal_connect (flash,
-                    "handle-update-via-file",
-                    G_CALLBACK (on_update_via_file),
+                    "handle-update",
+                    G_CALLBACK (on_update),
                     NULL); /* user_data */
  
 		g_signal_connect (flash,
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 481c0d7..7abff35 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -29,7 +29,6 @@
 {
 	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);
 
 	//send the heartbeat
 	control_emit_heartbeat(control,dbus_name);
@@ -38,7 +37,7 @@
 	guint poll_int = control_get_poll_interval(control);
 	if (poll_int == 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0",0);
+		printf("ERROR:  Poll interval cannot be 0\n");
 		return FALSE;
 	}
 	//handle timeout
@@ -46,7 +45,7 @@
 	if (difftime(current_time,pgood_timeout_start) > control_power_get_pgood_timeout(control_power)
 		&& pgood_timeout_start != 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout",0);
+		printf("ERROR: Pgood poll timeout\n");
 		// set timeout to 0 so timeout doesn't happen again
 		control_power_set_pgood_timeout(control_power,0);
 		pgood_timeout_start = 0;
@@ -75,7 +74,7 @@
  			}
 		}
 	} else {
-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error",rc);
+		printf("ERROR: GPIO read error (rc=%d)\n",rc);
 	}
 	//pgood is not at desired state yet
 	if (gpio != control_power_get_state(control_power) &&
@@ -101,7 +100,6 @@
                 gpointer                user_data)
 {
 	Control* control = object_get_control((Object*)user_data);
-	EventLog* event_log = object_get_event_log((Object*)user_data);
 	const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
 	if (state > 1)
 	{
@@ -134,7 +132,7 @@
 		} while(0);
 		if (error != GPIO_OK)
 		{
-			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO set power state error",error);
+			printf("ERROR: GPIO set power state (rc=%d)\n",error);
 		}
 	}
 	return TRUE;
@@ -190,10 +188,6 @@
 	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",
@@ -235,7 +229,7 @@
 	} while(0);
 	if (rc != GPIO_OK)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error",rc);
+		printf("ERROR: GPIO setup (rc=%d)\n",rc);
 	} 
 }
 
@@ -244,7 +238,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-  //g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -252,7 +245,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
-  //g_print ("Lost the name %s\n", name);
 }
 
 
