diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index eefe926..a0f48ce 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -857,7 +857,7 @@ function install_tasks($install_state) {
  * Returns a list of tasks that should be displayed to the end user.
  *
  * The output of this function is a list suitable for sending to
- * theme_task_list().
+ * theme_item_list__tasks().
  *
  * @param $install_state
  *   An array of information about the current installation state.
@@ -866,7 +866,8 @@ function install_tasks($install_state) {
  *   A list of tasks, with keys equal to the machine-readable task name and
  *   values equal to the name that should be displayed.
  *
- * @see theme_task_list()
+ * @see template_preprocess_item_list()
+ * @see theme_item_list()
  */
 function install_tasks_to_display($install_state) {
   $displayed_tasks = array();
@@ -947,6 +948,12 @@ function install_display_output($output, $install_state) {
     // Let the theming function know when every step of the installation has
     // been completed.
     $active_task = $install_state['installation_finished'] ? NULL : $install_state['active_task'];
+    drupal_add_region_content('sidebar_first', theme('item_list__tasks', array(
+      'items' => install_tasks_to_display($install_state),
+      'theme_context' => array(
+        'active_task' => $active_task,
+      ),
+    )));
     drupal_add_region_content('sidebar_first', theme('task_list', array('items' => install_tasks_to_display($install_state), 'active' => $active_task, 'variant' => 'install')));
   }
   print theme('install_page', array('content' => $output));
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 4635bb7..e1cfdd3 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -966,6 +966,19 @@ function theme($hook, $variables = array()) {
   // preprocess callbacks.
   $original_hook = $hook;
 
+  // Initialize a predefined theme variable to be used in cpecial preprocess
+  // functions to pass additional data to common theme functions.
+  if (isset($variables['theme_context'])) {
+    $theme_context = $variables['theme_context'];
+  }
+  elseif (isset($variables['#theme']) && isset($variables['#theme_context'])) {
+    $theme_context = $variables['#theme_context'];
+  }
+  else {
+    $theme_context = array();
+  }
+  $theme_context['original_hook'] = $hook;
+
   // If there's no implementation, check for more generic fallbacks. If there's
   // still no implementation, log an error and return an empty string.
   if (!isset($hooks[$hook])) {
@@ -1022,6 +1035,8 @@ function theme($hook, $variables = array()) {
       $variables[$info['render element']]['#render_children'] = TRUE;
     }
   }
+  // Provide the originally passed in theme conetxt data to process functions.
+  $variables['theme_context'] = $theme_context;
 
   // Merge in argument defaults.
   if (!empty($info['variables'])) {
@@ -2284,6 +2299,30 @@ function template_preprocess_item_list(&$variables) {
       }
     }
   }
+
+  // @todo template_preprocess_item_list__tasks() does not work (yet).
+  if ($variables['theme_context']['original_hook'] === 'item_list__tasks') {
+    $variables['type'] = 'ol';
+    $variables['attributes']['class'][] = 'task-list';
+    $t = get_t();
+    $active = isset($variables['theme_context']['active_task']) ? $variables['theme_context']['active_task'] : key($variables['items']);
+    $done = isset($variables['items'][$active]);
+    foreach ($variables['items'] as $key => &$item) {
+      if (!is_array($item)) {
+        $item = array('data' => $item);
+      }
+      if ($key === $active) {
+        $item['class'][] = 'active';
+        $item['data'] .= '<span class="visually-hidden">(' . $t('active') . ')</span>';
+        $done = FALSE;
+      }
+      elseif ($done) {
+        $item['class'][] = 'done';
+        $item['data'] .= '<span class="visually-hidden">(' . $t('done') . ')</span>';
+      }
+    }
+  }
+
 }
 
 /**
@@ -3162,9 +3201,6 @@ function drupal_common_theme() {
       'variables' => array('content' => NULL, 'show_messages' => TRUE),
       'template' => 'install-page',
     ),
-    'task_list' => array(
-      'variables' => array('items' => NULL, 'active' => NULL,  'variant' => NULL),
-    ),
     'authorize_message' => array(
       'variables' => array('message' => NULL, 'success' => TRUE),
     ),
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index de519a2..ff60b05 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -109,51 +109,6 @@ function _theme_load_offline_registry($theme, $base_theme = NULL, $theme_engine
 }
 
 /**
- * Returns HTML for a list of maintenance tasks to perform.
- *
- * @param $variables
- *   An associative array containing:
- *   - items: An associative array of maintenance tasks.
- *   - active: The key for the currently active maintenance task.
- *   - variant: A variant name to be used for a CSS class.
- *
- * @ingroup themeable
- */
-function theme_task_list($variables) {
-  $items = $variables['items'];
-  $active = $variables['active'];
-  if (isset($variables['variant'])) {
-    $class = $variables['variant'] . '-task-list';
-  }
-  else {
-    $class = 'task-list';
-  }
-
-  $done = isset($items[$active]) || $active == NULL;
-  $output = '<h2 class="visually-hidden">Installation tasks</h2>';
-  $output .= '<ol class="' . $class . '">';
-
-  foreach ($items as $k => $item) {
-    if ($active == $k) {
-      $class = 'active';
-      $status = '(' . t('active') . ')';
-      $done = FALSE;
-    }
-    else {
-      $class = $done ? 'done' : '';
-      $status = $done ? '(' . t('done') . ')' : '';
-    }
-    $output .= '<li';
-    $output .= ($class ? ' class="' . $class . '"' : '') . '>';
-    $output .= $item;
-    $output .= ($status ? '<span class="visually-hidden"> ' . $status . '</span>' : '');
-    $output .= '</li>';
-  }
-  $output .= '</ol>';
-  return $output;
-}
-
-/**
  * Returns HTML for a results report of an operation run by authorize.php.
  *
  * @param $variables
diff --git a/core/update.php b/core/update.php
index b74e226..d36d9ce 100644
--- a/core/update.php
+++ b/core/update.php
@@ -371,7 +371,12 @@ function update_task_list($active = NULL) {
     'finished' => 'Review log',
   );
 
-  drupal_add_region_content('sidebar_first', theme('task_list', array('items' => $tasks, 'active' => $active)));
+  drupal_add_region_content('sidebar_first', theme('item_list__tasks', array(
+    'items' => $tasks,
+    'theme_context' => array(
+      'active_task' => $active,
+    ),
+  )));
 }
 
 /**
