diff --git a/core/core.services.yml b/core/core.services.yml
index 1d9b2d2..4c81a7a 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -530,6 +530,11 @@ services:
     tags:
       - { name: backend_overridable }
   router.builder:
+    class: Drupal\Core\Routing\RouteBuilderProxy
+    arguments: ['@state']
+    calls:
+      - [setContainer, ['@service_container']]
+  router.builder.real:
     class: Drupal\Core\Routing\RouteBuilder
     arguments: ['@router.dumper', '@lock', '@event_dispatcher', '@module_handler', '@controller_resolver', '@state']
   router.rebuild_subscriber:
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index 694185f..271d6c8 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -13,8 +13,8 @@
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\ConfigInstallerInterface;
 use Drupal\Core\Config\ConfigManagerInterface;
+use Drupal\Core\Routing\RouteBuilderInterface;
 use Drupal\Core\State\StateInterface;
-use Drupal\Core\Routing\RouteBuilder;
 use Psr\Log\LoggerInterface;
 
 /**
@@ -89,7 +89,7 @@ class ThemeHandler implements ThemeHandlerInterface {
   /**
    * The route builder to rebuild the routes if a theme is installed.
    *
-   * @var \Drupal\Core\Routing\RouteBuilder
+   * @var \Drupal\Core\Routing\RouteBuilderInterface
    */
   protected $routeBuilder;
 
@@ -135,13 +135,13 @@ class ThemeHandler implements ThemeHandlerInterface {
    *   database.
    * @param \Drupal\Core\Config\ConfigManagerInterface $config_manager
    *   The config manager used to uninstall a theme.
-   * @param \Drupal\Core\Routing\RouteBuilder $route_builder
+   * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
    *   (optional) The route builder to rebuild the routes if a theme is
    *   installed.
    * @param \Drupal\Core\Extension\ExtensionDiscovery $extension_discovery
    *   (optional) A extension discovery instance (for unit tests).
    */
-  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, StateInterface $state, InfoParserInterface $info_parser,LoggerInterface $logger, AssetCollectionOptimizerInterface $css_collection_optimizer = NULL, ConfigInstallerInterface $config_installer = NULL, ConfigManagerInterface $config_manager = NULL, RouteBuilder $route_builder = NULL, ExtensionDiscovery $extension_discovery = NULL) {
+  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, StateInterface $state, InfoParserInterface $info_parser,LoggerInterface $logger, AssetCollectionOptimizerInterface $css_collection_optimizer = NULL, ConfigInstallerInterface $config_installer = NULL, ConfigManagerInterface $config_manager = NULL, RouteBuilderInterface $route_builder = NULL, ExtensionDiscovery $extension_discovery = NULL) {
     $this->configFactory = $config_factory;
     $this->moduleHandler = $module_handler;
     $this->state = $state;
diff --git a/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php b/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
index 6e93561..f2ca2fc 100644
--- a/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
+++ b/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
@@ -51,7 +51,7 @@ public function register(ContainerBuilder $container) {
 
     // Replace the route builder with an empty implementation.
     // @todo Convert installer steps into routes; add an installer.routing.yml.
-    $definition = $container->getDefinition('router.builder');
+    $definition = $container->getDefinition('router.builder.real');
     $definition->setClass('Drupal\Core\Installer\InstallerRouteBuilder');
 
     // Remove dependencies on Drupal's default session handling.
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilderProxy.php b/core/lib/Drupal/Core/Routing/RouteBuilderProxy.php
new file mode 100644
index 0000000..5dffeed
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/RouteBuilderProxy.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Routing\RouteBuilderProxy.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Drupal\Core\State\StateInterface;
+use Symfony\Component\DependencyInjection\ContainerAware;
+
+/**
+ * A simple service to be used instead of the route builder.
+ *
+ * The route builder service is required by quite a few other services,
+ * however it has a lot of dependencies and it is faster/simpler to only
+ * instantiate it when actually needed
+ */
+class RouteBuilderProxy extends ContainerAware implements RouteBuilderInterface {
+
+  /**
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
+   * @param \Drupal\Core\State\StateInterface $state
+   */
+  public function __construct(StateInterface $state) {
+    $this->state = $state;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function rebuild() {
+    return $this->routeBuilder()->rebuild();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCollectionDuringRebuild() {
+    return $this->routeBuilder()->getCollectionDuringRebuild();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function rebuildIfNeeded() {
+    if ($this->state->get(static::REBUILD_NEEDED, FALSE)) {
+      return $this->rebuild();
+    }
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRebuildNeeded() {
+    $this->state->set(static::REBUILD_NEEDED, TRUE);
+  }
+
+  /**
+   * @return \Drupal\Core\Routing\RouteBuilderInterface
+   */
+  protected function routeBuilder() {
+    return $this->container->get('router.builder.real');
+  }
+
+}
diff --git a/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php b/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
index 9e7d313..fc8704f 100644
--- a/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
+++ b/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
-use Drupal\Core\Routing\RouteBuilder;
 use Drupal\Core\Routing\RouteBuilderInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
