diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index ba0a321..286c9cf 100755
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -107,7 +107,7 @@
 				'name' : 'HostWatchdog_0',
 				'properties' : { 
 					'org.openbmc.Watchdog' : {
-						'poll_interval': 3000,
+						'poll_interval': 30000,
 					}
 				}
 			}
@@ -152,13 +152,13 @@
 		'heartbeat' : 'no',
 		'instances' : [	{ 'name' : 'Dummy' } ]
 	}
-SYSTEM_CONFIG['org.openbmc.flash.Bios'] = {
+SYSTEM_CONFIG['org.openbmc.control.Flash'] = {
 		'system_state' : 'BMC_STARTING',
 		'start_process' : True,
 		'monitor_process' : True,
 		'process_name' : 'flash_bios.exe',
 		'heartbeat' : 'no',
-		'instances' : [	{ 'name' : 'Bios_0' } ]
+		'instances' : [	{ 'name' : 'dummy' } ]
 	}
 
 SYSTEM_CONFIG['org.openbmc.manager.Download'] = {
diff --git a/bin/console b/bin/console
new file mode 100755
index 0000000..d3fa8bb
--- /dev/null
+++ b/bin/console
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+screen /dev/ttyS3 115200
+
diff --git a/bin/download_manager.py b/bin/download_manager.py
index 06e8773..35859a5 100755
--- a/bin/download_manager.py
+++ b/bin/download_manager.py
@@ -21,7 +21,7 @@
 	def __init__(self,bus,name):
 		dbus.service.Object.__init__(self,bus,name)
 		bus.add_signal_receiver(self.DownloadHandler, 
-			dbus_interface = "org.openbmc.Flash", signal_name = "Download")
+			dbus_interface = "org.openbmc.Flash", signal_name = "Download", path_keyword = "path")
 
 	@dbus.service.signal(DBUS_NAME,signature='ss')
 	def DownloadComplete(self,outfile,filename):
@@ -32,19 +32,22 @@
 	def DownloadError(self,filename):
 		pass
 
-	def DownloadHandler(self,url,filename):
+	def DownloadHandler(self,url,filename,path = None):
 		try:
 			filename = str(filename)
 			client = tftpy.TftpClient(url, TFTP_PORT)
 			print "Downloading: "+filename+" from "+url
 			outfile = System.FLASH_DOWNLOAD_PATH+"/"+filename
 			client.download(filename,outfile)
-			self.DownloadComplete(outfile,filename)
+			obj = bus.get_object("org.openbmc.control.Flash",path)
+			intf = dbus.Interface(obj,"org.openbmc.Flash")
+			intf.update(outfile)
 					
 		except Exception as e:
 			print "ERROR DownloadManager: "+str(e)
-			self.DownloadError(filename)
-	
+			obj = bus.get_object("org.openbmc.control.Flash",path)
+			intf = dbus.Interface(obj,"org.openbmc.Flash")
+			intf.error("Download Error: "+filename)
 
 
 if __name__ == '__main__':
diff --git a/bin/gpio2num b/bin/gpio2num
new file mode 100755
index 0000000..a176ec5
--- /dev/null
+++ b/bin/gpio2num
@@ -0,0 +1,18 @@
+#! /usr/bin/python
+
+import sys
+
+if (len(sys.argv) <2):
+	print "Usage: gpio2num [gpio1] [gpio2] ... [gpion]"
+	print "\tExample: gpio2num A2 B4"
+	exit(0)
+
+sys.argv.pop(0)
+for name in sys.argv:
+	c = name[0:1]
+	num = name[1:]
+	a = ord(c)-65
+	base = 480 - (int(a/4) * 32)
+	offset = a%4*8 + int(num)
+	gpio_num = base+offset
+	print name+" = " + str(gpio_num)
diff --git a/interfaces/openbmc_intf.c b/interfaces/openbmc_intf.c
index f1e0c95..b7d9501 100644
--- a/interfaces/openbmc_intf.c
+++ b/interfaces/openbmc_intf.c
@@ -19003,6 +19003,49 @@
   FALSE
 };
 
+static const _ExtendedGDBusArgInfo _flash_method_info_error_IN_ARG_message =
+{
+  {
+    -1,
+    (gchar *) "message",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _flash_method_info_error_IN_ARG_pointers[] =
+{
+  &_flash_method_info_error_IN_ARG_message,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _flash_method_info_error =
+{
+  {
+    -1,
+    (gchar *) "error",
+    (GDBusArgInfo **) &_flash_method_info_error_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-error",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _flash_method_info_done =
+{
+  {
+    -1,
+    (gchar *) "done",
+    NULL,
+    NULL,
+    NULL
+  },
+  "handle-done",
+  FALSE
+};
+
 static const _ExtendedGDBusArgInfo _flash_method_info_update_via_tftp_IN_ARG_url =
 {
   {
@@ -19061,6 +19104,8 @@
 static const _ExtendedGDBusMethodInfo * const _flash_method_info_pointers[] =
 {
   &_flash_method_info_update,
+  &_flash_method_info_error,
+  &_flash_method_info_done,
   &_flash_method_info_update_via_tftp,
   &_flash_method_info_init,
   NULL
@@ -19176,12 +19221,26 @@
   FALSE
 };
 
+static const _ExtendedGDBusPropertyInfo _flash_property_info_status =
+{
+  {
+    -1,
+    (gchar *) "status",
+    (gchar *) "s",
+    G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+    NULL
+  },
+  "status",
+  FALSE
+};
+
 static const _ExtendedGDBusPropertyInfo * const _flash_property_info_pointers[] =
 {
   &_flash_property_info_filename,
   &_flash_property_info_flasher_path,
   &_flash_property_info_flasher_name,
   &_flash_property_info_flasher_instance,
+  &_flash_property_info_status,
   NULL
 };
 
@@ -19229,6 +19288,7 @@
   g_object_class_override_property (klass, property_id_begin++, "flasher-path");
   g_object_class_override_property (klass, property_id_begin++, "flasher-name");
   g_object_class_override_property (klass, property_id_begin++, "flasher-instance");
+  g_object_class_override_property (klass, property_id_begin++, "status");
   return property_id_begin - 1;
 }
 
@@ -19243,6 +19303,8 @@
 /**
  * FlashIface:
  * @parent_iface: The parent interface.
+ * @handle_done: Handler for the #Flash::handle-done signal.
+ * @handle_error: Handler for the #Flash::handle-error signal.
  * @handle_init: Handler for the #Flash::handle-init signal.
  * @handle_update: Handler for the #Flash::handle-update signal.
  * @handle_update_via_tftp: Handler for the #Flash::handle-update-via-tftp signal.
@@ -19250,6 +19312,7 @@
  * @get_flasher_instance: Getter for the #Flash:flasher-instance property.
  * @get_flasher_name: Getter for the #Flash:flasher-name property.
  * @get_flasher_path: Getter for the #Flash:flasher-path property.
+ * @get_status: Getter for the #Flash:status property.
  * @download: Handler for the #Flash::download signal.
  * @updated: Handler for the #Flash::updated signal.
  *
@@ -19287,6 +19350,51 @@
     G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
 
   /**
+   * Flash::handle-error:
+   * @object: A #Flash.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_message: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call flash_complete_error() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-error",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (FlashIface, handle_error),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+  /**
+   * Flash::handle-done:
+   * @object: A #Flash.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call flash_complete_done() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-done",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (FlashIface, handle_done),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
    * Flash::handle-update-via-tftp:
    * @object: A #Flash.
    * @invocation: A #GDBusMethodInvocation.
@@ -19408,6 +19516,15 @@
    */
   g_object_interface_install_property (iface,
     g_param_spec_string ("flasher-instance", "flasher_instance", "flasher_instance", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * Flash:status:
+   *
+   * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link>.
+   *
+   * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+   */
+  g_object_interface_install_property (iface,
+    g_param_spec_string ("status", "status", "status", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 /**
@@ -19615,6 +19732,57 @@
 }
 
 /**
+ * flash_get_status: (skip)
+ * @object: A #Flash.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use flash_dup_status() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
+ */
+const gchar *
+flash_get_status (Flash *object)
+{
+  return FLASH_GET_IFACE (object)->get_status (object);
+}
+
+/**
+ * flash_dup_status: (skip)
+ * @object: A #Flash.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free().
+ */
+gchar *
+flash_dup_status (Flash *object)
+{
+  gchar *value;
+  g_object_get (G_OBJECT (object), "status", &value, NULL);
+  return value;
+}
+
+/**
+ * flash_set_status: (skip)
+ * @object: A #Flash.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+flash_set_status (Flash *object, const gchar *value)
+{
+  g_object_set (G_OBJECT (object), "status", value, NULL);
+}
+
+/**
  * flash_emit_updated:
  * @object: A #Flash.
  *
@@ -19743,6 +19911,196 @@
 }
 
 /**
+ * flash_call_error:
+ * @proxy: A #FlashProxy.
+ * @arg_message: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call flash_call_error_finish() to get the result of the operation.
+ *
+ * See flash_call_error_sync() for the synchronous, blocking version of this method.
+ */
+void
+flash_call_error (
+    Flash *proxy,
+    const gchar *arg_message,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "error",
+    g_variant_new ("(s)",
+                   arg_message),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * flash_call_error_finish:
+ * @proxy: A #FlashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_error().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with flash_call_error().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_error_finish (
+    Flash *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * flash_call_error_sync:
+ * @proxy: A #FlashProxy.
+ * @arg_message: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See flash_call_error() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_error_sync (
+    Flash *proxy,
+    const gchar *arg_message,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "error",
+    g_variant_new ("(s)",
+                   arg_message),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * flash_call_done:
+ * @proxy: A #FlashProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call flash_call_done_finish() to get the result of the operation.
+ *
+ * See flash_call_done_sync() for the synchronous, blocking version of this method.
+ */
+void
+flash_call_done (
+    Flash *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "done",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * flash_call_done_finish:
+ * @proxy: A #FlashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_done().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with flash_call_done().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_done_finish (
+    Flash *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * flash_call_done_sync:
+ * @proxy: A #FlashProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See flash_call_done() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_done_sync (
+    Flash *proxy,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "done",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
  * flash_call_update_via_tftp:
  * @proxy: A #FlashProxy.
  * @arg_url: Argument to pass with the method invocation.
@@ -19957,6 +20315,42 @@
 }
 
 /**
+ * flash_complete_error:
+ * @object: A #Flash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+flash_complete_error (
+    Flash *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * flash_complete_done:
+ * @object: A #Flash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+flash_complete_done (
+    Flash *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
  * flash_complete_update_via_tftp:
  * @object: A #Flash.
  * @invocation: (transfer full): A #GDBusMethodInvocation.
@@ -20040,7 +20434,7 @@
 {
   const _ExtendedGDBusPropertyInfo *info;
   GVariant *variant;
-  g_assert (prop_id != 0 && prop_id - 1 < 4);
+  g_assert (prop_id != 0 && prop_id - 1 < 5);
   info = _flash_property_info_pointers[prop_id - 1];
   variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
   if (info->use_gvariant)
@@ -20087,7 +20481,7 @@
 {
   const _ExtendedGDBusPropertyInfo *info;
   GVariant *variant;
-  g_assert (prop_id != 0 && prop_id - 1 < 4);
+  g_assert (prop_id != 0 && prop_id - 1 < 5);
   info = _flash_property_info_pointers[prop_id - 1];
   variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
   g_dbus_proxy_call (G_DBUS_PROXY (object),
@@ -20229,6 +20623,21 @@
   return value;
 }
 
+static const gchar *
+flash_proxy_get_status (Flash *object)
+{
+  FlashProxy *proxy = FLASH_PROXY (object);
+  GVariant *variant;
+  const gchar *value = NULL;
+  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "status");
+  if (variant != NULL)
+    {
+      value = g_variant_get_string (variant, NULL);
+      g_variant_unref (variant);
+    }
+  return value;
+}
+
 static void
 flash_proxy_init (FlashProxy *proxy)
 {
@@ -20270,6 +20679,7 @@
   iface->get_flasher_path = flash_proxy_get_flasher_path;
   iface->get_flasher_name = flash_proxy_get_flasher_name;
   iface->get_flasher_instance = flash_proxy_get_flasher_instance;
+  iface->get_status = flash_proxy_get_status;
 }
 
 /**
@@ -20744,7 +21154,7 @@
 {
   FlashSkeleton *skeleton = FLASH_SKELETON (object);
   guint n;
-  for (n = 0; n < 4; n++)
+  for (n = 0; n < 5; n++)
     g_value_unset (&skeleton->priv->properties[n]);
   g_free (skeleton->priv->properties);
   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
@@ -20762,7 +21172,7 @@
   GParamSpec   *pspec G_GNUC_UNUSED)
 {
   FlashSkeleton *skeleton = FLASH_SKELETON (object);
-  g_assert (prop_id != 0 && prop_id - 1 < 4);
+  g_assert (prop_id != 0 && prop_id - 1 < 5);
   g_mutex_lock (&skeleton->priv->lock);
   g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
   g_mutex_unlock (&skeleton->priv->lock);
@@ -20879,7 +21289,7 @@
   GParamSpec   *pspec)
 {
   FlashSkeleton *skeleton = FLASH_SKELETON (object);
-  g_assert (prop_id != 0 && prop_id - 1 < 4);
+  g_assert (prop_id != 0 && prop_id - 1 < 5);
   g_mutex_lock (&skeleton->priv->lock);
   g_object_freeze_notify (object);
   if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
@@ -20904,11 +21314,12 @@
 
   g_mutex_init (&skeleton->priv->lock);
   skeleton->priv->context = g_main_context_ref_thread_default ();
-  skeleton->priv->properties = g_new0 (GValue, 4);
+  skeleton->priv->properties = g_new0 (GValue, 5);
   g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
   g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING);
   g_value_init (&skeleton->priv->properties[2], G_TYPE_STRING);
   g_value_init (&skeleton->priv->properties[3], G_TYPE_STRING);
+  g_value_init (&skeleton->priv->properties[4], G_TYPE_STRING);
 }
 
 static const gchar *
@@ -20955,6 +21366,17 @@
   return value;
 }
 
+static const gchar *
+flash_skeleton_get_status (Flash *object)
+{
+  FlashSkeleton *skeleton = FLASH_SKELETON (object);
+  const gchar *value;
+  g_mutex_lock (&skeleton->priv->lock);
+  value = g_value_get_string (&(skeleton->priv->properties[4]));
+  g_mutex_unlock (&skeleton->priv->lock);
+  return value;
+}
+
 static void
 flash_skeleton_class_init (FlashSkeletonClass *klass)
 {
@@ -20990,6 +21412,7 @@
   iface->get_flasher_path = flash_skeleton_get_flasher_path;
   iface->get_flasher_name = flash_skeleton_get_flasher_name;
   iface->get_flasher_instance = flash_skeleton_get_flasher_instance;
+  iface->get_status = flash_skeleton_get_status;
 }
 
 /**
diff --git a/interfaces/openbmc_intf.h b/interfaces/openbmc_intf.h
index ad4ea09..af80c89 100644
--- a/interfaces/openbmc_intf.h
+++ b/interfaces/openbmc_intf.h
@@ -2570,6 +2570,15 @@
 
 
 
+  gboolean (*handle_done) (
+    Flash *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_error) (
+    Flash *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *arg_message);
+
   gboolean (*handle_init) (
     Flash *object,
     GDBusMethodInvocation *invocation);
@@ -2593,6 +2602,8 @@
 
   const gchar * (*get_flasher_path) (Flash *object);
 
+  const gchar * (*get_status) (Flash *object);
+
   void (*download) (
     Flash *object,
     const gchar *arg_url,
@@ -2614,6 +2625,14 @@
     Flash *object,
     GDBusMethodInvocation *invocation);
 
+void flash_complete_error (
+    Flash *object,
+    GDBusMethodInvocation *invocation);
+
+void flash_complete_done (
+    Flash *object,
+    GDBusMethodInvocation *invocation);
+
 void flash_complete_update_via_tftp (
     Flash *object,
     GDBusMethodInvocation *invocation);
@@ -2654,6 +2673,40 @@
     GCancellable *cancellable,
     GError **error);
 
+void flash_call_error (
+    Flash *proxy,
+    const gchar *arg_message,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean flash_call_error_finish (
+    Flash *proxy,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean flash_call_error_sync (
+    Flash *proxy,
+    const gchar *arg_message,
+    GCancellable *cancellable,
+    GError **error);
+
+void flash_call_done (
+    Flash *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean flash_call_done_finish (
+    Flash *proxy,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean flash_call_done_sync (
+    Flash *proxy,
+    GCancellable *cancellable,
+    GError **error);
+
 void flash_call_update_via_tftp (
     Flash *proxy,
     const gchar *arg_url,
@@ -2709,6 +2762,10 @@
 gchar *flash_dup_flasher_instance (Flash *object);
 void flash_set_flasher_instance (Flash *object, const gchar *value);
 
+const gchar *flash_get_status (Flash *object);
+gchar *flash_dup_status (Flash *object);
+void flash_set_status (Flash *object, const gchar *value);
+
 
 /* ---- */
 
diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
index caba185..2aedd04 100644
--- a/objects/control_bmc_obj.c
+++ b/objects/control_bmc_obj.c
@@ -20,7 +20,6 @@
 #define LPC_HICR6		0x80
 #define LPC_HICR7		0x88
 #define LPC_HICR8		0x8c
-
 #define SPI_BASE		(off_t)0x1e630000
 #define SCU_BASE                (off_t)0x1e780000
 #define UART_BASE               (off_t)0x1e783000
@@ -73,7 +72,7 @@
 	devmem(bmcreg+0x04,0x00000000);  //Set Baud rate divisor -> 13 (Baud 115200)
 	devmem(bmcreg+0x08,0x000000c1);  //Disable Parity, 1 stop bit, 8 bits
 	bmcreg = memmap(mem_fd,COM_BASE);
-	devmem(bmcreg+0x9C,0x00000000);  //Set routing UART1 -> COM 1
+	devmem(bmcreg+0x9C,0x08060000);  //Set UART routing
 
 	bmcreg = memmap(mem_fd,SCU_BASE);
 	devmem(bmcreg+0x00,0x13008CE7);
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);
 }
diff --git a/objects/flasher_obj.c b/objects/flasher_obj.c
index e951d63..53d62fd 100644
--- a/objects/flasher_obj.c
+++ b/objects/flasher_obj.c
@@ -51,6 +51,8 @@
 static const char		*fl_name;
 static int32_t			ffs_index = -1;
 
+static uint8_t FLASH_OK = 0;
+static uint8_t FLASH_ERROR = 1;
 
 static int erase_chip(void)
 {
@@ -69,6 +71,39 @@
 	return (rc);
 }
 
+void flash_message(GDBusConnection* connection,char* obj_path,char* method, char* error_msg)
+{
+	GDBusProxy *proxy;
+ 	GError *error;
+	GVariant *parm = NULL;
+	GVariant *result;
+	error = NULL;
+	proxy = g_dbus_proxy_new_sync (connection,
+                             G_DBUS_PROXY_FLAGS_NONE,
+                             NULL,                      /* GDBusInterfaceInfo* */
+                             "org.openbmc.control.Flash", /* name */
+                             obj_path, /* object path */
+                             "org.openbmc.Flash",        /* interface name */
+                             NULL,                      /* GCancellable */
+                             &error);
+	g_assert_no_error (error);
+
+	error = NULL;
+	if (strcmp(method,"error")==0) {
+		parm = g_variant_new("(s)",error_msg);
+	}
+	result = g_dbus_proxy_call_sync (proxy,
+                                   method,
+				   parm,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   NULL,
+                                   &error);
+
+	g_assert_no_error (error);
+}
+
+
 static int program_file(FlashControl* flash_control, const char *file, uint32_t start, uint32_t size)
 {
 	int fd, rc;
@@ -175,7 +210,7 @@
 static void flash_access_setup_bmc(bool use_lpc, bool need_write)
 {
 	int rc;
-
+	printf("Setting up BMC flash\n");
 	/* Open and map devices */
 	open_devs(use_lpc, true);
 
@@ -220,6 +255,7 @@
 static void flash_access_setup_pnor(bool use_lpc, bool use_sfc, bool need_write)
 {
 	int rc;
+	printf("Setting up BIOS flash\n");
 
 	/* Open and map devices */
 	open_devs(use_lpc, false);
@@ -260,13 +296,13 @@
 	atexit(flash_access_cleanup_pnor);
 }
 
-int flash(FlashControl* flash_control,bool bmc_flash, char* write_file)
+uint8_t flash(FlashControl* flash_control,bool bmc_flash, char* write_file, char* obj_path)
 {
 	bool has_sfc = false, has_ast = false, use_lpc = true;
 	bool erase = true, program = true;
 	uint32_t address = 0;
 	int rc;
-
+	printf("flasher: %s, BMC = %d\n",write_file,bmc_flash);
 #ifdef __arm__
 	/* Check platform */
 	check_platform(&has_sfc, &has_ast);
@@ -275,15 +311,13 @@
 	if (bmc_flash) {
 		if (!has_ast) {
 			fprintf(stderr, "No BMC on this platform\n");
-			flash_control_emit_error(flash_control,write_file);
-			return;
+			return FLASH_ERROR;
 		}
 		flash_access_setup_bmc(use_lpc, erase || program);
 	} else {
 		if (!has_ast && !has_sfc) {
 			fprintf(stderr, "No BMC nor SFC on this platform\n");
-			flash_control_emit_error(flash_control,write_file);
-			return;
+			return FLASH_ERROR;
 		}
 		flash_access_setup_pnor(use_lpc, has_sfc, erase || program);
 	}
@@ -292,8 +326,7 @@
 			    &fl_total_size, &fl_erase_granule);
 	if (rc) {
 		fprintf(stderr, "Error %d getting flash info\n", rc);
-		flash_control_emit_error(flash_control,write_file);
-		return;
+		return FLASH_ERROR;
 	}
 #endif
 	if (strcmp(write_file,"")!=0)
@@ -302,32 +335,27 @@
 		struct stat stbuf;
 		if (stat(write_file, &stbuf)) {
 			perror("Failed to get file size");
-			flash_control_emit_error(flash_control,write_file);
-			return;
+			return FLASH_ERROR;
 		}
 		uint32_t write_size = stbuf.st_size;
 #ifdef __arm__
 		rc = erase_chip();
 		if (rc) {
-			flash_control_emit_error(flash_control,write_file);
-			return;
+			return FLASH_ERROR;
 		}
 		rc = program_file(flash_control, write_file, address, write_size);
 		if (rc) {
-			flash_control_emit_error(flash_control,write_file);
-			return;
+			return FLASH_ERROR;
 		}
 #endif
 	
-		flash_control_emit_done(flash_control,write_file);
-		//flash_control_emit_error(flash_control,write_file);
 		printf("Flash done\n");
 	}
 	else 
 	{
-		flash_control_emit_done(flash_control,write_file);
 		printf("Flash tuned\n");
 	}
+	return FLASH_OK;
 }
 
 static void
@@ -337,12 +365,12 @@
 {
 
 	cmdline *cmd = user_data;
-	if (cmd->argc < 2)
+	if (cmd->argc < 4)
 	{
-		g_print("No objects created.  Put object name and filename on command line\n");
+		g_print("flasher [flash name] [filename] [source object]\n");
 		return;
 	}
-	printf("Starting flasher\n");	
+	printf("Starting flasher: %s,%s,%s,\n",cmd->argv[1],cmd->argv[2],cmd->argv[3]);	
 	ObjectSkeleton *object;
   	manager = g_dbus_object_manager_server_new (dbus_object_path);
 	gchar *s;
@@ -361,7 +389,16 @@
 
 	/* Export all objects */
 	g_dbus_object_manager_server_set_connection (manager, connection);
-	flash(flash_control,false,cmd->argv[2]);
+	bool bmc_flash = false;
+	if (strcmp(cmd->argv[1],"bmc")==0) {
+		bmc_flash = true;
+	}
+	int rc = flash(flash_control,bmc_flash,cmd->argv[2],cmd->argv[3]);
+	if (rc == FLASH_ERROR) {
+		flash_message(connection,cmd->argv[3],"error","Flash Error");
+	} else {
+		flash_message(connection,cmd->argv[3],"done","");
+	}
 
 	//Object exits when done flashing	
 	g_main_loop_quit(cmd->loop);
diff --git a/xml/openbmc_intf.xml b/xml/openbmc_intf.xml
index 2ba627b..4a2398f 100644
--- a/xml/openbmc_intf.xml
+++ b/xml/openbmc_intf.xml
@@ -144,6 +144,11 @@
 		<method name="update">
 			<arg name="filename" type="s" direction="in"/>
 		</method>
+		<method name="error">
+			<arg name="message" type="s" direction="in"/>
+		</method>
+		<method name="done"/>
+
 		<method name="updateViaTftp">
 			<arg name="url" type="s" direction="in"/>
 			<arg name="filename" type="s" direction="in"/>
@@ -158,6 +163,7 @@
 		<property name="flasher_path" type="s" access="read"/>
 		<property name="flasher_name" type="s" access="read"/>
 		<property name="flasher_instance" type="s" access="read"/>
+		<property name="status" type="s" access="read"/>
 	</interface>
 	<interface name="org.openbmc.FlashControl">
 		<method name="flash">
