diff --git a/core/core.services.yml b/core/core.services.yml
index 1d9b2d2..bc4bcbe 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -693,11 +693,6 @@ services:
     arguments: ['@router.route_provider', '@paramconverter_manager', '@access_arguments_resolver_factory', '@current_user']
     calls:
       - [setContainer, ['@service_container']]
-  access_route_subscriber:
-    class: Drupal\Core\EventSubscriber\AccessRouteSubscriber
-    tags:
-      - { name: event_subscriber }
-    arguments: ['@access_manager']
   access_check.default:
     class: Drupal\Core\Access\DefaultAccessCheck
     tags:
diff --git a/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php
deleted file mode 100644
index 240073b..0000000
--- a/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\EventSubscriber\AccessRouteSubscriber.
- */
-
-namespace Drupal\Core\EventSubscriber;
-
-use Drupal\Core\Access\AccessManagerInterface;
-use Drupal\Core\Routing\RouteBuildEvent;
-use Drupal\Core\Routing\RoutingEvents;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Provides a subscriber to set access checkers on route building.
- */
-class AccessRouteSubscriber implements EventSubscriberInterface {
-
-  /**
-   * The access manager.
-   *
-   * @var \Drupal\Core\Access\AccessManagerInterface
-   */
-  protected $accessManager;
-
-  /**
-   * Constructs a new AccessSubscriber.
-   *
-   * @param \Drupal\Core\Access\AccessManagerInterface $access_manager
-   *   The access check manager that will be responsible for applying
-   *   AccessCheckers against routes.
-   */
-  public function __construct(AccessManagerInterface $access_manager) {
-    $this->accessManager = $access_manager;
-  }
-
-  /**
-   * Apply access checks to routes.
-   *
-   * @param \Drupal\Core\Routing\RouteBuildEvent $event
-   *   The event to process.
-   */
-  public function onRoutingRouteAlterSetAccessCheck(RouteBuildEvent $event) {
-    $this->accessManager->setChecks($event->getRouteCollection());
-  }
-
-  /**
-   * Registers the methods in this class that should be listeners.
-   *
-   * @return array
-   *   An array of event listener definitions.
-   */
-  static function getSubscribedEvents() {
-    // Setting very low priority to ensure access checks are run after alters.
-    $events[RoutingEvents::ALTER][] = array('onRoutingRouteAlterSetAccessCheck', -1000);
-
-    return $events;
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index 5bea0a5..819852f 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Routing;
 
 use Drupal\Component\Discovery\YamlDiscovery;
+use Drupal\Core\Access\AccessManagerInterface;
 use Drupal\Core\Controller\ControllerResolverInterface;
 use Drupal\Core\State\StateInterface;
 use Symfony\Component\EventDispatcher\Event;
@@ -92,7 +93,7 @@ class RouteBuilder implements RouteBuilderInterface {
    *   The module handler.
    * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
    *   The controller resolver.
-   * @param \Drupal\Core\KeyValueStore\StateInterface $state
+   * @param \Drupal\Core\State\StateInterface $state
    *   The state.
    */
   public function __construct(MatcherDumperInterface $dumper, LockBackendInterface $lock, EventDispatcherInterface $dispatcher, ModuleHandlerInterface $module_handler, ControllerResolverInterface $controller_resolver, StateInterface $state = NULL) {
@@ -105,6 +106,22 @@ public function __construct(MatcherDumperInterface $dumper, LockBackendInterface
   }
 
   /**
+   * Apply access checks to routes.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   A collection of routes to apply checks to.
+   * @param \Drupal\Core\Access\AccessManagerInterface $access_manager
+   *   The access check manager that will be responsible for applying
+   *   AccessCheckers against routes.
+   */
+  public static function addChecks(RouteCollection $collection, AccessManagerInterface $access_manager = NULL) {
+    if (!$access_manager) {
+      $access_manager = \Drupal::accessManager();
+    }
+    $access_manager->setChecks($collection);
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function rebuild() {
@@ -172,6 +189,8 @@ public function rebuild() {
     // make it clear.
     $this->dispatcher->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection));
 
+    static::addChecks($collection);
+
     $this->dumper->addRoutes($collection);
     $this->dumper->dump();
 
diff --git a/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php b/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
index aff98962..734e589 100644
--- a/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
@@ -91,6 +91,9 @@ protected function setUp() {
 
     $this->routeBuilder = new TestRouteBuilder($this->dumper, $this->lock, $this->dispatcher, $this->moduleHandler, $this->controllerResolver, $this->state);
     $this->routeBuilder->setYamlDiscovery($this->yamlDiscovery);
+    $container = new ContainerBuilder();
+    $container->set('access_manager', $this->getMock('Drupal\Core\Access\AccessManagerInterface'));
+    \Drupal::setContainer($container);
   }
 
   /**
