diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index aa36ba7..e66145b 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -11,60 +11,6 @@
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 
 /**
- * Menu callback; Provide the administration overview page.
- */
-function system_admin_config_page() {
-  // Check for status report errors.
-  // @todo Use depedancy injection in http://drupal.org/node/1987810.
-  if (Drupal::service('system.manager')->checkRequirements() && user_access('administer site configuration')) {
-    drupal_set_message(t('One or more problems were detected with your Drupal installation. Check the <a href="@status">status report</a> for more information.', array('@status' => url('admin/reports/status'))), 'error');
-  }
-  $blocks = array();
-  if ($system_link = entity_load_multiple_by_properties('menu_link', array('link_path' => 'admin/config', 'module' => 'system'))) {
-    $system_link = reset($system_link);
-    $query = Drupal::entityQuery('menu_link')
-      ->condition('link_path', 'admin/help', '<>')
-      ->condition('menu_name', $system_link->menu_name)
-      ->condition('plid', $system_link->id())
-      ->condition('hidden', 0);
-    $result = $query->execute();
-    if (!empty($result)) {
-      $menu_links = menu_link_load_multiple($result);
-
-      foreach ($menu_links as $item) {
-        _menu_link_translate($item);
-        if (!$item['access']) {
-          continue;
-        }
-        // The link description, either derived from 'description' in hook_menu()
-        // or customized via menu module is used as title attribute.
-        if (!empty($item['localized_options']['attributes']['title'])) {
-          $item['description'] = $item['localized_options']['attributes']['title'];
-          unset($item['localized_options']['attributes']['title']);
-        }
-        $block = $item;
-        $block['content'] = '';
-        $block['content'] .= theme('admin_block_content', array('content' => system_admin_menu_block($item)));
-        if (!empty($block['content'])) {
-          $block['show'] = TRUE;
-        }
-
-        // Prepare for sorting as in function _menu_tree_check_access().
-        // The weight is offset so it is always positive, with a uniform 5-digits.
-        $blocks[(50000 + $item['weight']) . ' ' . $item['title'] . ' ' . $item['mlid']] = $block;
-      }
-    }
-  }
-  if ($blocks) {
-    ksort($blocks);
-    return theme('admin_page', array('blocks' => $blocks));
-  }
-  else {
-    return t('You do not have any administrative items.');
-  }
-}
-
-/**
  * Provide a single block from the administration menu as a page.
  *
  * This function is often a destination for these blocks.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 4a7cdf4..5f48df3 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -741,9 +741,7 @@ function system_menu() {
   $items['admin/config'] = array(
     'title' => 'Configuration',
     'description' => 'Administer settings.',
-    'page callback' => 'system_admin_config_page',
-    'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
+    'route_name' => 'system_admin_config',
   );
 
   // Media settings.
diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml
index 1adf224..ed4977f 100644
--- a/core/modules/system/system.routing.yml
+++ b/core/modules/system/system.routing.yml
@@ -1,13 +1,13 @@
 system.cron:
   pattern: '/cron/{key}'
   defaults:
-    _controller: '\Drupal\system\CronController::run'
+    _content: '\Drupal\system\CronController::run'
   requirements:
     _access_system_cron: 'TRUE'
 system.machine_name_transliterate:
   pattern: '/machine_name/transliterate'
   defaults:
-    _controller: '\Drupal\system\MachineNameController::transliterate'
+    _content: '\Drupal\system\MachineNameController::transliterate'
   requirements:
     _permission: 'access content'
 
@@ -77,7 +77,7 @@ system_site_maintenance_mode:
 system_run_cron:
   pattern: '/admin/reports/status/run-cron'
   defaults:
-    _controller: '\Drupal\system\CronController::runManually'
+    _content: '\Drupal\system\CronController::runManually'
   requirements:
     _permission: 'administer site configuration'
 
@@ -214,3 +214,10 @@ system_plugin_autocomplete:
     _controller: 'Drupal\system\Controller\SystemController::autocomplete'
   requirements:
     _access_system_plugin_ui: 'TRUE'
+
+system_admin_config:
+  pattern: '/admin/config'
+  defaults:
+    _content: 'Drupal\system\Controller\ConfigController::overview'
+  requirements:
+    _permission: 'access administration pages'
