diff --git a/objects/control_host_obj.c b/objects/control_host_obj.c
index ec62a37..9f6fb92 100644
--- a/objects/control_host_obj.c
+++ b/objects/control_host_obj.c
@@ -35,49 +35,57 @@
                 gpointer                user_data)
 {
 	// TODO: Add error checking
-	g_print("Boot\n");
+	g_print("Do Boot\n");
+	int rc = GPIO_OK;
+
 	Control* control = object_get_control((Object*)user_data);
 	control_host_complete_boot(host,invocation);
+	do {	
+		rc |= gpio_open(&fsi_clk);
+		rc |= gpio_open(&fsi_data);
+		rc |= gpio_open(&fsi_enable);
+		rc |= gpio_open(&cronus_sel);
+		if (rc!=GPIO_OK) { break; }
+		
+		rc = gpio_write(&cronus_sel,1);
+		//putcfam pu 281c 30000000 -p0
+		char a[] = "000011111111110101111000111001100111111111111111111111111111101111111111";
+		//putcfam pu 281c B0000000 -p0
+		char b[] = "000011111111110101111000111000100111111111111111111111111111101101111111";
+
+		gpio_write(&fsi_enable,1);
+		gpio_write(&fsi_clk,1);
+		gpio_write(&fsi_data,1);
+		gpio_clock_cycle(&fsi_clk,5000);
+		gpio_write(&fsi_data,0);
+		gpio_clock_cycle(&fsi_clk,256);
+		gpio_write(&fsi_data,1);
+		gpio_clock_cycle(&fsi_clk,50);
+		uint16_t i=0;
+		for(i=0;i<strlen(a);i++) {
+			gpio_writec(&fsi_data,a[i]);
+			gpio_clock_cycle(&fsi_clk,1);
+		}
+		gpio_write(&fsi_data,1); /* Data standby state */
+		gpio_clock_cycle(&fsi_clk,5000);
+
+		for(i=0;i<strlen(b);i++) {
+			gpio_writec(&fsi_data,b[i]);
+			gpio_clock_cycle(&fsi_clk,1);
+		}
+		gpio_write(&fsi_data,1); /* Data standby state */
+		gpio_clock_cycle(&fsi_clk,2);
+
+	        gpio_write(&fsi_clk,0); /* hold clk low for clock mux */
+	        gpio_write(&fsi_enable,0);
+	        gpio_clock_cycle(&fsi_clk,16);
+	        gpio_write(&fsi_clk,0); /* Data standby state */
 	
-	gpio_open(&fsi_clk);
-	gpio_open(&fsi_data);
-	gpio_open(&fsi_enable);
-	gpio_open(&cronus_sel);
-
-	gpio_write(&cronus_sel,1);
-	//putcfam pu 281c 30000000 -p0
-	char a[] = "000011111111110101111000111001100111111111111111111111111111101111111111";
-	//putcfam pu 281c B0000000 -p0
-	char b[] = "000011111111110101111000111000100111111111111111111111111111101101111111";
-
-	gpio_write(&fsi_enable,1);
-	gpio_write(&fsi_clk,1);
-	gpio_write(&fsi_data,1);
-	gpio_clock_cycle(&fsi_clk,5000);
-	gpio_write(&fsi_data,0);
-	gpio_clock_cycle(&fsi_clk,256);
-	gpio_write(&fsi_data,1);
-	gpio_clock_cycle(&fsi_clk,50);
-	uint16_t i=0;
-	for(i=0;i<strlen(a);i++) {
-		gpio_writec(&fsi_data,a[i]);
-		gpio_clock_cycle(&fsi_clk,1);
-	}
-	gpio_write(&fsi_data,1); /* Data standby state */
-	gpio_clock_cycle(&fsi_clk,5000);
-
-	for(i=0;i<strlen(b);i++) {
-		gpio_writec(&fsi_data,b[i]);
-		gpio_clock_cycle(&fsi_clk,1);
-	}
-	gpio_write(&fsi_data,1); /* Data standby state */
-	gpio_clock_cycle(&fsi_clk,2);
-
-        gpio_write(&fsi_clk,0); /* hold clk low for clock mux */
-        gpio_write(&fsi_enable,0);
-        gpio_clock_cycle(&fsi_clk,16);
-        gpio_write(&fsi_clk,0); /* Data standby state */
-	
+	} while(0);
+	if (rc != GPIO_OK)
+	{
+		printf("ERROR HostControl: GPIO sequence failed (rc=%d)\n",rc);
+	}	
 	gpio_close(&fsi_clk);
 	gpio_close(&fsi_data);
 	gpio_close(&fsi_enable);
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 637f44a..928d11b 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -1,31 +1,33 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
 #include "interfaces/openbmc_intf.h"
-#include "pflash/pflash.c"
 #include "openbmc.h"
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/flash";
 static const gchar* dbus_name        = "org.openbmc.flash.Bios";
+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;
 
-void update(Flash *flash, const gchar* write_file)
+int update(Flash* flash)
 {
-	printf("Flashing: %s\n",write_file);
-	// get size from file
-	struct stat stbuf;
-	uint32_t address = 0, read_size = 0, write_size = 0;
+	pid_t pid;
+	int status=-1;
+	pid = fork();
+	if (pid == 0)
+	{
+		const gchar* path = flash_get_flasher_path(flash);
+		const gchar* name = flash_get_flasher_name(flash);
+		const gchar* inst = flash_get_flasher_instance(flash);
+		const gchar* filename = flash_get_filename(flash);
 
-#ifdef __arm__
-	if (stat(write_file, &stbuf))
- 	{
- 		printf("ERROR:  Invalid flash file: %s\n",write_file);
+		status = execl(path, name, inst, filename, NULL);
 	}
-	write_size = stbuf.st_size;
-	// TODO: need to change pflash to return error instead of exit
-	erase_chip();
-	program_file(write_file, address, write_size);
-#endif
-  	flash_emit_updated(flash);
+	return status;
 }
 
 static gboolean
@@ -35,11 +37,49 @@
 {
 	flash_complete_init(f,invocation);
 
-	#ifdef __arm__
-		printf("Tuning BIOS Flash\n");
-		flash_access_setup_pnor(true, false, false);
-	#endif
+	//tune flash
+	flash_set_filename(f,"");
+	int rc = update(f);
+	if (rc==-1)
+	{
+		printf("ERROR FlashControl_0: Unable to init\n");
+	}
+	return TRUE;
+}
 
+static gboolean
+on_lock (SharedResource          *lock,
+                GDBusMethodInvocation  *invocation,
+		gchar*                  name,
+                gpointer                user_data)
+{
+	printf("Locking BIOS Flash: %s\n",name);
+	shared_resource_set_lock(lock,true);
+	shared_resource_set_name(lock,name);
+	shared_resource_complete_lock(lock,invocation);
+	return TRUE;
+}
+static gboolean
+on_is_locked (SharedResource          *lock,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	gboolean locked = shared_resource_get_lock(lock);
+	const gchar* name = shared_resource_get_name(lock);
+	shared_resource_complete_is_locked(lock,invocation,locked,name);
+	return TRUE;
+}
+
+
+static gboolean
+on_unlock (SharedResource          *lock,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	printf("Unlocking BIOS Flash\n");
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
+	shared_resource_complete_unlock(lock,invocation);
 	return TRUE;
 }
 
@@ -50,9 +90,22 @@
                 gchar*                  write_file,
                 gpointer                user_data)
 {
-	printf("Flashing BIOS from TFTP: %s,%s\n",url,write_file);
-	flash_emit_download(flash,url,write_file);
+	SharedResource *lock = object_get_shared_resource((Object*)user_data);
+	gboolean locked = shared_resource_get_lock(lock);
 	flash_complete_update_via_tftp(flash,invocation);
+	if (locked)
+	{
+		const gchar* name = shared_resource_get_name(lock);
+		printf("BIOS Flash is locked: %s\n",name);
+	}
+	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);
+	}
 	return TRUE;
 }
 
@@ -62,10 +115,28 @@
                 gchar*                  write_file,
                 gpointer                user_data)
 {
-	printf("Flashing BIOS from file\n");
+	int rc = 0;
+	SharedResource *lock = object_get_shared_resource((Object*)user_data);
+	gboolean locked = shared_resource_get_lock(lock);
 	flash_complete_update(flash,invocation);
-	update(flash,write_file);
-  	flash_emit_updated(flash);
+	if (locked)
+	{
+		const gchar* name = shared_resource_get_name(lock);
+		printf("BIOS Flash is locked: %s\n",name);
+	}
+	else
+	{	
+		printf("Flashing BIOS from: %s\n",write_file);
+		shared_resource_set_lock(lock,true);
+		shared_resource_set_name(lock,dbus_object_path);
+		flash_set_filename(flash,write_file);
+		rc = update(flash);
+		if (!rc)
+		{
+			shared_resource_set_lock(lock,false);
+			shared_resource_set_name(lock,"");
+		}
+	}
 	return TRUE;
 }
 
@@ -79,14 +150,87 @@
                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* value = g_variant_iter_next_value(iter);
-	const gchar* write_file;
+	GVariant* v_fullname = g_variant_iter_next_value(iter);
 	gsize size;
-	write_file = g_variant_get_string(value,&size);
-	update(flash,write_file);
+	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,
+               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_filename = g_variant_iter_next_value(iter);
+	GVariant* v_progress = g_variant_iter_next_value(iter);
 	
+	uint8_t progress = g_variant_get_byte(v_progress);
+	printf("Progress: %d\n",progress);
+}
+
+static void
+on_flash_done (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);
+	printf("Flash succeeded; unlocking flash\n");
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
+}
+
+static void
+on_flash_error (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);
+	printf("Flash Error; unlocking flash\n");
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
+}
+
+static void
+on_download_error (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);
+	printf("ERROR: FlashBios:  Download error; clearing flash lock\n");
+	shared_resource_set_lock(lock,false);
+	shared_resource_set_name(lock,"");
 }
 
 static void 
@@ -95,7 +239,6 @@
                  gpointer         user_data)
 {
 	ObjectSkeleton *object;
-//	g_print ("Acquired a message bus connection: %s\n",name);
  	cmdline *cmd = user_data;
 	if (cmd->argc < 2)
 	{
@@ -115,15 +258,64 @@
 		object_skeleton_set_flash (object, flash);
  		g_object_unref (flash);
 
+		SharedResource* lock = shared_resource_skeleton_new ();
+		object_skeleton_set_shared_resource (object, lock);
+ 		g_object_unref (lock);
+
+		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);
+
+
 		//define method callbacks here
+		g_signal_connect (lock,
+                    "handle-lock",
+                    G_CALLBACK (on_lock),
+                    NULL); /* user_data */
+		g_signal_connect (lock,
+                    "handle-unlock",
+                    G_CALLBACK (on_unlock),
+                    NULL); /* user_data */
+		g_signal_connect (lock,
+                    "handle-is-locked",
+                    G_CALLBACK (on_is_locked),
+                    NULL); /* user_data */
+
 		g_signal_connect (flash,
                     "handle-update",
                     G_CALLBACK (on_update),
-                    NULL); /* user_data */
+                    object); /* user_data */
 		g_signal_connect (flash,
                     "handle-update-via-tftp",
                     G_CALLBACK (on_update_via_tftp),
-                    NULL); /* user_data */
+                    object); /* user_data */
 
 		g_signal_connect (flash,
                     "handle-init",
@@ -131,17 +323,59 @@
                     NULL); /* user_data */
 
 		g_dbus_connection_signal_subscribe(connection,
-                                   "org.openbmc.managers.Download",
-                                   "org.openbmc.managers.Download",
-                                   "DownloadComplete",
-                                   "/org/openbmc/managers/Download",
-                                   NULL,
-                                   G_DBUS_SIGNAL_FLAGS_NONE,
+				   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\0",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]);
+		g_dbus_connection_signal_subscribe(connection,
+                                   NULL,
+                                   "org.openbmc.FlashControl",
+                                   "Progress",
+                                   s,
+                                   NULL,
+                                   G_DBUS_SIGNAL_FLAGS_NONE,
+                                   (GDBusSignalCallback) on_flash_progress,
+                                   object,
+                                   NULL );
+
+		g_free (s);
 
  
+		flash_set_filename(flash,"");
 		/* 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);
@@ -174,7 +408,6 @@
   cmdline cmd;
   cmd.argc = argc;
   cmd.argv = argv;
-
   guint id;
   loop = g_main_loop_new (NULL, FALSE);
 
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index ca11b2b..a943b5e 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -174,7 +174,6 @@
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
 	gchar *s;
   	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
-	g_print("%s\n",s);
   	object = object_skeleton_new (s);
   	g_free (s);
 
