diff --git a/core/lib/Drupal/Core/Menu/menu.api.php b/core/lib/Drupal/Core/Menu/menu.api.php
index 8550fc5..9f37ade 100644
--- a/core/lib/Drupal/Core/Menu/menu.api.php
+++ b/core/lib/Drupal/Core/Menu/menu.api.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Hooks and documentation related to the menu system, routing, and links.
+ * Hooks and documentation related to the menu system and links.
  */
 
 /**
@@ -11,17 +11,6 @@
  * Define the navigation menus, and route page requests to code based on URLs.
  *
  * @section sec_overview Overview and terminology
- * The Drupal routing system defines how Drupal responds to URL requests that
- * the web server passes on to Drupal. The routing system is based on the
- * @link http://symfony.com Symfony framework. @endlink The central idea is
- * that Drupal subsystems and modules can register routes (basically, URL
- * paths and context); they can also register to respond dynamically to
- * routes, for more flexibility. When Drupal receives a URL request, it will
- * attempt to match the request to a registered route, and query dynamic
- * responders. If a match is made, Drupal will then instantiate the required
- * classes, gather the data, format it, and send it back to the web browser.
- * Otherwise, Drupal will return a 404 or 403 response.
- *
  * The menu system uses routes; it is used for navigation menus, local tasks,
  * local actions, and contextual links:
  * - Navigation menus are hierarchies of menu links; links point to routes or
@@ -38,222 +27,10 @@
  *   Contextual Links module handles the gathering and rendering of contextual
  *   links.
  *
- * The following sections of this topic provide an overview of the routing and
- * menu APIs. For more detailed information, see
- * https://www.drupal.org/developing/api/8/routing and
+ * The following sections of this topic provide an overview of the menu APIs.
+ * For more detailed information, see
  * https://www.drupal.org/developing/api/8/menu
  *
- * @section sec_register Registering simple routes
- * To register a route, add lines similar to this to a module_name.routing.yml
- * file in your top-level module directory:
- * @code
- * dblog.overview:
- *   path: '/admin/reports/dblog'
- *   defaults:
- *     _controller: '\Drupal\dblog\Controller\DbLogController::overview'
- *     _title: 'Recent log messages'
- *   requirements:
- *     _permission: 'access site reports'
- * @endcode
- * Some notes:
- * - The first line is the machine name of the route. Typically, it is prefixed
- *   by the machine name of the module that defines the route, or the name of
- *   a subsystem.
- * - The 'path' line gives the URL path of the route (relative to the site's
- *   base URL).
- * - The 'defaults' section tells how to build the main content of the route,
- *   and can also give other information, such as the page title and additional
- *   arguments for the route controller method. There are several possibilities
- *   for how to build the main content, including:
- *   - _controller: A callable, usually a method on a page controller class
- *     (see @ref sec_controller below for details).
- *   - _form: A form controller class. See the
- *     @link form_api Form API topic @endlink for more information about
- *     form controllers.
- *   - _entity_form: A form for editing an entity. See the
- *     @link entity_api Entity API topic @endlink for more information.
- * - The 'requirements' section is used in Drupal to give access permission
- *   instructions (it has other uses in the Symfony framework). Most
- *   routes have a simple permission-based access scheme, as shown in this
- *   example. See the @link user_api Permission system topic @endlink for
- *   more information about permissions.
- *
- * See https://www.drupal.org/node/2092643 for more details about *.routing.yml
- * files, and https://www.drupal.org/node/2122201 for information on how to
- * set up dynamic routes. The @link events Events topic @endlink is also
- * relevant to dynamic routes.
- *
- * @section sec_placeholders Defining routes with placeholders
- * Some routes have placeholders in them, and these can also be defined in a
- * module_name.routing.yml file, as in this example from the Block module:
- * @code
- * entity.block.edit_form:
- *   path: '/admin/structure/block/manage/{block}'
- *   defaults:
- *     _entity_form: 'block.default'
- *     _title: 'Configure block'
- *   requirements:
- *     _entity_access: 'block.update'
- * @endcode
- * In the path, '{block}' is a placeholder - it will be replaced by the
- * ID of the block that is being configured by the entity system. See the
- * @link entity_api Entity API topic @endlink for more information.
- *
- * @section sec_controller Route controllers for simple routes
- * For simple routes, after you have defined the route in a *.routing.yml file
- * (see @ref sec_register above), the next step is to define a page controller
- * class and method. Page controller classes do not necessarily need to
- * implement any particular interface or extend any particular base class. The
- * only requirement is that the method specified in your *.routing.yml file
- * returns:
- * - A render array (see the
- *   @link theme_render Theme and render topic @endlink for more information).
- *   This render array is then rendered in the requested format (HTML, dialog,
- *   modal, AJAX are supported by default). In the case of HTML, it will be
- *   surrounded by blocks by default: the Block module is enabled by default,
- *   and hence its Page Display Variant that surrounds the main content with
- *   blocks is also used by default.
- * - A \Symfony\Component\HttpFoundation\Response object.
- * As a note, if your module registers multiple simple routes, it is usual
- * (and usually easiest) to put all of their methods on one controller class.
- *
- * If the route has placeholders (see @ref sec_placeholders above) the
- * placeholders will be passed to the method (using reflection) by name.
- * For example, the placeholder '{myvar}' in a route will become the $myvar
- * parameter to the method.
- *
- * Most controllers will need to display some information stored in the Drupal
- * database, which will involve using one or more Drupal services (see the
- * @link container Services and container topic @endlink). In order to properly
- * inject services, a controller should implement
- * \Drupal\Core\DependencyInjection\ContainerInjectionInterface; simple
- * controllers can do this by extending the
- * \Drupal\Core\Controller\ControllerBase class. See
- * \Drupal\dblog\Controller\DbLogController for a straightforward example of
- * a controller class.
- *
- * @section sec_links Defining menu links for the administrative menu
- * Routes for administrative tasks can be added to the main Drupal
- * administrative menu hierarchy. To do this, add lines like the following to a
- * module_name.links.menu.yml file (in the top-level directory for your module):
- * @code
- * dblog.overview:
- *   title: 'Recent log messages'
- *   parent: system.admin_reports
- *   description: 'View events that have recently been logged.'
- *   route_name: dblog.overview
- *   weight: -1
- * @endcode
- * Some notes:
- * - The first line is the machine name for your menu link, which usually
- *   matches the machine name of the route (given in the 'route_name' line).
- * - parent: The machine name of the menu link that is the parent in the
- *   administrative hierarchy. See system.links.menu.yml to find the main
- *   skeleton of the hierarchy.
- * - weight: Lower (negative) numbers come before higher (positive) numbers,
- *   for menu items with the same parent.
- *
- * Discovered menu links from other modules can be altered using
- * hook_menu_links_discovered_alter().
- *
- * @todo Derivatives will probably be defined for these; when they are, add
- *   documentation here.
- *
- * @section sec_tasks Defining groups of local tasks (tabs)
- * Local tasks appear as tabs on a page when there are at least two defined for
- * a route, including the base route as the main tab, and additional routes as
- * other tabs. Static local tasks can be defined by adding lines like the
- * following to a module_name.links.task.yml file (in the top-level directory
- * for your module):
- * @code
- * book.admin:
- *   route_name: book.admin
- *   title: 'List'
- *   base_route: book.admin
- * book.settings:
- *   route_name: book.settings
- *   title: 'Settings'
- *   base_route: book.admin
- *   weight: 100
- * @endcode
- * Some notes:
- * - The first line is the machine name for your local task, which usually
- *   matches the machine name of the route (given in the 'route_name' line).
- * - base_route: The machine name of the main task (tab) for the set of local
- *   tasks.
- * - weight: Lower (negative) numbers come before higher (positive) numbers,
- *   for tasks on the same base route. If there is a tab whose route
- *   matches the base route, that will be the default/first tab shown.
- *
- * Local tasks from other modules can be altered using
- * hook_menu_local_tasks_alter().
- *
- * @todo Derivatives are in flux for these; when they are more stable, add
- *   documentation here.
- *
- * @section sec_actions Defining local actions for routes
- * Local actions can be defined for operations related to a given route. For
- * instance, adding content is a common operation for the content management
- * page, so it should be a local action. Static local actions can be
- * defined by adding lines like the following to a
- * module_name.links.action.yml file (in the top-level directory for your
- * module):
- * @code
- * node.add_page:
- *   route_name: node.add_page
- *   title: 'Add content'
- *   appears_on:
- *     - system.admin_content
- * @endcode
- * Some notes:
- * - The first line is the machine name for your local action, which usually
- *   matches the machine name of the route (given in the 'route_name' line).
- * - appears_on: Machine names of one or more routes that this local task
- *   should appear on.
- *
- * Local actions from other modules can be altered using
- * hook_menu_local_actions_alter().
- *
- * @todo Derivatives are in flux for these; when they are more stable, add
- *   documentation here.
- *
- * @section sec_contextual Defining contextual links
- * Contextual links are displayed by the Contextual Links module for user
- * interface elements whose render arrays have a '#contextual_links' element
- * defined. For example, a block render array might look like this, in part:
- * @code
- * array(
- *   '#contextual_links' => array(
- *     'block' => array(
- *       'route_parameters' => array('block' => $entity->id()),
- *     ),
- *   ),
- * @endcode
- * In this array, the outer key 'block' defines a "group" for contextual
- * links, and the inner array provides values for the route's placeholder
- * parameters (see @ref sec_placeholders above).
- *
- * To declare that a defined route should be a contextual link for a
- * contextual links group, put lines like the following in a
- * module_name.links.contextual.yml file (in the top-level directory for your
- * module):
- * @code
- * block_configure:
- *   title: 'Configure block'
- *   route_name: 'entity.block.edit_form'
- *   group: 'block'
- * @endcode
- * Some notes:
- * - The first line is the machine name for your contextual link, which usually
- *   matches the machine name of the route (given in the 'route_name' line).
- * - group: This needs to match the link group defined in the render array.
- *
- * Contextual links from other modules can be altered using
- * hook_contextual_links_alter().
- *
- * @todo Derivatives are in flux for these; when they are more stable, add
- *   documentation here.
- *
  * @section sec_rendering Rendering menus
  * Once you have created menus (that contain menu links), you want to render
  * them. Drupal provides a block (Drupal\system\Plugin\Block\SystemMenuBlock) to
@@ -405,30 +182,30 @@ function hook_menu_links_discovered_alter(&$links) {
 function hook_menu_local_tasks(&$data, $route_name) {
   // Add an action linking to node/add to all pages.
   $data['actions']['node/add'] = array(
-      '#theme' => 'menu_local_action',
-      '#link' => array(
+    '#theme' => 'menu_local_action',
+    '#link' => array(
+      'title' => t('Add content'),
+      'url' => Url::fromRoute('node.add_page'),
+      'localized_options' => array(
+        'attributes' => array(
           'title' => t('Add content'),
-          'url' => Url::fromRoute('node.add_page'),
-          'localized_options' => array(
-              'attributes' => array(
-                  'title' => t('Add content'),
-              ),
-          ),
+        ),
       ),
+    ),
   );
 
   // Add a tab linking to node/add to all pages.
   $data['tabs'][0]['node/add'] = array(
-      '#theme' => 'menu_local_task',
-      '#link' => array(
-          'title' => t('Example tab'),
-          'url' => Url::fromRoute('node.add_page'),
-          'localized_options' => array(
-              'attributes' => array(
-                  'title' => t('Add content'),
-              ),
-          ),
+    '#theme' => 'menu_local_task',
+    '#link' => array(
+      'title' => t('Example tab'),
+      'url' => Url::fromRoute('node.add_page'),
+      'localized_options' => array(
+        'attributes' => array(
+          'title' => t('Add content'),
+        ),
       ),
+    ),
   );
 }
 
diff --git a/core/lib/Drupal/Core/Routing/routing.api.php b/core/lib/Drupal/Core/Routing/routing.api.php
index e69de29..266db90 100644
--- a/core/lib/Drupal/Core/Routing/routing.api.php
+++ b/core/lib/Drupal/Core/Routing/routing.api.php
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * @file
+ * Hooks and documentation related to the routing system.
+ */
+
+/**
+ * @defgroup menu Menu and routing system
+ * @{
+ * Define the navigation menus, and route page requests to code based on URLs.
+ *
+ * @section sec_overview Overview and terminology
+ * The Drupal routing system defines how Drupal responds to URL requests that
+ * the web server passes on to Drupal. The routing system is based on the
+ * @link http://symfony.com Symfony framework. @endlink The central idea is
+ * that Drupal subsystems and modules can register routes (basically, URL
+ * paths and context); they can also register to respond dynamically to
+ * routes, for more flexibility. When Drupal receives a URL request, it will
+ * attempt to match the request to a registered route, and query dynamic
+ * responders. If a match is made, Drupal will then instantiate the required
+ * classes, gather the data, format it, and send it back to the web browser.
+ * Otherwise, Drupal will return a 404 or 403 response.
+ *
+ * The following sections of this topic provide an overview of the routing API.
+ * For more detailed information, see
+ * https://www.drupal.org/developing/api/8/routing
+ *
+ * @section sec_register Registering simple routes
+ * To register a route, add lines similar to this to a module_name.routing.yml
+ * file in your top-level module directory:
+ * @code
+ * dblog.overview:
+ *   path: '/admin/reports/dblog'
+ *   defaults:
+ *     _controller: '\Drupal\dblog\Controller\DbLogController::overview'
+ *     _title: 'Recent log messages'
+ *   requirements:
+ *     _permission: 'access site reports'
+ * @endcode
+ * Some notes:
+ * - The first line is the machine name of the route. Typically, it is prefixed
+ *   by the machine name of the module that defines the route, or the name of
+ *   a subsystem.
+ * - The 'path' line gives the URL path of the route (relative to the site's
+ *   base URL).
+ * - The 'defaults' section tells how to build the main content of the route,
+ *   and can also give other information, such as the page title and additional
+ *   arguments for the route controller method. There are several possibilities
+ *   for how to build the main content, including:
+ *   - _controller: A callable, usually a method on a page controller class
+ *     (see @ref sec_controller below for details).
+ *   - _form: A form controller class. See the
+ *     @link form_api Form API topic @endlink for more information about
+ *     form controllers.
+ *   - _entity_form: A form for editing an entity. See the
+ *     @link entity_api Entity API topic @endlink for more information.
+ * - The 'requirements' section is used in Drupal to give access permission
+ *   instructions (it has other uses in the Symfony framework). Most
+ *   routes have a simple permission-based access scheme, as shown in this
+ *   example. See the @link user_api Permission system topic @endlink for
+ *   more information about permissions.
+ *
+ * See https://www.drupal.org/node/2092643 for more details about *.routing.yml
+ * files, and https://www.drupal.org/node/2122201 for information on how to
+ * set up dynamic routes. The @link events Events topic @endlink is also
+ * relevant to dynamic routes.
+ *
+ * @section sec_placeholders Defining routes with placeholders
+ * Some routes have placeholders in them, and these can also be defined in a
+ * module_name.routing.yml file, as in this example from the Block module:
+ * @code
+ * entity.block.edit_form:
+ *   path: '/admin/structure/block/manage/{block}'
+ *   defaults:
+ *     _entity_form: 'block.default'
+ *     _title: 'Configure block'
+ *   requirements:
+ *     _entity_access: 'block.update'
+ * @endcode
+ * In the path, '{block}' is a placeholder - it will be replaced by the
+ * ID of the block that is being configured by the entity system. See the
+ * @link entity_api Entity API topic @endlink for more information.
+ *
+ * @section sec_controller Route controllers for simple routes
+ * For simple routes, after you have defined the route in a *.routing.yml file
+ * (see @ref sec_register above), the next step is to define a page controller
+ * class and method. Page controller classes do not necessarily need to
+ * implement any particular interface or extend any particular base class. The
+ * only requirement is that the method specified in your *.routing.yml file
+ * returns:
+ * - A render array (see the
+ *   @link theme_render Theme and render topic @endlink for more information).
+ *   This render array is then rendered in the requested format (HTML, dialog,
+ *   modal, AJAX are supported by default). In the case of HTML, it will be
+ *   surrounded by blocks by default: the Block module is enabled by default,
+ *   and hence its Page Display Variant that surrounds the main content with
+ *   blocks is also used by default.
+ * - A \Symfony\Component\HttpFoundation\Response object.
+ * As a note, if your module registers multiple simple routes, it is usual
+ * (and usually easiest) to put all of their methods on one controller class.
+ *
+ * If the route has placeholders (see @ref sec_placeholders above) the
+ * placeholders will be passed to the method (using reflection) by name.
+ * For example, the placeholder '{myvar}' in a route will become the $myvar
+ * parameter to the method.
+ *
+ * Most controllers will need to display some information stored in the Drupal
+ * database, which will involve using one or more Drupal services (see the
+ * @link container Services and container topic @endlink). In order to properly
+ * inject services, a controller should implement
+ * \Drupal\Core\DependencyInjection\ContainerInjectionInterface; simple
+ * controllers can do this by extending the
+ * \Drupal\Core\Controller\ControllerBase class. See
+ * \Drupal\dblog\Controller\DbLogController for a straightforward example of
+ * a controller class.
+ *
+ * @section sec_links Defining menu links for the administrative menu
+ * Routes for administrative tasks can be added to the main Drupal
+ * administrative menu hierarchy. To do this, add lines like the following to a
+ * module_name.links.menu.yml file (in the top-level directory for your module):
+ * @code
+ * dblog.overview:
+ *   title: 'Recent log messages'
+ *   parent: system.admin_reports
+ *   description: 'View events that have recently been logged.'
+ *   route_name: dblog.overview
+ *   weight: -1
+ * @endcode
+ * Some notes:
+ * - The first line is the machine name for your menu link, which usually
+ *   matches the machine name of the route (given in the 'route_name' line).
+ * - parent: The machine name of the menu link that is the parent in the
+ *   administrative hierarchy. See system.links.menu.yml to find the main
+ *   skeleton of the hierarchy.
+ * - weight: Lower (negative) numbers come before higher (positive) numbers,
+ *   for menu items with the same parent.
+ *
+ * Discovered menu links from other modules can be altered using
+ * hook_menu_links_discovered_alter().
+ *
+ * @todo Derivatives will probably be defined for these; when they are, add
+ *   documentation here.
+ *
+ * @section sec_tasks Defining groups of local tasks (tabs)
+ * Local tasks appear as tabs on a page when there are at least two defined for
+ * a route, including the base route as the main tab, and additional routes as
+ * other tabs. Static local tasks can be defined by adding lines like the
+ * following to a module_name.links.task.yml file (in the top-level directory
+ * for your module):
+ * @code
+ * book.admin:
+ *   route_name: book.admin
+ *   title: 'List'
+ *   base_route: book.admin
+ * book.settings:
+ *   route_name: book.settings
+ *   title: 'Settings'
+ *   base_route: book.admin
+ *   weight: 100
+ * @endcode
+ * Some notes:
+ * - The first line is the machine name for your local task, which usually
+ *   matches the machine name of the route (given in the 'route_name' line).
+ * - base_route: The machine name of the main task (tab) for the set of local
+ *   tasks.
+ * - weight: Lower (negative) numbers come before higher (positive) numbers,
+ *   for tasks on the same base route. If there is a tab whose route
+ *   matches the base route, that will be the default/first tab shown.
+ *
+ * Local tasks from other modules can be altered using
+ * hook_menu_local_tasks_alter().
+ *
+ * @todo Derivatives are in flux for these; when they are more stable, add
+ *   documentation here.
+ *
+ * @section sec_actions Defining local actions for routes
+ * Local actions can be defined for operations related to a given route. For
+ * instance, adding content is a common operation for the content management
+ * page, so it should be a local action. Static local actions can be
+ * defined by adding lines like the following to a
+ * module_name.links.action.yml file (in the top-level directory for your
+ * module):
+ * @code
+ * node.add_page:
+ *   route_name: node.add_page
+ *   title: 'Add content'
+ *   appears_on:
+ *     - system.admin_content
+ * @endcode
+ * Some notes:
+ * - The first line is the machine name for your local action, which usually
+ *   matches the machine name of the route (given in the 'route_name' line).
+ * - appears_on: Machine names of one or more routes that this local task
+ *   should appear on.
+ *
+ * Local actions from other modules can be altered using
+ * hook_menu_local_actions_alter().
+ *
+ *  * @todo Derivatives are in flux for these; when they are more stable, add
+ *   documentation here.
+ *
+ * @section sec_contextual Defining contextual links
+ * Contextual links are displayed by the Contextual Links module for user
+ * interface elements whose render arrays have a '#contextual_links' element
+ * defined. For example, a block render array might look like this, in part:
+ * @code
+ * array(
+ *   '#contextual_links' => array(
+ *     'block' => array(
+ *       'route_parameters' => array('block' => $entity->id()),
+ *     ),
+ *   ),
+ * @endcode
+ * In this array, the outer key 'block' defines a "group" for contextual
+ * links, and the inner array provides values for the route's placeholder
+ * parameters (see @ref sec_placeholders above).
+ *
+ * To declare that a defined route should be a contextual link for a
+ * contextual links group, put lines like the following in a
+ * module_name.links.contextual.yml file (in the top-level directory for your
+ * module):
+ * @code
+ * block_configure:
+ *   title: 'Configure block'
+ *   route_name: 'entity.block.edit_form'
+ *   group: 'block'
+ * @endcode
+ * Some notes:
+ * - The first line is the machine name for your contextual link, which usually
+ *   matches the machine name of the route (given in the 'route_name' line).
+ * - group: This needs to match the link group defined in the render array.
+ *
+ * Contextual links from other modules can be altered using
+ * hook_contextual_links_alter().
+ *
+ * @todo Derivatives are in flux for these; when they are more stable, add
+ *   documentation here.
+ *
+ * @}
+ */
