diff --git a/core/core.services.yml b/core/core.services.yml
index f306a0d..4c3868b 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -374,8 +374,6 @@ services:
     arguments: ['@config.factory']
   request_stack:
     class: Symfony\Component\HttpFoundation\RequestStack
-    tags:
-      - { name: persist }
   current_route_match:
      class: Drupal\Core\Routing\CurrentRouteMatch
      arguments: ['@request_stack']
@@ -455,8 +453,6 @@ services:
     arguments: ['@database']
   router.request_context:
     class: Drupal\Core\Routing\RequestContext
-    tags:
-      - { name: persist }
     calls:
       - [fromRequestStack, ['@request_stack']]
   router.admin_context:
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 600fd21..a707240 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -927,33 +927,6 @@ protected function initializeCookieGlobals(Request $request) {
   }
 
   /**
-   * Returns service instances to persist from an old container to a new one.
-   */
-  protected function getServicesToPersist(ContainerInterface $container) {
-    $persist = array();
-    foreach ($container->getParameter('persistIds') as $id) {
-      // It's pointless to persist services not yet initialized.
-      if ($container->initialized($id)) {
-        $persist[$id] = $container->get($id);
-      }
-    }
-    return $persist;
-  }
-
-  /**
-   * Moves persistent service instances into a new container.
-   */
-  protected function persistServices(ContainerInterface $container, array $persist) {
-    foreach ($persist as $id => $object) {
-      // Do not override services already set() on the new container, for
-      // example 'service_container'.
-      if (!$container->initialized($id)) {
-        $container->set($id, $object);
-      }
-    }
-  }
-
-  /**
    * Force a container rebuild.
    *
    * @return \Symfony\Component\DependencyInjection\ContainerInterface
@@ -974,12 +947,6 @@ public function rebuildContainer() {
    * @return ContainerInterface
    */
   protected function attachSynthetic(ContainerInterface $container) {
-    $persist = array();
-    if (isset($this->container)) {
-      $persist = $this->getServicesToPersist($this->container);
-    }
-    $this->persistServices($container, $persist);
-
     // All namespaces must be registered before we attempt to use any service
     // from the container.
     $this->classLoaderAddMultiplePsr4($container->getParameter('container.namespaces'));
@@ -988,6 +955,25 @@ protected function attachSynthetic(ContainerInterface $container) {
 
     // Set the class loader which was registered as a synthetic service.
     $container->set('class_loader', $this->classLoader);
+
+    // Restore request stack.
+    if (isset($this->container)) {
+      $requests = [];
+
+      $original_request_stack = clone $this->container->get('request_stack');
+      while ($request = $original_request_stack->pop()) {
+        $requests[] = $request;
+      }
+
+      while ($request = array_shift($requests)) {
+        $container->get('request_stack')->push($request);
+      }
+
+      if ($request) {
+        $container->get('router.request_context')->fromRequest($request);
+      }
+    }
+
     return $container;
   }
 
@@ -1071,18 +1057,6 @@ protected function compileContainer() {
       }
     }
 
-    // Identify all services whose instances should be persisted when rebuilding
-    // the container during the lifetime of the kernel (e.g., during a kernel
-    // reboot). Include synthetic services, because by definition, they cannot
-    // be automatically reinstantiated. Also include services tagged to persist.
-    $persist_ids = array();
-    foreach ($container->getDefinitions() as $id => $definition) {
-      if ($definition->isSynthetic() || $definition->getTag('persist')) {
-        $persist_ids[] = $id;
-      }
-    }
-    $container->setParameter('persistIds', $persist_ids);
-
     $container->compile();
     return $container;
   }
diff --git a/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php b/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
index 6e93561..4071100 100644
--- a/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
+++ b/core/lib/Drupal/Core/Installer/InstallerServiceProvider.php
@@ -71,16 +71,6 @@ public function alter(ContainerBuilder $container) {
     // ConfigFactory would to try to load language overrides and InstallStorage
     // throws an exception upon trying to load a non-existing file.
     $container->get('config.factory')->setOverrideState(FALSE);
-
-    // No service may persist when the early installer kernel is rebooted into
-    // the production environment.
-    // @todo The DrupalKernel reboot performed by drupal_install_system() is
-    //   actually not a "regular" reboot (like ModuleHandler::install()), so
-    //   services are not actually persisted.
-    foreach ($container->findTaggedServiceIds('persist') as $id => $tags) {
-      $definition = $container->getDefinition($id);
-      $definition->clearTag('persist');
-    }
   }
 
 }
