diff --git a/core/modules/update/lib/Drupal/update/Controller/UpdateController.php b/core/modules/update/lib/Drupal/update/Controller/UpdateController.php
new file mode 100644
index 0000000000000000000000000000000000000000..d46af8aa87244bb3c2c60ae2c4862ee769434a1f
--- /dev/null
+++ b/core/modules/update/lib/Drupal/update/Controller/UpdateController.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\update\Controller\UpdateController
+ */
+
+namespace Drupal\update\Controller;
+
+use Drupal\Core\ControllerInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Controller routines for update routes.
+ */
+class UpdateController implements ControllerInterface {
+
+  /**
+   * Module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Constructs update status data.
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   Module Handler Service.
+   */
+  public function __construct(ModuleHandlerInterface $module_handler) {
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('module_handler')
+    );
+  }
+
+  /**
+   * Returns a page about the update status of projects.
+   *
+   * @return array
+   *   A build array with the update status of projects.
+   */
+  public function updateStatus() {
+    $build  = array(
+      '#theme' => 'update_report'
+    );
+    if ($available = update_get_available(TRUE)) {
+      $this->moduleHandler->loadInclude('update', 'compare.inc');
+      $build['#data'] = update_calculate_project_data($available);
+    }
+    else {
+      $build['#data'] = _update_no_data();
+    }
+    return $build;
+  }
+
+}
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index 7dee311259fa5a2854d94b3bc76af6c6e4caf957..59b35753db28c7a23e1ebdc7d71429bcc28d225a 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -158,10 +158,8 @@ function update_menu() {
   $items['admin/reports/updates'] = array(
     'title' => 'Available updates',
     'description' => 'Get a status report about available updates for your installed modules and themes.',
-    'page callback' => 'update_status',
-    'access arguments' => array('administer site configuration'),
+    'route_name' => 'update_status',
     'weight' => -50,
-    'file' => 'update.report.inc',
   );
   $items['admin/reports/updates/list'] = array(
     'title' => 'List',
diff --git a/core/modules/update/update.report.inc b/core/modules/update/update.report.inc
index 607b523137cbd534c0114eda302fa982b2bfb236..35677d889244e5536cb824c7f909df71dc10203e 100644
--- a/core/modules/update/update.report.inc
+++ b/core/modules/update/update.report.inc
@@ -5,22 +5,6 @@
  * Code required only when rendering the available updates report.
  */
 
-/**
- * Page callback: Generates a page about the update status of projects.
- *
- * @see update_menu()
- */
-function update_status() {
-  if ($available = update_get_available(TRUE)) {
-    module_load_include('inc', 'update', 'update.compare');
-    $data = update_calculate_project_data($available);
-    return theme('update_report', array('data' => $data));
-  }
-  else {
-    return theme('update_report', array('data' => _update_no_data()));
-  }
-}
-
 /**
  * Returns HTML for the project status report.
  *
diff --git a/core/modules/update/update.routing.yml b/core/modules/update/update.routing.yml
index f201302d814ce38d6d4a3baaccab4c746a77a6f5..16ac4b4d805e982d52b0c2b371599b0531248f84 100644
--- a/core/modules/update/update.routing.yml
+++ b/core/modules/update/update.routing.yml
@@ -4,3 +4,10 @@ update_settings:
     _form: '\Drupal\update\UpdateSettingsForm'
   requirements:
     _permission: 'administer site configuration'
+
+update_status:
+  pattern: '/admin/reports/updates'
+  defaults:
+    _content: '\Drupal\update\Controller\UpdateController::updateStatus'
+  requirements:
+    _permission: 'administer site configuration'