diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 2a5471b..cb3f70a 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -8,6 +8,26 @@
 
 static GDBusObjectManagerServer *manager = NULL;
 
+void update(Flash *flash, const gchar* write_file)
+{
+	printf("Flashing: %s\n",write_file);
+	// get size from file
+	struct stat stbuf;
+	uint32_t address = 0, read_size = 0, write_size = 0;
+
+#ifdef __arm__
+	if (stat(write_file, &stbuf))
+ 	{
+ 		printf("ERROR:  Invalid flash file: %s\n",write_file);
+	}
+	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);
+}
+
 static gboolean
 on_init (Flash          *f,
                 GDBusMethodInvocation  *invocation,
@@ -24,32 +44,51 @@
 }
 
 static gboolean
-on_update (Flash          *f,
+on_update_via_tftp (Flash          *flash,
+                GDBusMethodInvocation  *invocation,
+                gchar*                  url,
+                gchar*                  write_file,
+                gpointer                user_data)
+{
+	printf("Flashing BIOS from TFTP: %s,%s\n",url,write_file);
+	flash_emit_download(flash,url,write_file);
+	flash_complete_update_via_tftp(flash,invocation);
+	return TRUE;
+}
+
+static gboolean
+on_update (Flash          *flash,
                 GDBusMethodInvocation  *invocation,
                 gchar*                  write_file,
                 gpointer                user_data)
 {
 	printf("Flashing BIOS from file\n");
-	flash_complete_update(f,invocation);
-	// get size from file
-	struct stat stbuf;
-	uint32_t address = 0, read_size = 0, write_size = 0;
-
-#ifdef __arm__
-	if (stat(write_file, &stbuf))
- 	{
- 		printf("ERROR:  Invalid flash file: %s\n",write_file);
-	}
-	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(f);
+	flash_complete_update(flash,invocation);
+	update(flash,write_file);
+  	flash_emit_updated(flash);
 	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);
+	
+	GVariantIter *iter = g_variant_iter_new(parameters);
+	GVariant* value = g_variant_iter_next_value(iter);
+	const gchar* write_file;
+	gsize size;
+	write_file = g_variant_get_string(value,&size);
+	update(flash,write_file);
+	
+}
+
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -81,12 +120,27 @@
                     "handle-update",
                     G_CALLBACK (on_update),
                     NULL); /* user_data */
- 
+		g_signal_connect (flash,
+                    "handle-update-via-tftp",
+                    G_CALLBACK (on_update_via_tftp),
+                    NULL); /* user_data */
+
 		g_signal_connect (flash,
                     "handle-init",
                     G_CALLBACK (on_init),
                     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,
+                                   (GDBusSignalCallback) on_download_complete,
+                                   object,
+                                   NULL );
+
  
 		/* Export the object (@manager takes its own reference to @object) */
 		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
