diff --git a/core/includes/common.inc b/core/includes/common.inc
index 46caf3e..c682ac4 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -7794,9 +7794,10 @@ function archiver_get_archiver($file) {
  * file system, for example to update modules that have newer releases, or to
  * install a new theme.
  *
- * @return
+ * @return array
  *   The Drupal Updater class registry.
  *
+ * @see Drupal\Core\Updater\Updater
  * @see hook_updater_info()
  * @see hook_updater_info_alter()
  */
diff --git a/core/lib/Drupal/Core/Updater/Module.php b/core/lib/Drupal/Core/Updater/Module.php
new file mode 100644
index 0000000..eea11a6
--- /dev/null
+++ b/core/lib/Drupal/Core/Updater/Module.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Updater\Module.
+ */
+
+namespace Drupal\Core\Updater;
+
+/**
+ * Defines a class for updating modules using
+ * Drupal\Core\FileTransfer\FileTransfer classes via authorize.php.
+ */
+class Module extends Updater implements UpdaterInterface {
+
+  /**
+   * Returns the directory where a module should be installed.
+   *
+   * If the module is already installed, drupal_get_path() will return
+   * a valid path and we should install it there (although we need to use an
+   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
+   * module, we always want it to go into sites/all/modules, since that's
+   * where all the documentation recommends users install their modules, and
+   * there's no way that can conflict on a multi-site installation, since
+   * the Update manager won't let you install a new module if it's already
+   * found on your system, and if there was a copy in sites/all, we'd see it.
+   *
+   * @return string
+   *   A directory path.
+   */
+  public function getInstallDirectory() {
+    if ($relative_path = drupal_get_path('module', $this->name)) {
+      $relative_path = dirname($relative_path);
+    }
+    else {
+      $relative_path = 'sites/all/modules';
+    }
+    return DRUPAL_ROOT . '/' . $relative_path;
+  }
+
+  /**
+   * Implements Drupal\Core\Updater\UpdaterInterface::isInstalled().
+   */
+  public function isInstalled() {
+    return (bool) drupal_get_path('module', $this->name);
+  }
+
+  /**
+   * Implements Drupal\Core\Updater\UpdaterInterface::canUpdateDirectory().
+   */
+  public static function canUpdateDirectory($directory) {
+    if (file_scan_directory($directory, '/.*\.module$/')) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * Determines whether this class can update the specified project.
+   *
+   * @param string $project_name
+   *   The project to check.
+   *
+   * @return bool
+   */
+  public static function canUpdate($project_name) {
+    return (bool) drupal_get_path('module', $project_name);
+  }
+
+  /**
+   * Returns available database schema updates once a new version is installed.
+   *
+   * @return array
+   */
+  public function getSchemaUpdates() {
+    require_once DRUPAL_ROOT . '/core/includes/install.inc';
+    require_once DRUPAL_ROOT . '/core/includes/update.inc';
+
+    if (!self::canUpdate($this->name)) {
+      return array();
+    }
+    module_load_include('install', $this->name);
+
+    if (!$updates = drupal_get_schema_versions($this->name)) {
+      return array();
+    }
+    $modules_with_updates = update_get_update_list();
+    if ($updates = $modules_with_updates[$this->name]) {
+      if ($updates['start']) {
+        return $updates['pending'];
+      }
+    }
+    return array();
+  }
+
+  /**
+   * Overrides Drupal\Core\Updater\Updater::postInstallTasks().
+   */
+  public function postInstallTasks() {
+    return array(
+      l(t('Enable newly added modules'), 'admin/modules'),
+      l(t('Administration pages'), 'admin'),
+    );
+  }
+
+  /**
+   * Overrides Drupal\Core\Updater\Updater::postUpdateTasks().
+   */
+  public function postUpdateTasks() {
+    // We don't want to check for DB updates here, we do that once for all
+    // updated modules on the landing page.
+  }
+}
diff --git a/core/lib/Drupal/Core/Updater/Theme.php b/core/lib/Drupal/Core/Updater/Theme.php
new file mode 100644
index 0000000..697fae8
--- /dev/null
+++ b/core/lib/Drupal/Core/Updater/Theme.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Updater\Theme.
+ */
+
+namespace Drupal\Core\Updater;
+
+/**
+ * Defines a class for updating themes using
+ * Drupal\Core\FileTransfer\FileTransfer classes via authorize.php.
+ */
+class Theme extends Updater implements UpdaterInterface {
+
+  /**
+   * Returns the directory where a theme should be installed.
+   *
+   * If the theme is already installed, drupal_get_path() will return
+   * a valid path and we should install it there (although we need to use an
+   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
+   * theme, we always want it to go into sites/all/themes, since that's
+   * where all the documentation recommends users install their themes, and
+   * there's no way that can conflict on a multi-site installation, since
+   * the Update manager won't let you install a new theme if it's already
+   * found on your system, and if there was a copy in sites/all, we'd see it.
+   *
+   * @return string
+   *   A directory path.
+   */
+  public function getInstallDirectory() {
+    if ($relative_path = drupal_get_path('theme', $this->name)) {
+      $relative_path = dirname($relative_path);
+    }
+    else {
+      $relative_path = 'sites/all/themes';
+    }
+    return DRUPAL_ROOT . '/' . $relative_path;
+  }
+
+  /**
+   * Implements Drupal\Core\Updater\UpdaterInterface::isInstalled().
+   */
+  public function isInstalled() {
+    return (bool) drupal_get_path('theme', $this->name);
+  }
+
+  /**
+   * Implements Drupal\Core\Updater\UpdaterInterface::canUpdateDirectory().
+   */
+  static function canUpdateDirectory($directory) {
+    // This is a lousy test, but don't know how else to confirm it is a theme.
+    if (file_scan_directory($directory, '/.*\.module$/')) {
+      return FALSE;
+    }
+    return TRUE;
+  }
+
+  /**
+   * Determines whether this class can update the specified project.
+   *
+   * @param string $project_name
+   *   The project to check.
+   *
+   * @return bool
+   */
+  public static function canUpdate($project_name) {
+    return (bool) drupal_get_path('theme', $project_name);
+  }
+
+  /**
+   * Overrides Drupal\Core\Updater\Updater::postInstall().
+   */
+  public function postInstall() {
+    // Update the system table.
+    clearstatcache();
+    system_rebuild_theme_data();
+  }
+
+  /**
+   * Overrides Drupal\Core\Updater\Updater::postInstallTasks().
+   */
+  public function postInstallTasks() {
+    return array(
+      l(t('Enable newly added themes'), 'admin/appearance'),
+      l(t('Administration pages'), 'admin'),
+    );
+  }
+}
diff --git a/core/includes/updater.inc b/core/lib/Drupal/Core/Updater/Updater.php
similarity index 74%
rename from core/includes/updater.inc
rename to core/lib/Drupal/Core/Updater/Updater.php
index d4f99e9..b7e5915 100644
--- a/core/includes/updater.inc
+++ b/core/lib/Drupal/Core/Updater/Updater.php
@@ -2,78 +2,29 @@
 
 /**
  * @file
- * Classes used for updating various files in the Drupal webroot. These
- * classes use a FileTransfer object to actually perform the operations.
- * Normally, the FileTransfer is provided when the site owner is redirected to
- * authorize.php as part of a multistep process.
+ * Definition of Drupal\Core\Updater\Updater.
  */
 
+namespace Drupal\Core\Updater;
+
 /**
- * Interface for a class which can update a Drupal project.
- *
- * An Updater currently serves the following purposes:
- *   - It can take a given directory, and determine if it can operate on it.
- *   - It can move the contents of that directory into the appropriate place
- *     on the system using FileTransfer classes.
- *   - It can return a list of "next steps" after an update or install.
- *   - In the future, it will most likely perform some of those steps as well.
+ * Defines the base class for Updaters used in Drupal.
  */
-interface DrupalUpdaterInterface {
-
-  /**
-   * Checks if the project is installed.
-   *
-   * @return bool
-   */
-  public function isInstalled();
+class Updater {
 
   /**
-   * Returns the system name of the project.
+   * Directory to install from.
    *
-   * @param string $directory
-   *  A directory containing a project.
-   */
-  public static function getProjectName($directory);
-
-  /**
-   * @return string
-   *   An absolute path to the default install location.
+   * @var string
    */
-  public function getInstallDirectory();
+  public $source;
 
   /**
-   * Determine if the Updater can handle the project provided in $directory.
+   * Constructs a new updater.
    *
-   * @todo: Provide something more rational here, like a project spec file.
-   *
-   * @param string $directory
-   *
-   * @return bool
-   *   TRUE if the project is installed, FALSE if not.
-   */
-  public static function canUpdateDirectory($directory);
-
-  /**
-   * Actions to run after an install has occurred.
-   */
-  public function postInstall();
-
-  /**
-   * Actions to run after an update has occurred.
-   */
-  public function postUpdate();
-}
-
-/**
- * Base class for Updaters used in Drupal.
- */
-class Updater {
-
-  /**
-   * @var string $source Directory to install from.
+   * @param string $source
+   *   Directory to install from.
    */
-  public $source;
-
   public function __construct($source) {
     $this->source = $source;
     $this->name = self::getProjectName($source);
@@ -81,7 +32,7 @@ class Updater {
   }
 
   /**
-   * Return an Updater of the appropriate type depending on the source.
+   * Returns an Updater of the appropriate type depending on the source.
    *
    * If a directory is provided which contains a module, will return a
    * ModuleUpdater.
@@ -89,7 +40,10 @@ class Updater {
    * @param string $source
    *   Directory of a Drupal project.
    *
-   * @return Updater
+   * @return Drupal\Core\Updater\Updater
+   *   A new Drupal\Core\Updater\Updater object.
+   *
+   * @throws Drupal\Core\Updater\UpdaterException
    */
   public static function factory($source) {
     if (is_dir($source)) {
@@ -102,13 +56,15 @@ class Updater {
   }
 
   /**
-   * Determine which Updater class can operate on the given directory.
+   * Determines which Updater class can operate on the given directory.
    *
    * @param string $directory
    *   Extracted Drupal project.
    *
    * @return string
    *   The class name which can work with this project type.
+   *
+   * @throws Drupal\Core\Updater\UpdaterException
    */
   public static function getUpdaterFromDirectory($directory) {
     // Gets a list of possible implementing classes.
@@ -123,7 +79,7 @@ class Updater {
   }
 
   /**
-   * Figure out what the most important (or only) info file is in a directory.
+   * Determines what the most important (or only) info file is in a directory.
    *
    * Since there is no enforcement of which info file is the project's "main"
    * info file, this will get one with the same name as the directory, or the
@@ -152,7 +108,7 @@ class Updater {
   }
 
   /**
-   * Get the name of the project directory (basename).
+   * Gets the name of the project directory (basename).
    *
    * @todo: It would be nice, if projects contained an info file which could
    *        provide their canonical name.
@@ -167,13 +123,15 @@ class Updater {
   }
 
   /**
-   * Return the project name from a Drupal info file.
+   * Returns the project name from a Drupal info file.
    *
    * @param string $directory
    *   Directory to search for the info file.
    *
    * @return string
    *   The title of the project.
+   *
+   * @throws Drupal\Core\Updater\UpdaterException
    */
   public static function getProjectTitle($directory) {
     $info_file = self::findInfoFile($directory);
@@ -188,7 +146,7 @@ class Updater {
   }
 
   /**
-   * Store the default parameters for the Updater.
+   * Stores the default parameters for the Updater.
    *
    * @param array $overrides
    *   An array of overrides for the default parameters.
@@ -206,9 +164,9 @@ class Updater {
   }
 
   /**
-   * Updates a Drupal project, returns a list of next actions.
+   * Updates a Drupal project and returns a list of next actions.
    *
-   * @param FileTransfer $filetransfer
+   * @param Drupal\Core\FileTransfer\FileTransferInterface $filetransfer
    *   Object that is a child of FileTransfer. Used for moving files
    *   to the server.
    * @param array $overrides
@@ -216,6 +174,9 @@ class Updater {
    *
    * @return array
    *   An array of links which the user may need to complete the update
+   *
+   * @throws Drupal\Core\Updater\UpdaterException
+   * @throws Drupal\Core\Updater\UpdaterFileTransferException
    */
   public function update(&$filetransfer, $overrides = array()) {
     try {
@@ -264,13 +225,15 @@ class Updater {
   /**
    * Installs a Drupal project, returns a list of next actions.
    *
-   * @param FileTransfer $filetransfer
+   * @param Drupal\Core\FileTransfer\FileTransferInterface $filetransfer
    *   Object that is a child of FileTransfer.
    * @param array $overrides
    *   An array of settings to override defaults; see self::getInstallArgs().
    *
    * @return array
    *   An array of links which the user may need to complete the install.
+   *
+   * @throws Drupal\Core\Updater\UpdaterFileTransferException
    */
   public function install(&$filetransfer, $overrides = array()) {
     try {
@@ -298,12 +261,14 @@ class Updater {
   }
 
   /**
-   * Make sure the installation parent directory exists and is writable.
+   * Makes sure the installation parent directory exists and is writable.
    *
-   * @param FileTransfer $filetransfer
+   * @param Drupal\Core\FileTransfer\FileTransferInterface $filetransfer
    *   Object which is a child of FileTransfer.
    * @param string $directory
    *   The installation directory to prepare.
+   *
+   * @throws Drupal\Core\Updater\UpdaterException
    */
   public function prepareInstallDirectory(&$filetransfer, $directory) {
     // Make the parent dir writable if need be and create the dir.
@@ -341,9 +306,9 @@ class Updater {
   }
 
   /**
-   * Ensure that a given directory is world readable.
+   * Ensures that a given directory is world readable.
    *
-   * @param FileTransfer $filetransfer
+   * @param Drupal\Core\FileTransfer\FileTransferInterface $filetransfer
    *   Object which is a child of FileTransfer.
    * @param string $path
    *   The file path to make world readable.
@@ -359,7 +324,7 @@ class Updater {
   }
 
   /**
-   * Perform a backup.
+   * Performs a backup.
    *
    * @todo Not implemented.
    */
@@ -367,26 +332,26 @@ class Updater {
   }
 
   /**
-   * Return the full path to a directory where backups should be written.
+   * Returns the full path to a directory where backups should be written.
    */
   public function getBackupDir() {
     return file_stream_wrapper_get_instance_by_scheme('temporary')->getDirectoryPath();
   }
 
   /**
-   * Perform actions after new code is updated.
+   * Performs actions after new code is updated.
    */
   public function postUpdate() {
   }
 
   /**
-   * Perform actions after installation.
+   * Performs actions after installation.
    */
   public function postInstall() {
   }
 
   /**
-   * Return an array of links to pages that should be visited post operation.
+   * Returns an array of links to pages that should be visited post operation.
    *
    * @return array
    *   Links which provide actions to take after the install is finished.
@@ -396,7 +361,7 @@ class Updater {
   }
 
   /**
-   * Return an array of links to pages that should be visited post operation.
+   * Returns an array of links to pages that should be visited post operation.
    *
    * @return array
    *   Links which provide actions to take after the update is finished.
@@ -405,23 +370,3 @@ class Updater {
     return array();
   }
 }
-
-/**
- * Exception class for the Updater class hierarchy.
- *
- * This is identical to the base Exception class, we just give it a more
- * specific name so that call sites that want to tell the difference can
- * specifically catch these exceptions and treat them differently.
- */
-class UpdaterException extends Exception {
-}
-
-/**
- * Child class of UpdaterException that indicates a FileTransfer exception.
- *
- * We have to catch FileTransfer exceptions and wrap those in t(), since
- * FileTransfer is so low-level that it doesn't use any Drupal APIs and none
- * of the strings are translated.
- */
-class UpdaterFileTransferException extends UpdaterException {
-}
diff --git a/core/lib/Drupal/Core/Updater/UpdaterException.php b/core/lib/Drupal/Core/Updater/UpdaterException.php
new file mode 100644
index 0000000..fc9cb9d
--- /dev/null
+++ b/core/lib/Drupal/Core/Updater/UpdaterException.php
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Updater\UpdaterException.
+ */
+
+namespace Drupal\Core\Updater;
+
+/**
+ * Defines a Exception class for the Drupal\Core\Updater\Updater class
+ * hierarchy.
+ *
+ * This is identical to the base Exception class, we just give it a more
+ * specific name so that call sites that want to tell the difference can
+ * specifically catch these exceptions and treat them differently.
+ */
+class UpdaterException extends Exception {
+}
diff --git a/core/lib/Drupal/Core/Updater/UpdaterFileTransferException.php b/core/lib/Drupal/Core/Updater/UpdaterFileTransferException.php
new file mode 100644
index 0000000..ab4c02b
--- /dev/null
+++ b/core/lib/Drupal/Core/Updater/UpdaterFileTransferException.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Updater\UpdaterFileTransferException.
+ */
+
+namespace Drupal\Core\Updater;
+
+/**
+ * Defines a child class of Drupal\Core\Updater\UpdaterException that indicates
+ * a Drupal\Core\FileTransfer\FileTransferInterface exception.
+ *
+ * We have to catch Drupal\Core\FileTransfer\FileTransferInterface exceptions
+ * and wrap those in t(), since Drupal\Core\FileTransfer\FileTransferInterface
+ * is so low-level that it doesn't use any Drupal APIs and none of the strings
+ * are translated.
+ */
+class UpdaterFileTransferException extends UpdaterException {
+}
diff --git a/core/lib/Drupal/Core/Updater/UpdaterInterface.php b/core/lib/Drupal/Core/Updater/UpdaterInterface.php
new file mode 100644
index 0000000..6d789ce
--- /dev/null
+++ b/core/lib/Drupal/Core/Updater/UpdaterInterface.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Updater\UpdaterInterface.
+ */
+
+namespace Drupal\Core\Updater;
+
+/**
+ * Defines an interface for a class which can update a Drupal project.
+ *
+ * An Updater currently serves the following purposes:
+ *   - It can take a given directory, and determine if it can operate on it.
+ *   - It can move the contents of that directory into the appropriate place
+ *     on the system using FileTransfer classes.
+ *   - It can return a list of "next steps" after an update or install.
+ *   - In the future, it will most likely perform some of those steps as well.
+ */
+interface UpdaterInterface {
+
+  /**
+   * Checks if the project is installed.
+   *
+   * @return bool
+   */
+  public function isInstalled();
+
+  /**
+   * Returns the system name of the project.
+   *
+   * @param string $directory
+   *  A directory containing a project.
+   */
+  public static function getProjectName($directory);
+
+  /**
+   * Returns the path to the default install location.
+   *
+   * @return string
+   *   An absolute path to the default install location.
+   */
+  public function getInstallDirectory();
+
+  /**
+   * Determines if the Updater can handle the project provided in $directory.
+   *
+   * @todo: Provide something more rational here, like a project spec file.
+   *
+   * @param string $directory
+   *
+   * @return bool
+   *   TRUE if the project is installed, FALSE if not.
+   */
+  public static function canUpdateDirectory($directory);
+
+  /**
+   * Actions to run after an install has occurred.
+   */
+  public function postInstall();
+
+  /**
+   * Actions to run after an update has occurred.
+   */
+  public function postUpdate();
+}
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 907b7b5..a9b1ce3 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -4040,9 +4040,9 @@ function hook_batch_alter(&$batch) {
 /**
  * Provide information on Updaters (classes that can update Drupal).
  *
- * An Updater is a class that knows how to update various parts of the Drupal
- * file system, for example to update modules that have newer releases, or to
- * install a new theme.
+ * Drupal\Core\Updater\Updater is a class that knows how to update various parts
+ * of the Drupal file system, for example to update modules that have newer
+ * releases, or to install a new theme.
  *
  * @return
  *   An associative array of information about the updater(s) being provided.
@@ -4064,12 +4064,12 @@ function hook_batch_alter(&$batch) {
 function hook_updater_info() {
   return array(
     'module' => array(
-      'class' => 'ModuleUpdater',
+      'class' => 'Drupal\Core\Updater\Module',
       'name' => t('Update modules'),
       'weight' => 0,
     ),
     'theme' => array(
-      'class' => 'ThemeUpdater',
+      'class' => 'Drupal\Core\Updater\Theme',
       'name' => t('Update themes'),
       'weight' => 0,
     ),
diff --git a/core/modules/system/system.info b/core/modules/system/system.info
index c394849..d95d561 100644
--- a/core/modules/system/system.info
+++ b/core/modules/system/system.info
@@ -7,7 +7,6 @@ files[] = system.archiver.inc
 files[] = system.mail.inc
 files[] = system.queue.inc
 files[] = system.tar.inc
-files[] = system.updater.inc
 files[] = system.test
 required = TRUE
 configure = admin/config/system
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 86a5f7b..e602121 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1852,12 +1852,12 @@ function system_authorized_batch_process() {
 function system_updater_info() {
   return array(
     'module' => array(
-      'class' => 'ModuleUpdater',
+      'class' => 'Drupal\Core\Updater\Module',
       'name' => t('Update modules'),
       'weight' => 0,
     ),
     'theme' => array(
-      'class' => 'ThemeUpdater',
+      'class' => 'Drupal\Core\Updater\Theme',
       'name' => t('Update themes'),
       'weight' => 0,
     ),
diff --git a/core/modules/system/system.updater.inc b/core/modules/system/system.updater.inc
deleted file mode 100644
index 84c1752..0000000
--- a/core/modules/system/system.updater.inc
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-/**
- * @file
- * Subclasses of the Updater class to update Drupal core knows how to update.
- * At this time, only modules and themes are supported.
- */
-
-/**
- * Class for updating modules using FileTransfer classes via authorize.php.
- */
-class ModuleUpdater extends Updater implements DrupalUpdaterInterface {
-
-  /**
-   * Return the directory where a module should be installed.
-   *
-   * If the module is already installed, drupal_get_path() will return
-   * a valid path and we should install it there (although we need to use an
-   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
-   * module, we always want it to go into sites/all/modules, since that's
-   * where all the documentation recommends users install their modules, and
-   * there's no way that can conflict on a multi-site installation, since
-   * the Update manager won't let you install a new module if it's already
-   * found on your system, and if there was a copy in sites/all, we'd see it.
-   */
-  public function getInstallDirectory() {
-    if ($relative_path = drupal_get_path('module', $this->name)) {
-      $relative_path = dirname($relative_path);
-    }
-    else {
-      $relative_path = 'sites/all/modules';
-    }
-    return DRUPAL_ROOT . '/' . $relative_path;
-  }
-
-  public function isInstalled() {
-    return (bool) drupal_get_path('module', $this->name);
-  }
-
-  public static function canUpdateDirectory($directory) {
-    if (file_scan_directory($directory, '/.*\.module$/')) {
-      return TRUE;
-    }
-    return FALSE;
-  }
-
-  public static function canUpdate($project_name) {
-    return (bool) drupal_get_path('module', $project_name);
-  }
-
-  /**
-   * Return available database schema updates one a new version is installed.
-   */
-  public function getSchemaUpdates() {
-    require_once DRUPAL_ROOT . '/core/includes/install.inc';
-    require_once DRUPAL_ROOT . '/core/includes/update.inc';
-
-    if (_update_get_project_type($project) != 'module') {
-      return array();
-    }
-    module_load_include('install', $project);
-
-    if (!$updates = drupal_get_schema_versions($project)) {
-      return array();
-    }
-    $updates_to_run = array();
-    $modules_with_updates = update_get_update_list();
-    if ($updates = $modules_with_updates[$project]) {
-      if ($updates['start']) {
-        return $updates['pending'];
-      }
-    }
-    return array();
-  }
-
-  public function postInstallTasks() {
-    return array(
-      l(t('Enable newly added modules'), 'admin/modules'),
-      l(t('Administration pages'), 'admin'),
-    );
-  }
-
-  public function postUpdateTasks() {
-    // We don't want to check for DB updates here, we do that once for all
-    // updated modules on the landing page.
-  }
-
-}
-
-/**
- * Class for updating themes using FileTransfer classes via authorize.php.
- */
-class ThemeUpdater extends Updater implements DrupalUpdaterInterface {
-
-  /**
-   * Return the directory where a theme should be installed.
-   *
-   * If the theme is already installed, drupal_get_path() will return
-   * a valid path and we should install it there (although we need to use an
-   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
-   * theme, we always want it to go into sites/all/themes, since that's
-   * where all the documentation recommends users install their themes, and
-   * there's no way that can conflict on a multi-site installation, since
-   * the Update manager won't let you install a new theme if it's already
-   * found on your system, and if there was a copy in sites/all, we'd see it.
-   */
-  public function getInstallDirectory() {
-    if ($relative_path = drupal_get_path('theme', $this->name)) {
-      $relative_path = dirname($relative_path);
-    }
-    else {
-      $relative_path = 'sites/all/themes';
-    }
-    return DRUPAL_ROOT . '/' . $relative_path;
-  }
-
-  public function isInstalled() {
-    return (bool) drupal_get_path('theme', $this->name);
-  }
-
-  static function canUpdateDirectory($directory) {
-    // This is a lousy test, but don't know how else to confirm it is a theme.
-    if (file_scan_directory($directory, '/.*\.module$/')) {
-      return FALSE;
-    }
-    return TRUE;
-  }
-
-  public static function canUpdate($project_name) {
-    return (bool) drupal_get_path('theme', $project_name);
-  }
-
-  public function postInstall() {
-    // Update the system table.
-    clearstatcache();
-    system_rebuild_theme_data();
-
-  }
-
-  public function postInstallTasks() {
-    return array(
-      l(t('Enable newly added themes'), 'admin/appearance'),
-      l(t('Administration pages'), 'admin'),
-    );
-  }
-}
diff --git a/core/modules/update/update.authorize.inc b/core/modules/update/update.authorize.inc
index 35dde0e..48dfd35 100644
--- a/core/modules/update/update.authorize.inc
+++ b/core/modules/update/update.authorize.inc
@@ -9,6 +9,8 @@
  * the rest of the update module code.
  */
 
+use Drupal\Core\Updater\UpdaterException;
+
 /**
  * Callback invoked by authorize.php to update existing projects.
  *
@@ -19,7 +21,8 @@
  *   A nested array of projects to install into the live webroot, keyed by
  *   project name. Each subarray contains the following keys:
  *   - 'project': The canonical project short name.
- *   - 'updater_name': The name of the Updater class to use for this project.
+ *   - 'updater_name': The name of the Drupal\Core\Updater\Updater class to use
+ *     for this project.
  *   - 'local_url': The locally installed location of new code to update with.
  */
 function update_authorize_run_update($filetransfer, $projects) {
@@ -58,7 +61,8 @@ function update_authorize_run_update($filetransfer, $projects) {
  * @param string $project
  *   The canonical project short name (e.g. {system}.name).
  * @param string $updater_name
- *   The name of the Updater class to use for installing this project.
+ *   The name of the Drupal\Core\Updater\Updater class to use for installing
+ *   this project.
  * @param string $local_url
  *   The URL to the locally installed temp directory where the project has
  *   already been downloaded and extracted into.
@@ -95,7 +99,8 @@ function update_authorize_run_install($filetransfer, $project, $updater_name, $l
  * @param string $project
  *   The canonical short name of the project being installed.
  * @param string $updater_name
- *   The name of the Updater class to use for installing this project.
+ *   The name of the Drupal\Core\Updater\Updater class to use for installing
+ *   this project.
  * @param string $local_url
  *   The URL to the locally installed temp directory where the project has
  *   already been downloaded and extracted into.
diff --git a/core/modules/update/update.manager.inc b/core/modules/update/update.manager.inc
index d9fd86f..0091520 100644
--- a/core/modules/update/update.manager.inc
+++ b/core/modules/update/update.manager.inc
@@ -35,6 +35,8 @@
  * into the live web root.
  */
 
+use Drupal\Core\Updater\Updater;
+
 /**
  * @defgroup update_manager_update Update manager: update
  * @{
@@ -393,9 +395,10 @@ function update_manager_update_ready_form($form, &$form_state) {
  *
  * If the site administrator requested that the site is put offline during the
  * update, do so now. Otherwise, pull information about all the required
- * updates out of the SESSION, figure out what Updater class is needed for
- * each one, generate an array of update operations to perform, and hand it
- * all off to system_authorized_init(), then redirect to authorize.php.
+ * updates out of the SESSION, figure out what Drupal\Core\Updater\Updater class
+ * is needed for each one, generate an array of update operations to perform,
+ * and hand it all off to system_authorized_init(), then redirect to
+ * authorize.php.
  *
  * @see update_authorize_run_update()
  * @see system_authorized_init()
@@ -606,10 +609,10 @@ function update_manager_install_form_validate($form, &$form_state) {
  * Either downloads the file specified in the URL to a temporary cache, or
  * uploads the file attached to the form, then attempts to extract the archive
  * into a temporary location and verify it. Instantiate the appropriate
- * Updater class for this project and make sure it is not already installed in
- * the live webroot. If everything is successful, setup an operation to run
- * via authorize.php which will copy the extracted files from the temporary
- * location into the live site.
+ * Drupal\Core\Updater\Updater class for this project and make sure it is not
+ * already installed in the live webroot. If everything is successful, setup an
+ * operation to run via authorize.php which will copy the extracted files from
+ * the temporary location into the live site.
  *
  * @see update_authorize_run_install()
  * @see system_authorized_init()
