diff --git a/task.hosting.inc b/task.hosting.inc
index 7a78576..6ea2720 100644
--- a/task.hosting.inc
+++ b/task.hosting.inc
@@ -151,5 +151,9 @@ function drush_hosting_task_rollback() {
 function drush_hosting_post_hosting_task($task) {
   $task =& drush_get_context('HOSTING_TASK');
 
+  // Invoke hook_post_hosting_task()
+  module_invoke_all('post_hosting_task', $task, drush_get_context('HOSTING_DRUSH_OUTPUT'));
+
+  // Invoke hook_post_hosting_TYPE_task()
   module_invoke_all(sprintf("post_hosting_%s_task", str_replace('-', '_', $task->task_type)), $task, drush_get_context('HOSTING_DRUSH_OUTPUT'));
 }
diff --git a/task/hosting_task.drush.inc b/task/hosting_task.drush.inc
index 64d98e6..28fc10e 100644
--- a/task/hosting_task.drush.inc
+++ b/task/hosting_task.drush.inc
@@ -6,10 +6,25 @@
 
 /**
  * Implements hook_drush_init().
+ *
+ * This function registers a shutdown function to update the task status after drush
+ * completes it's run.
+ *
+ * The call to register_shutdown_function() is needed to ensure we get a status
+ * update no matter what happens with drush.
  */
 function hosting_task_drush_init() {
   // Update a task's status after Drush operations are complete.
-  if (function_exists('_hosting_task_update_status')) {
-    register_shutdown_function('_hosting_task_update_status');
-  }
+  register_shutdown_function('hosting_task_drush_update_status');
 }
+
+/**
+ * Shutdown function to catch any task status.
+ */
+function hosting_task_drush_update_status() {
+  $task = drush_get_context('HOSTING_TASK');
+  if (!empty($task)) {
+    $message = _hosting_parse_error_code(hosting_task_update_status($task));
+    drush_log(dt('Updated task status to "!log"', array('!log' => $message)), 'info');
+  }
+}
\ No newline at end of file
diff --git a/task/hosting_task.module b/task/hosting_task.module
index 8df3f93..a089eba 100644
--- a/task/hosting_task.module
+++ b/task/hosting_task.module
@@ -1301,14 +1301,11 @@ function hosting_task_preprocess_views_view_table(&$vars) {
 /**
  * Set a task's status according to its log.
  *
- * @param (optional) A task object or the revision ID of a task node.
+ * @param A task object or the revision ID of a task node.
  *
  * @return The task's status error code.
  */
-function hosting_task_update_status($task = NULL) {
-  if (is_null($task)) {
-    $task = drush_get_context('HOSTING_TASK');
-  }
+function hosting_task_update_status($task) {
   if (is_numeric($task)) {
     $vid = $task;
   }
@@ -1316,20 +1313,13 @@ function hosting_task_update_status($task = NULL) {
     $vid = $task->vid;
   }
 
-  $update = hosting_task_parse_log($vid);
-  db_query('UPDATE {hosting_task} SET task_status=%d WHERE vid = %d', $update, $vid);
-  return $update;
-}
+  // Get the status of the task by parsing the log.
+  $status = hosting_task_parse_log($vid);
+  db_query('UPDATE {hosting_task} SET task_status=%d WHERE vid = %d', $status, $vid);
 
-/**
- * Post task's status update
- */
-function _hosting_task_update_status() {
-  $task = drush_get_context('HOSTING_TASK');
-  if (!empty($task)) {
-    $message = _hosting_parse_error_code(hosting_task_update_status());
-    drush_log(dt('Updated task status to "!log"', array('!log' => $message)), 'info');
-  }
+  // Invoke hook_hosting_task_update_status()
+  module_invoke_all('hosting_task_update_status', $task, $status);
+  return $status;
 }
 
 /**
