diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index ebc71aa..d9ad04d 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -5,15 +5,15 @@
 #include "openbmc.h"
 
 /* ---------------------------------------------------------------------------------------------------- */
-static const gchar* dbus_object_path = "/org/openbmc/flash";
-static const gchar* dbus_name        = "org.openbmc.flash.Bios";
+static const gchar* dbus_object_path = "/org/openbmc/control/flash";
+static const gchar* dbus_name        = "org.openbmc.control.Flash";
 static const gchar* FLASHER_BIN      = "flasher.exe";
 static const gchar* DLOAD_BUS = "org.openbmc.managers.Download";
 static const gchar* DLOAD_OBJ = "/org/openbmc/managers/Download";
 
 static GDBusObjectManagerServer *manager = NULL;
 
-int update(Flash* flash)
+int update(Flash* flash, const char* obj_path)
 {
 	pid_t pid;
 	int status=-1;
@@ -24,7 +24,7 @@
 		const gchar* name = flash_get_flasher_name(flash);
 		const gchar* inst = flash_get_flasher_instance(flash);
 		const gchar* filename = flash_get_filename(flash);
-		status = execl(path, name, inst, filename, NULL);
+		status = execl(path, name, inst, filename, obj_path, NULL);
 		return status;
 	}
 	return 0;
@@ -38,11 +38,16 @@
 	flash_complete_init(f,invocation);
 
 	//tune flash
-	flash_set_filename(f,"");
-	int rc = update(f);
-	if (rc==-1)
+	printf(" >>>>>>>>>> %s\n",flash_get_flasher_instance(f));	
+	if (strcmp(flash_get_flasher_instance(f),"bios") == 0)
 	{
-		printf("ERROR FlashControl_0: Unable to init\n");
+		flash_set_filename(f,"");
+		const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
+		int rc = update(f,obj_path);
+		if (rc==-1)
+		{
+			printf("ERROR FlashControl: Unable to init\n");
+		}
 	}
 	return TRUE;
 }
@@ -110,15 +115,49 @@
 	else
 	{	
 		printf("Flashing BIOS from TFTP: %s,%s\n",url,write_file);
-		shared_resource_set_lock(lock,true);
-		shared_resource_set_name(lock,dbus_object_path);
 		flash_set_filename(flash,write_file);
 		flash_emit_download(flash,url,write_file);
+		flash_set_status(flash,"Downloading");
 	}
 	return TRUE;
 }
 
 static gboolean
+on_error        (Flash          *flash,
+                GDBusMethodInvocation  *invocation,
+                gchar*                  error_msg,
+                gpointer                user_data)
+{
+	int rc = 0;
+	SharedResource *lock = object_get_shared_resource((Object*)user_data);
+	gboolean locked = shared_resource_get_lock(lock);
+	flash_set_status(flash, error_msg);
+	flash_complete_error(flash,invocation);
+	printf("ERROR: %s.  Clearing locks\n",error_msg);
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
+	
+	return TRUE;
+}
+static gboolean
+on_done        (Flash          *flash,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	int rc = 0;
+	SharedResource *lock = object_get_shared_resource((Object*)user_data);
+	gboolean locked = shared_resource_get_lock(lock);
+	flash_set_status(flash, "Flash Done");
+	flash_complete_done(flash,invocation);
+	printf("Flash Done. Clearing locks\n");
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
+	
+	return TRUE;
+}
+
+
+static gboolean
 on_update (Flash          *flash,
                 GDBusMethodInvocation  *invocation,
                 gchar*                  write_file,
@@ -127,6 +166,7 @@
 	int rc = 0;
 	SharedResource *lock = object_get_shared_resource((Object*)user_data);
 	gboolean locked = shared_resource_get_lock(lock);
+	flash_set_status(flash,"Flashing");
 	flash_complete_update(flash,invocation);
 	if (locked)
 	{
@@ -136,10 +176,12 @@
 	else
 	{	
 		printf("Flashing BIOS from: %s\n",write_file);
+		flash_set_status(flash, "Flashing");
 		shared_resource_set_lock(lock,true);
 		shared_resource_set_name(lock,dbus_object_path);
 		flash_set_filename(flash,write_file);
-		rc = update(flash);
+		const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
+		rc = update(flash,obj_path);
 		if (!rc)
 		{
 			shared_resource_set_lock(lock,false);
@@ -148,33 +190,6 @@
 	}
 	return TRUE;
 }
-
-static void
-on_download_complete (GDBusConnection* connection,
-               const gchar* sender_name,
-               const gchar* object_path,
-               const gchar* interface_name,
-               const gchar* signal_name,
-               GVariant* parameters,
-               gpointer user_data) 
-{
-	Flash *flash = object_get_flash((Object*)user_data);
-	SharedResource *lock = object_get_shared_resource((Object*)user_data);
-
-	GVariantIter *iter = g_variant_iter_new(parameters);
-	GVariant* v_fullname = g_variant_iter_next_value(iter);
-	gsize size;
-	const gchar* fullname = g_variant_get_string(v_fullname,&size);
-	int rc;
-	flash_set_filename(flash,fullname);
-	rc = update(flash);
-	if (!rc)
-	{
-		shared_resource_set_lock(lock,false);
-		shared_resource_set_name(lock,"");
-	}
-}
-
 static void
 on_flash_progress (GDBusConnection* connection,
                const gchar* sender_name,
@@ -191,7 +206,11 @@
 	GVariant* v_progress = g_variant_iter_next_value(iter);
 	
 	uint8_t progress = g_variant_get_byte(v_progress);
-	printf("Progress: %d\n",progress);
+
+	gchar *s;
+	s = g_strdup_printf ("Flashing: %d%%",progress);
+	flash_set_status(flash,s);
+	g_free(s);
 }
 
 static void
@@ -208,6 +227,7 @@
 	printf("Flash succeeded; unlocking flash\n");
 	shared_resource_set_lock(lock,false);
 	shared_resource_set_name(lock,"");
+	flash_set_status(flash,"Flash Done");
 }
 
 static void
@@ -249,17 +269,31 @@
 {
 	ObjectSkeleton *object;
  	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++)
+
+	//TODO: don't use fixed buffer
+	char flasher_path[512];
+	memset(flasher_path, '\0', sizeof(flasher_path));
+	bool found = false;
+	gchar *flasher_file;
+	int c = strlen(cmd->argv[0]);
+	while(c>0)
+	{
+		if (cmd->argv[0][c] == '/')
+		{
+			strncpy(flasher_path,cmd->argv[0],c);
+			flasher_file = g_strdup_printf ("%s/%s",flasher_path,FLASHER_BIN);
+			break;
+		}
+		c--;
+	}
+
+	const char* inst[] = {"bios","bmc"};
+  	for (i=0;i<2;i++)
   	{
-		gchar *s;
-		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
+		gchar* s;
+		s = g_strdup_printf ("%s/%s",dbus_object_path,inst[i]);
 		object = object_skeleton_new (s);
 		g_free (s);
 
@@ -274,33 +308,10 @@
 		shared_resource_set_lock(lock,false);
 		shared_resource_set_name(lock,"");
 
-		int c = strlen(cmd->argv[0]);
-
-		//TODO: don't use fixed buffer
-		char buf[512];
-		memset(buf, '\0', sizeof(buf));
-		bool found = false;
-		while(c>0)
-		{
-			if (cmd->argv[0][c] == '/')
-			{
-				strncpy(buf,cmd->argv[0],c);
-				s = g_strdup_printf ("%s/%s",buf,FLASHER_BIN);
-				break;
-			}
-			c--;
-		}
-		if (c==0)
-		{
-			printf("ERROR FlashBios: Invalid Path = %s\n",cmd->argv[0]);
-		}
-		else
-		{
-			flash_set_flasher_path(flash,s);
-			flash_set_flasher_name(flash,FLASHER_BIN);
-			flash_set_flasher_instance(flash,cmd->argv[i]);
-		}
-		g_free (s);
+		flash_set_flasher_path(flash,flasher_file);
+		flash_set_flasher_name(flash,FLASHER_BIN);
+		flash_set_flasher_instance(flash,inst[i]);
+		//g_free (s);
 
 
 		//define method callbacks here
@@ -321,6 +332,17 @@
                     "handle-update",
                     G_CALLBACK (on_update),
                     object); /* user_data */
+
+		g_signal_connect (flash,
+                    "handle-error",
+                    G_CALLBACK (on_error),
+                    object); /* user_data */
+
+		g_signal_connect (flash,
+                    "handle-done",
+                    G_CALLBACK (on_done),
+                    object); /* user_data */
+
 		g_signal_connect (flash,
                     "handle-update-via-tftp",
                     G_CALLBACK (on_update_via_tftp),
@@ -329,47 +351,9 @@
 		g_signal_connect (flash,
                     "handle-init",
                     G_CALLBACK (on_init),
-                    NULL); /* user_data */
+                    object); /* user_data */
 
-		g_dbus_connection_signal_subscribe(connection,
-				   DLOAD_BUS, DLOAD_BUS, "DownloadComplete",
-                                   DLOAD_OBJ,NULL,G_DBUS_SIGNAL_FLAGS_NONE,
-                                   (GDBusSignalCallback) on_download_complete,
-                                   object,
-                                   NULL );
-		g_dbus_connection_signal_subscribe(connection,
-				   DLOAD_BUS, DLOAD_BUS, "DownloadError",
-                                   DLOAD_OBJ,NULL,G_DBUS_SIGNAL_FLAGS_NONE,
-                                   (GDBusSignalCallback) on_download_error,
-                                   object,
-                                   NULL );
-
-		s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
-		g_dbus_connection_signal_subscribe(connection,
-                                   NULL,
-                                   "org.openbmc.FlashControl",
-                                   "Done",
-                                   s,
-                                   NULL,
-                                   G_DBUS_SIGNAL_FLAGS_NONE,
-                                   (GDBusSignalCallback) on_flash_done,
-                                   object,
-                                   NULL );
-		g_free(s);
-		s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
-		g_dbus_connection_signal_subscribe(connection,
-                                   NULL,
-                                   "org.openbmc.FlashControl",
-                                   "Error",
-                                   s,
-                                   NULL,
-                                   G_DBUS_SIGNAL_FLAGS_NONE,
-                                   (GDBusSignalCallback) on_flash_error,
-                                   object,
-                                   NULL );
-
-		g_free(s);
-		s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
+		s = g_strdup_printf ("/org/openbmc/control/%s",inst[i]);
 		g_dbus_connection_signal_subscribe(connection,
                                    NULL,
                                    "org.openbmc.FlashControl",
@@ -389,7 +373,7 @@
 		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
   		g_object_unref (object);
 	}
-
+	g_free(flasher_file);
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
 }
