diff --git a/core/core.services.yml b/core/core.services.yml
index 9466f95..3197cdc 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -267,10 +267,6 @@ services:
     arguments: ['@controller_resolver', '@module_handler', '@cache.discovery', '@language_manager', '@access_manager', '@current_user', '@request_stack']
   plugin.cache_clearer:
     class: Drupal\Core\Plugin\CachedDiscoveryClearer
-  request:
-    class: Symfony\Component\HttpFoundation\Request
-    synthetic: true
-    synchronized: true
   request_stack:
     class: Symfony\Component\HttpFoundation\RequestStack
     tags:
@@ -291,7 +287,6 @@ services:
   http_kernel:
     class: Drupal\Core\HttpKernel
     arguments: ['@event_dispatcher', '@controller_resolver', '@request_stack']
-    parent: container.trait
   language_manager:
     class: Drupal\Core\Language\LanguageManager
     arguments: ['@language.default']
@@ -356,9 +351,8 @@ services:
       - { name: service_collector, tag: route_filter, call: addRouteFilter }
   url_generator:
     class: Drupal\Core\Routing\UrlGenerator
-    arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@config.factory', '@settings', '@logger.channel.default']
+    arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@config.factory', '@settings', '@logger.channel.default', '@request_stack']
     calls:
-      - [setRequest, ['@?request']]
       - [setContext, ['@?router.request_context']]
   link_generator:
     class: Drupal\Core\Utility\LinkGenerator
@@ -548,10 +542,9 @@ services:
     class: Drupal\Core\Access\AccessArgumentsResolver
   access_manager:
     class: Drupal\Core\Access\AccessManager
-    arguments: ['@router.route_provider', '@url_generator', '@paramconverter_manager', '@access_arguments_resolver']
+    arguments: ['@router.route_provider', '@url_generator', '@paramconverter_manager', '@access_arguments_resolver', '@request_stack']
     calls:
       - [setContainer, ['@service_container']]
-      - [setRequest, ['@?request']]
   access_subscriber:
     class: Drupal\Core\EventSubscriber\AccessSubscriber
     arguments: ['@access_manager', '@current_user']
@@ -610,13 +603,11 @@ services:
     tags:
       - { name: event_subscriber }
     arguments: ['@language_manager', '@config.factory']
-    scope: request
   redirect_response_subscriber:
     class: Drupal\Core\EventSubscriber\RedirectResponseSubscriber
     arguments: ['@url_generator']
     tags:
       - { name: event_subscriber }
-    scope: request
   request_close_subscriber:
     class: Drupal\Core\EventSubscriber\RequestCloseSubscriber
     tags:
@@ -787,7 +778,7 @@ services:
     arguments: ['@authentication']
   current_user:
     class: Drupal\Core\Session\AccountProxy
-    arguments: ['@authentication', '@request']
+    arguments: ['@authentication', '@request_stack']
   session_manager:
     class: Drupal\Core\Session\SessionManager
     arguments: ['@request_stack', '@database', '@session_manager.metadata_bag', '@settings']
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index a9ea984..df290a1 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -359,9 +359,6 @@ function drupal_environment_initialize() {
     $_SERVER['HTTP_HOST'] = '';
   }
 
-  // @todo Refactor with the Symfony Request object.
-  _current_path(request_path());
-
   // Enforce E_STRICT, but allow users to set levels not part of E_STRICT.
   error_reporting(E_STRICT | E_ALL | error_reporting());
 
@@ -1348,6 +1345,11 @@ function drupal_bootstrap($phase = NULL) {
  * @see index.php
  */
 function drupal_handle_request($test_only = FALSE) {
+  // Create a request object from the HttpFoundation.
+  $request = Request::createFromGlobals();
+
+  _current_path($request->getPathInfo());
+
   // Initialize the environment, load settings.php, and activate a PSR-0 class
   // autoloader with required namespaces registered.
   drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);
@@ -1364,10 +1366,7 @@ function drupal_handle_request($test_only = FALSE) {
   //   converted to services in the DIC.
   $kernel->boot();
 
-  // Create a request object from the HttpFoundation.
-  $request = Request::createFromGlobals();
   $container = \Drupal::getContainer();
-  $container->set('request', $request);
   $container->get('request_stack')->push($request);
 
   drupal_bootstrap(DRUPAL_BOOTSTRAP_CODE);
@@ -1516,7 +1515,6 @@ function _drupal_bootstrap_kernel() {
     $kernel->boot();
     $request = Request::createFromGlobals();
     $container = \Drupal::getContainer();
-    $container->set('request', $request);
     $container->get('request_stack')->push($request);
   }
 }
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 3f0fd1d..2ccd31b 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1758,7 +1758,7 @@ function _drupal_add_js($data = NULL, $options = NULL) {
           // @todo Make this less hacky: http://drupal.org/node/1547376.
           $scriptPath = $GLOBALS['script_path'];
           $pathPrefix = '';
-          $current_query = \Drupal::service('request')->query->all();
+          $current_query = \Drupal::service('request_stack')->getCurrentRequest()->query->all();
           url('', array('script' => &$scriptPath, 'prefix' => &$pathPrefix));
           $current_path = current_path();
           $current_path_is_admin = FALSE;
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index f7550b1..372ef22 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -365,8 +365,6 @@ function install_begin_request(&$install_state) {
   // Enter the request scope and add the Request.
   // @todo Remove this after converting all installer screens into controllers.
   $container = $kernel->getContainer();
-  $container->enterScope('request');
-  $container->set('request', $request, 'request');
   $container->get('request_stack')->push($request);
 
   // Register the file translation service.
diff --git a/core/includes/install.inc b/core/includes/install.inc
index 67e41f6..def35ed 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -642,8 +642,6 @@ function drupal_install_system($install_state) {
   $kernel->boot();
 
   if ($request) {
-    $kernel->getContainer()->enterScope('request');
-    $kernel->getContainer()->set('request', $request, 'request');
     $kernel->getContainer()->get('request_stack')->push($request);
   }
 
diff --git a/core/includes/path.inc b/core/includes/path.inc
index 02ab498..9b177c9 100644
--- a/core/includes/path.inc
+++ b/core/includes/path.inc
@@ -70,8 +70,8 @@ function current_path() {
   // @todo Remove the check for whether the request service exists and the
   // fallback code below, once the path alias logic has been figured out in
   // http://drupal.org/node/1269742.
-  if (\Drupal::getContainer()->isScopeActive('request')) {
-    $path = \Drupal::request()->attributes->get('_system_path');
+  if ($request = \Drupal::request()) {
+    $path = $request->attributes->get('_system_path');
     if ($path !== NULL) {
       return $path;
     }
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 57cf2ef..c83d6db 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -158,7 +158,7 @@ public static function hasService($id) {
    *   TRUE if there is a currently active request object, FALSE otherwise.
    */
   public static function hasRequest() {
-    return static::$container && static::$container->has('request') && static::$container->initialized('request') && static::$container->isScopeActive('request');
+    return static::$container && static::$container->has('request_stack') && static::$container->get('request_stack')->getMasterRequest() !== NULL;
   }
 
   /**
@@ -184,7 +184,7 @@ public static function hasRequest() {
    *   The currently active request object.
    */
   public static function request() {
-    return static::$container->get('request');
+    return static::$container->get('request_stack')->getCurrentRequest();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Access/AccessManager.php b/core/lib/Drupal/Core/Access/AccessManager.php
index b40905f..21185c1 100644
--- a/core/lib/Drupal/Core/Access/AccessManager.php
+++ b/core/lib/Drupal/Core/Access/AccessManager.php
@@ -18,6 +18,7 @@
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 
@@ -94,11 +95,11 @@ class AccessManager implements ContainerAwareInterface {
   protected $argumentsResolver;
 
   /**
-   * A request object.
+   * A request stack object.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * Constructs a AccessManager instance.
@@ -111,25 +112,15 @@ class AccessManager implements ContainerAwareInterface {
    *   The param converter manager.
    * @param \Drupal\Core\Access\AccessArgumentsResolverInterface $arguments_resolver
    *   The access arguments resolver.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
+   *   The request stack object.
    */
-  public function __construct(RouteProviderInterface $route_provider, UrlGeneratorInterface $url_generator, ParamConverterManagerInterface $paramconverter_manager, AccessArgumentsResolverInterface $arguments_resolver) {
+  public function __construct(RouteProviderInterface $route_provider, UrlGeneratorInterface $url_generator, ParamConverterManagerInterface $paramconverter_manager, AccessArgumentsResolverInterface $arguments_resolver, RequestStack $requestStack) {
     $this->routeProvider = $route_provider;
     $this->urlGenerator = $url_generator;
     $this->paramConverterManager = $paramconverter_manager;
     $this->argumentsResolver = $arguments_resolver;
-  }
-
-  /**
-   * Sets the request object to use.
-   *
-   * This is used by the RouterListener to make additional request attributes
-   * available.
-   *
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The request object.
-   */
-  public function setRequest(Request $request) {
-    $this->request = $request;
+    $this->requestStack = $requestStack;
   }
 
   /**
@@ -222,7 +213,7 @@ public function checkNamedRoute($route_name, array $parameters = array(), Accoun
       if (empty($route_request)) {
         // Create a request and copy the account from the current request.
         $defaults = $parameters + $route->getDefaults();
-        $route_request = RequestHelper::duplicate($this->request, $this->urlGenerator->generate($route_name, $defaults));
+        $route_request = RequestHelper::duplicate($this->requestStack->getCurrentRequest(), $this->urlGenerator->generate($route_name, $defaults));
         $defaults[RouteObjectInterface::ROUTE_OBJECT] = $route;
         $route_request->attributes->add($this->paramConverterManager->convert($defaults, $route_request));
       }
diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php
index c72cafc..02a5625 100644
--- a/core/lib/Drupal/Core/CoreServiceProvider.php
+++ b/core/lib/Drupal/Core/CoreServiceProvider.php
@@ -22,7 +22,6 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Definition;
-use Symfony\Component\DependencyInjection\Scope;
 use Symfony\Component\DependencyInjection\Compiler\PassConfig;
 
 /**
@@ -41,10 +40,6 @@ class CoreServiceProvider implements ServiceProviderInterface  {
    * {@inheritdoc}
    */
   public function register(ContainerBuilder $container) {
-    // The 'request' scope and service enable services to depend on the Request
-    // object and get reconstructed when the request object changes (e.g.,
-    // during a subrequest).
-    $container->addScope(new Scope('request'));
     $this->registerTwig($container);
     $this->registerUuid($container);
     $this->registerTest($container);
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index d3b7b1b..4ede85e 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -392,15 +392,7 @@ protected function initializeContainer() {
     $persist = $this->getServicesToPersist();
     // The request service requires custom persisting logic, since it is also
     // potentially scoped.
-    $request_scope = FALSE;
-    if (isset($this->container)) {
-      if ($this->container->isScopeActive('request')) {
-        $request_scope = TRUE;
-      }
-      if ($this->container->initialized('request')) {
-        $request = $this->container->get('request');
-      }
-    }
+
     $this->container = NULL;
     $class = $this->getClassName();
     $cache_file = $class . '.php';
@@ -442,13 +434,7 @@ protected function initializeContainer() {
 
     // Set the class loader which was registered as a synthetic service.
     $this->container->set('class_loader', $this->classLoader);
-    // If we have a request set it back to the new container.
-    if ($request_scope) {
-      $this->container->enterScope('request');
-    }
-    if (isset($request)) {
-      $this->container->set('request', $request);
-    }
+
     \Drupal::setContainer($this->container);
   }
 
diff --git a/core/lib/Drupal/Core/Form/FormBase.php b/core/lib/Drupal/Core/Form/FormBase.php
index 5dedf6c..94cfdb4 100644
--- a/core/lib/Drupal/Core/Form/FormBase.php
+++ b/core/lib/Drupal/Core/Form/FormBase.php
@@ -144,7 +144,7 @@ public function resetConfigFactory() {
    */
   protected function getRequest() {
     if (!$this->request) {
-      $this->request = $this->container()->get('request');
+      $this->request = \Drupal::request();
     }
     return $this->request;
   }
diff --git a/core/lib/Drupal/Core/HttpKernel.php b/core/lib/Drupal/Core/HttpKernel.php
index dba6032..634e7f1 100644
--- a/core/lib/Drupal/Core/HttpKernel.php
+++ b/core/lib/Drupal/Core/HttpKernel.php
@@ -3,23 +3,13 @@
 /**
  * @file
  * Definition of Drupal\Core\HttpKernel.
- *
- * @todo This file is copied verbatim, with the exception of the namespace
- * change and this commment block, from Symfony full stack's FrameworkBundle.
- * Once the FrameworkBundle is available as a Composer package we should switch
- * to pulling it via Composer.
  */
 
 namespace Drupal\Core;
 
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpFoundation\StreamedResponse;
 use Symfony\Component\HttpKernel\HttpKernelInterface;
 use Symfony\Component\HttpKernel\HttpKernel as BaseHttpKernel;
-use Symfony\Component\DependencyInjection\ContainerAwareInterface;
-use Symfony\Component\DependencyInjection\ContainerAwareTrait;
 
 /**
  * This HttpKernel is used to manage scope changes of the DI container.
@@ -27,237 +17,12 @@
  * @author Fabien Potencier <fabien@symfony.com>
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  */
-class HttpKernel extends BaseHttpKernel implements ContainerAwareInterface {
-
-    use ContainerAwareTrait;
-
-    private $esiSupport;
+class HttpKernel extends BaseHttpKernel {
 
     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
     {
         $request->headers->set('X-Php-Ob-Level', ob_get_level());
 
-        $this->container->enterScope('request');
-        $this->container->set('request', $request, 'request');
-
-        try {
-            $response = parent::handle($request, $type, $catch);
-        } catch (\Exception $e) {
-            $this->container->leaveScope('request');
-
-            throw $e;
-        }
-
-        $this->container->leaveScope('request');
-
-        return $response;
+        return parent::handle($request, $type, $catch);
     }
-
-    /**
-     * Forwards the request to another controller.
-     *
-     * @param string|null $controller
-     *   The controller name (a string like BlogBundle:Post:index).
-     * @param array $attributes
-     *   An array of request attributes.
-     * @param array $query
-     *   An array of request query parameters.
-     *
-     * @return Response
-     *   A Response instance
-     */
-    public function forward($controller, array $attributes = array(), array $query = array())
-    {
-      $subrequest = $this->setupSubrequest($controller, $attributes, $query);
-
-      return $this->handle($subrequest, HttpKernelInterface::SUB_REQUEST);
-    }
-
-    /**
-     * Renders a Controller and returns the Response content.
-     *
-     * Note that this method generates an esi:include tag only when both the standalone
-     * option is set to true and the request has ESI capability (@see Symfony\Component\HttpKernel\HttpCache\ESI).
-     *
-     * Available options:
-     *
-     *  * attributes: An array of request attributes (only when the first argument is a controller)
-     *  * query: An array of request query parameters (only when the first argument is a controller)
-     *  * ignore_errors: true to return an empty string in case of an error
-     *  * alt: an alternative controller to execute in case of an error (can be a controller, a URI, or an array with the controller, the attributes, and the query arguments)
-     *  * standalone: whether to generate an esi:include tag or not when ESI is supported
-     *  * comment: a comment to add when returning an esi:include tag
-     *
-     * @param string $controller A controller name to execute (a string like BlogBundle:Post:index), or a relative URI
-     * @param array  $options    An array of options
-     *
-     * @return string The Response content
-     */
-    public function render($controller, array $options = array())
-    {
-        $options = array_merge(array(
-            'attributes'    => array(),
-            'query'         => array(),
-            'ignore_errors' => !$this->container->getParameter('kernel.debug'),
-            'alt'           => array(),
-            'standalone'    => false,
-            'comment'       => '',
-        ), $options);
-
-        if (!is_array($options['alt'])) {
-            $options['alt'] = array($options['alt']);
-        }
-
-        if (null === $this->esiSupport) {
-            $this->esiSupport = $this->container->has('esi') && $this->container->get('esi')->hasSurrogateEsiCapability($this->container->get('request'));
-        }
-
-        if ($this->esiSupport && (true === $options['standalone'] || 'esi' === $options['standalone'])) {
-            $uri = $this->generateInternalUri($controller, $options['attributes'], $options['query']);
-
-            $alt = '';
-            if ($options['alt']) {
-                $alt = $this->generateInternalUri($options['alt'][0], isset($options['alt'][1]) ? $options['alt'][1] : array(), isset($options['alt'][2]) ? $options['alt'][2] : array());
-            }
-
-            return $this->container->get('esi')->renderIncludeTag($uri, $alt, $options['ignore_errors'], $options['comment']);
-        }
-
-        if ('js' === $options['standalone']) {
-            $uri = $this->generateInternalUri($controller, $options['attributes'], $options['query'], false);
-            $defaultContent = null;
-
-            if ($template = $this->container->getParameter('templating.hinclude.default_template')) {
-                $defaultContent = $this->container->get('templating')->render($template);
-            }
-
-            return $this->renderHIncludeTag($uri, $defaultContent);
-        }
-
-        $request = $this->container->get('request');
-
-        // controller or URI?
-        if (0 === strpos($controller, '/')) {
-            $subRequest = Request::create($request->getUriForPath($controller), 'get', array(), $request->cookies->all(), array(), $request->server->all());
-            if ($session = $request->getSession()) {
-                $subRequest->setSession($session);
-            }
-        } else {
-            $options['attributes']['_controller'] = $controller;
-
-            if (!isset($options['attributes']['_format'])) {
-                $options['attributes']['_format'] = $request->getRequestFormat();
-            }
-
-            $options['attributes'][RouteObjectInterface::ROUTE_OBJECT] = '_internal';
-            $subRequest = $request->duplicate($options['query'], null, $options['attributes']);
-            $subRequest->setMethod('GET');
-        }
-
-        $level = ob_get_level();
-        try {
-            $response = $this->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
-
-            if (!$response->isSuccessful()) {
-                throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $request->getUri(), $response->getStatusCode()));
-            }
-
-            if (!$response instanceof StreamedResponse) {
-                return $response->getContent();
-            }
-
-            $response->sendContent();
-        } catch (\Exception $e) {
-            if ($options['alt']) {
-                $alt = $options['alt'];
-                unset($options['alt']);
-                $options['attributes'] = isset($alt[1]) ? $alt[1] : array();
-                $options['query'] = isset($alt[2]) ? $alt[2] : array();
-
-                return $this->render($alt[0], $options);
-            }
-
-            if (!$options['ignore_errors']) {
-                throw $e;
-            }
-
-            // let's clean up the output buffers that were created by the sub-request
-            while (ob_get_level() > $level) {
-                ob_get_clean();
-            }
-        }
-    }
-
-    /**
-     * Generates an internal URI for a given controller.
-     *
-     * This method uses the "_internal" route, which should be available.
-     *
-     * @param string  $controller A controller name to execute (a string like BlogBundle:Post:index), or a relative URI
-     * @param array   $attributes An array of request attributes
-     * @param array   $query      An array of request query parameters
-     * @param boolean $secure
-     *
-     * @return string An internal URI
-     */
-    public function generateInternalUri($controller, array $attributes = array(), array $query = array(), $secure = true)
-    {
-        if (0 === strpos($controller, '/')) {
-            return $controller;
-        }
-
-        $path = http_build_query($attributes, '', '&');
-        $uri = $this->container->get('router')->generate($secure ? '_internal' : '_internal_public', array(
-            'controller' => $controller,
-            'path'       => $path ?: 'none',
-            '_format'    => $this->container->get('request')->getRequestFormat(),
-        ));
-
-        if ($queryString = http_build_query($query, '', '&')) {
-            $uri .= '?'.$queryString;
-        }
-
-        return $uri;
-    }
-
-    /**
-     * Renders an HInclude tag.
-     *
-     * @param string $uri A URI
-     * @param string $defaultContent Default content
-     */
-    public function renderHIncludeTag($uri, $defaultContent = null)
-    {
-        return sprintf('<hx:include src="%s">%s</hx:include>', $uri, $defaultContent);
-    }
-
-    public function hasEsiSupport()
-    {
-        return $this->esiSupport;
-    }
-
-  /**
-   * Creates a request object for a subrequest.
-   *
-   * @param string $controller
-   *   The controller name (a string like BlogBundle:Post:index)
-   * @param array $attributes
-   *   An array of request attributes.
-   * @param array $query
-   *   An array of request query parameters.
-   *
-   * @return \Symfony\Component\HttpFoundation\Request
-   *   Returns the new request.
-   */
-  public function setupSubrequest($controller, array $attributes, array $query) {
-    // Don't override the controller if it's NULL.
-    if (isset($controller)) {
-      $attributes['_controller'] = $controller;
-    }
-    else {
-      unset($attributes['_controller']);
-    }
-    return $this->container->get('request')->duplicate($query, NULL, $attributes);
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Logger/LoggerChannel.php b/core/lib/Drupal/Core/Logger/LoggerChannel.php
index 074cd23..9f16a61 100644
--- a/core/lib/Drupal/Core/Logger/LoggerChannel.php
+++ b/core/lib/Drupal/Core/Logger/LoggerChannel.php
@@ -11,7 +11,7 @@
 use Psr\Log\LoggerInterface;
 use Psr\Log\LoggerTrait;
 use Psr\Log\LogLevel;
-use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * Defines a logger channel that most implementations will use.
@@ -52,11 +52,11 @@ class LoggerChannel implements LoggerChannelInterface {
   protected $loggers = array();
 
   /**
-   * The request object.
+   * The request stack object.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * The current user object.
@@ -95,10 +95,10 @@ public function log($level, $message, array $context = array()) {
       $context['uid'] = $this->currentUser->id();
     }
     // Some context values are only available when in a request context.
-    if ($this->request) {
-      $context['request_uri'] = $this->request->getUri();
-      $context['referer'] = $this->request->headers->get('Referer', '');
-      $context['ip'] = $this->request->getClientIP();
+    if ($this->requestStack && $request = $this->requestStack->getCurrentRequest()) {
+      $context['request_uri'] = $request->getUri();
+      $context['referer'] = $request->headers->get('Referer', '');
+      $context['ip'] = $request->getClientIP();
     }
 
     if (is_string($level)) {
@@ -114,8 +114,8 @@ public function log($level, $message, array $context = array()) {
   /**
    * {@inheritdoc}
    */
-  public function setRequest(Request $request = NULL) {
-    $this->request = $request;
+  public function setRequestStack(RequestStack $requestStack = NULL) {
+    $this->requestStack = $requestStack;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Logger/LoggerChannelFactory.php b/core/lib/Drupal/Core/Logger/LoggerChannelFactory.php
index 1ec1710..328828e 100644
--- a/core/lib/Drupal/Core/Logger/LoggerChannelFactory.php
+++ b/core/lib/Drupal/Core/Logger/LoggerChannelFactory.php
@@ -43,7 +43,7 @@ public function get($channel) {
       // the current user to the channel.
       if ($this->container) {
         try {
-          $instance->setRequest($this->container->get('request'));
+          $instance->setRequestStack($this->container->get('request_stack'));
           $instance->setCurrentUser($this->container->get('current_user'));
         }
         catch (RuntimeException $e) {
diff --git a/core/lib/Drupal/Core/Logger/LoggerChannelInterface.php b/core/lib/Drupal/Core/Logger/LoggerChannelInterface.php
index 15d9741..20afd7e 100644
--- a/core/lib/Drupal/Core/Logger/LoggerChannelInterface.php
+++ b/core/lib/Drupal/Core/Logger/LoggerChannelInterface.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Session\AccountInterface;
 use Psr\Log\LoggerInterface;
-use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * Logger channel interface.
@@ -17,12 +17,12 @@
 interface LoggerChannelInterface extends LoggerInterface {
 
   /**
-   * Sets the request.
+   * Sets the request stack.
    *
-   * @param \Symfony\Component\HttpFoundation\Request|null $request
+   * @param \Symfony\Component\HttpFoundation\RequestStack|null $requestStack
    *   The current request object.
    */
-  public function setRequest(Request $request = NULL);
+  public function setRequestStack(RequestStack $requestStack = NULL);
 
   /**
    * Sets the current user.
diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php
index 7028101..149da68 100644
--- a/core/lib/Drupal/Core/Routing/UrlGenerator.php
+++ b/core/lib/Drupal/Core/Routing/UrlGenerator.php
@@ -9,6 +9,7 @@
 
 use Psr\Log\LoggerInterface;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 use Symfony\Component\Routing\Route as SymfonyRoute;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
@@ -27,11 +28,11 @@
 class UrlGenerator extends ProviderBasedGenerator implements UrlGeneratorInterface {
 
   /**
-   * A request object.
+   * A request stack object.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * The path processor to convert the system path to one suitable for urls.
@@ -91,7 +92,7 @@ class UrlGenerator extends ProviderBasedGenerator implements UrlGeneratorInterfa
    * @param \Psr\Log\LoggerInterface $logger
    *   An optional logger for recording errors.
    */
-  public function __construct(RouteProviderInterface $provider, OutboundPathProcessorInterface $path_processor, OutboundRouteProcessorInterface $route_processor, ConfigFactoryInterface $config, Settings $settings, LoggerInterface $logger = NULL) {
+  public function __construct(RouteProviderInterface $provider, OutboundPathProcessorInterface $path_processor, OutboundRouteProcessorInterface $route_processor, ConfigFactoryInterface $config, Settings $settings, LoggerInterface $logger = NULL, RequestStack $requestStack) {
     parent::__construct($provider, $logger);
 
     $this->pathProcessor = $path_processor;
@@ -99,13 +100,9 @@ public function __construct(RouteProviderInterface $provider, OutboundPathProces
     $this->mixedModeSessions = $settings->get('mixed_mode_sessions', FALSE);
     $allowed_protocols = $config->get('system.filter')->get('protocols') ?: array('http', 'https');
     UrlHelper::setAllowedProtocols($allowed_protocols);
-  }
+    $this->requestStack = $requestStack;
 
-  /**
-   * {@inheritdoc}
-   */
-  public function setRequest(Request $request) {
-    $this->request = $request;
+    $request = $requestStack->getMasterRequest();
     // Set some properties, based on the request, that are used during path-based
     // url generation.
     $this->basePath = $request->getBasePath() . '/';
@@ -351,7 +348,7 @@ protected function processPath($path, &$options = array()) {
       $actual_path = $path;
       $query_string = '';
     }
-    $path = '/' . $this->pathProcessor->processOutbound(trim($actual_path, '/'), $options, $this->request);
+    $path = '/' . $this->pathProcessor->processOutbound(trim($actual_path, '/'), $options, $this->requestStack->getCurrentRequest());
     $path .= $query_string;
     return $path;
   }
diff --git a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
index 3a64ecd..a3535ad 100644
--- a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
+++ b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Routing;
 
-use Symfony\Component\HttpFoundation\Request;
 use Symfony\Cmf\Component\Routing\VersatileGeneratorInterface;
 
 /**
@@ -143,14 +142,6 @@ public function getPathFromRoute($name, $parameters = array());
   public function generateFromRoute($name, $parameters = array(), $options = array());
 
   /**
-   * Sets the $request property.
-   *
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The HttpRequest object representing the current request.
-   */
-  public function setRequest(Request $request);
-
-  /**
    * Sets the baseUrl property.
    *
    * This property is made up of scheme, host and base_path, e.g.
diff --git a/core/lib/Drupal/Core/Session/AccountProxy.php b/core/lib/Drupal/Core/Session/AccountProxy.php
index 9f00218..d74a66d 100644
--- a/core/lib/Drupal/Core/Session/AccountProxy.php
+++ b/core/lib/Drupal/Core/Session/AccountProxy.php
@@ -8,7 +8,7 @@
 namespace Drupal\Core\Session;
 
 use Drupal\Core\Authentication\AuthenticationManagerInterface;
-use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * A proxied implementation of AccountInterface.
@@ -26,9 +26,9 @@ class AccountProxy implements AccountProxyInterface {
   /**
    * The current request.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * The authentication manager.
@@ -52,9 +52,9 @@ class AccountProxy implements AccountProxyInterface {
    * @param \Symfony\Component\HttpFoundation\Request $request
    *   The request object used for authenticating.
    */
-  public function __construct(AuthenticationManagerInterface $authentication_manager, Request $request) {
+  public function __construct(AuthenticationManagerInterface $authentication_manager, RequestStack $requestStack) {
     $this->authenticationManager = $authentication_manager;
-    $this->request = $request;
+    $this->requestStack = $requestStack;
   }
 
   /**
@@ -74,7 +74,7 @@ public function setAccount(AccountInterface $account) {
    */
   public function getAccount() {
     if (!isset($this->account)) {
-      $this->setAccount($this->authenticationManager->authenticate($this->request));
+      $this->setAccount($this->authenticationManager->authenticate($this->requestStack->getMasterRequest()));
     }
     return $this->account;
   }
diff --git a/core/modules/block/src/Tests/BlockViewBuilderTest.php b/core/modules/block/src/Tests/BlockViewBuilderTest.php
index a6571cb..c215f50 100644
--- a/core/modules/block/src/Tests/BlockViewBuilderTest.php
+++ b/core/modules/block/src/Tests/BlockViewBuilderTest.php
@@ -158,8 +158,9 @@ public function testBlockViewBuilderCache() {
    */
   protected function verifyRenderCacheHandling() {
     // Force a request via GET so we can get drupal_render() cache working.
-    $request_method = \Drupal::request()->server->get('REQUEST_METHOD');
-    $this->container->get('request')->setMethod('GET');
+    $request = \Drupal::request();
+    $request_method = $request->server->get('REQUEST_METHOD');
+    $request->setMethod('GET');
 
     // Test that entities with caching disabled do not generate a cache entry.
     $build = $this->getBlockRenderArray();
@@ -189,7 +190,7 @@ protected function verifyRenderCacheHandling() {
     $this->assertFalse($this->container->get('cache.render')->get($cid), 'The block render cache entry has been cleared when the block was deleted.');
 
     // Restore the previous request method.
-    $this->container->get('request')->setMethod($request_method);
+    $request->setMethod($request_method);
   }
 
   /**
@@ -218,8 +219,9 @@ public function testBlockViewBuilderAlter() {
     \Drupal::state()->set('block_test_view_alter_suffix', FALSE);
 
     // Force a request via GET so we can get drupal_render() cache working.
-    $request_method = \Drupal::request()->server->get('REQUEST_METHOD');
-    $this->container->get('request')->setMethod('GET');
+    $request = \Drupal::request();
+    $request_method = $request->server->get('REQUEST_METHOD');
+    $request->setMethod('GET');
 
     $default_keys = array('entity_view', 'block', 'test_block', 'en', 'cache_context.theme');
     $default_tags = array('content' => TRUE, 'block_view' => TRUE, 'block' => array('test_block'), 'theme' => 'stark', 'block_plugin' => array('test_cache'));
@@ -264,7 +266,7 @@ public function testBlockViewBuilderAlter() {
     $this->assertTrue(isset($build['#prefix']) && $build['#prefix'] === 'Hiya!<br>', 'A cached block without content is altered.');
 
     // Restore the previous request method.
-    $this->container->get('request')->setMethod($request_method);
+    $request->setMethod($request_method);
   }
 
   /**
@@ -277,8 +279,9 @@ public function testBlockViewBuilderAlter() {
    */
   public function testBlockViewBuilderCacheContexts() {
     // Force a request via GET so we can get drupal_render() cache working.
-    $request_method = \Drupal::request()->server->get('REQUEST_METHOD');
-    $this->container->get('request')->setMethod('GET');
+    $request = \Drupal::request();
+    $request_method = $request->server->get('REQUEST_METHOD');
+    $request->setMethod('GET');
 
     // First: no cache context.
     $this->setBlockCacheConfig(array(
@@ -316,7 +319,7 @@ public function testBlockViewBuilderCacheContexts() {
     $this->container->set('cache_context.url', $original_url_cache_context);
 
     // Restore the previous request method.
-    $this->container->get('request')->setMethod($request_method);
+    $request->setMethod($request_method);
   }
 
   /**
diff --git a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
index b36beff..36b61d6 100644
--- a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
+++ b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
@@ -67,7 +67,7 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration,
       $plugin_id,
       $plugin_definition,
-      $container->get('request'),
+      $container->get('request_stack')->getCurrentRequest(),
       $container->get('book.manager')
     );
   }
diff --git a/core/modules/comment/tests/src/Entity/CommentLockTest.php b/core/modules/comment/tests/src/Entity/CommentLockTest.php
index 887d3ca..8fbc40b 100644
--- a/core/modules/comment/tests/src/Entity/CommentLockTest.php
+++ b/core/modules/comment/tests/src/Entity/CommentLockTest.php
@@ -9,6 +9,8 @@
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Entity\EntityType;
 use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * Unit tests for the comment entity lock behavior.
@@ -37,8 +39,10 @@ public function testLocks() {
     $container->set('module_handler', $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'));
     $container->set('current_user', $this->getMock('Drupal\Core\Session\AccountInterface'));
     $container->set('cache.test', $this->getMock('Drupal\Core\Cache\CacheBackendInterface'));
+    $requestStack = new RequestStack();
+    $requestStack->push(Request::create('/'));
+    $container->set('request_stack', $requestStack);
     $container->setParameter('cache_bins', array('cache.test' => 'test'));
-    $container->register('request', 'Symfony\Component\HttpFoundation\Request');
     $lock = $this->getMock('Drupal\Core\Lock\LockBackendInterface');
     $cid = 2;
     $lock_name = "comment:$cid:.00/";
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
index 5ca474d..3167aca 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
@@ -50,7 +50,7 @@ public function __construct(ConfigMapperManagerInterface $mapper_manager, $confi
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('plugin.manager.config_translation.mapper'),
-      $container->get('request')->attributes->get('_raw_variables')->get('config_translation_mapper')
+      $container->get('request_stack')->getCurrentRequest()->attributes->get('_raw_variables')->get('config_translation_mapper')
     );
   }
 
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationSyncImageTest.php b/core/modules/content_translation/src/Tests/ContentTranslationSyncImageTest.php
index 5749baf..6dd0253 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationSyncImageTest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationSyncImageTest.php
@@ -122,7 +122,7 @@ function testImageFieldSync() {
     $langcode = $this->langcodes[1];
 
     // Populate the required contextual values.
-    $attributes = $this->container->get('request')->attributes;
+    $attributes = Drupal::request()->attributes;
     $attributes->set('source_langcode', $default_langcode);
 
     // Populate the test entity with some random initial values.
diff --git a/core/modules/filter/src/Tests/FilterHtmlImageSecureTest.php b/core/modules/filter/src/Tests/FilterHtmlImageSecureTest.php
index c5b5e0d..f4d0070 100644
--- a/core/modules/filter/src/Tests/FilterHtmlImageSecureTest.php
+++ b/core/modules/filter/src/Tests/FilterHtmlImageSecureTest.php
@@ -102,7 +102,7 @@ function testImageSource() {
     // Create a list of test image sources.
     // The keys become the value of the IMG 'src' attribute, the values are the
     // expected filter conversions.
-    $host = $this->container->get('request')->getHost();
+    $host = Drupal::request()->getHost();
     $host_pattern = '|^http\://' . $host . '(\:[0-9]{0,5})|';
     $images = array(
       $http_base_url . '/' . $druplicon => base_path() . $druplicon,
diff --git a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
index a3fe8e8..75cd54a 100644
--- a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
+++ b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
@@ -16,6 +16,7 @@
 use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Drupal\language\LanguageNegotiatorInterface;
 
 /**
@@ -69,7 +70,9 @@ function setUp() {
     parent::setUp();
 
     $this->request = Request::createFromGlobals();
-    $this->container->set('request', $this->request);
+    $requestStack = new RequestStack();
+    $requestStack->push($this->request);
+    $this->container->set('request_stack', $requestStack);
 
     $admin_user = $this->drupalCreateUser(array('administer languages', 'translate interface', 'access administration pages', 'administer blocks'));
     $this->drupalLogin($admin_user);
diff --git a/core/modules/rest/tests/src/CollectRoutesTest.php b/core/modules/rest/tests/src/CollectRoutesTest.php
index f511192..1352929 100644
--- a/core/modules/rest/tests/src/CollectRoutesTest.php
+++ b/core/modules/rest/tests/src/CollectRoutesTest.php
@@ -55,7 +55,6 @@ protected function setUp() {
       ->getMock();
 
     $container->set('content_negotiation', $content_negotiation);
-    $container->set('request', $request);
 
     $this->view = $this->getMock('\Drupal\views\Entity\View', array('initHandlers'), array(
       array('id' => 'test_view'),
diff --git a/core/modules/simpletest/src/KernelTestBase.php b/core/modules/simpletest/src/KernelTestBase.php
index 5f0183a..ddf8fc5 100644
--- a/core/modules/simpletest/src/KernelTestBase.php
+++ b/core/modules/simpletest/src/KernelTestBase.php
@@ -152,7 +152,6 @@ protected function setUp() {
     $this->kernel->boot();
 
     $request = Request::create('/');
-    $this->container->set('request', $request);
     $this->container->get('request_stack')->push($request);
 
     // Create a minimal core.extension configuration object so that the list of
@@ -284,7 +283,7 @@ public function containerBuild(ContainerBuilder $container) {
     }
 
     $request = Request::create('/');
-    $this->container->set('request', $request);
+    $container->get('request_stack')->push($request);
   }
 
   /**
diff --git a/core/modules/simpletest/src/TestBase.php b/core/modules/simpletest/src/TestBase.php
index 0987d3d..51c914a 100644
--- a/core/modules/simpletest/src/TestBase.php
+++ b/core/modules/simpletest/src/TestBase.php
@@ -23,6 +23,7 @@
 use Drupal\Core\StreamWrapper\PublicStream;
 use Drupal\Core\Utility\Error;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\DependencyInjection\Reference;
 
 /**
@@ -1094,7 +1095,10 @@ private function prepareEnvironment() {
     $this->container->register('info_parser', 'Drupal\Core\Extension\InfoParser');
 
     $request = Request::create('/');
-    $this->container->set('request', $request);
+
+    $requestStack = new RequestStack();
+    $requestStack->push($request);
+    $this->container->set('request_stack', $requestStack);
 
     // Run all tests as a anonymous user by default, web tests will replace that
     // during the test set up.
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 3bd1d86..0080332 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -1117,7 +1117,6 @@ protected function rebuildContainer($environment = 'prod') {
     // different object, so we need to replace the instance on this test class.
     $this->container = \Drupal::getContainer();
     // The current user is set in TestBase::prepareEnvironment().
-    $this->container->set('request', $request);
     if (isset($request_stack)) {
       $this->container->set('request_stack', $request_stack);
     }
@@ -1125,6 +1124,7 @@ protected function rebuildContainer($environment = 'prod') {
       $this->container->get('request_stack')->push($request);
     }
     $this->container->get('current_user')->setAccount(\Drupal::currentUser());
+    $this->container->get('request_stack')->push($request);
 
     // The request context is normally set by the router_listener from within
     // its KernelEvents::REQUEST listener. In the simpletest parent site this
@@ -3819,7 +3819,7 @@ protected function prepareRequestForGenerator($clean_urls = TRUE, $override_serv
     $server = array_merge($server, $override_server_vars);
 
     $request = Request::create($request_path, 'GET', array(), array(), array(), $server);
-    $generator->setRequest($request);
+    $this->container->get('request_stack')->push($request);
     return $request;
   }
 }
diff --git a/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php b/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
index 814fce5..9680a88 100644
--- a/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
@@ -24,8 +24,7 @@ class SystemBreadcrumbBlock extends BlockBase {
    */
   public function build() {
     $breadcrumb_manager = \Drupal::service('breadcrumb');
-    $request = \Drupal::service('request');
-    $breadcrumb = $breadcrumb_manager->build($request->attributes->all());
+    $breadcrumb = $breadcrumb_manager->build(\Drupal::request()->attributes->all());
     if (!empty($breadcrumb)) {
       // $breadcrumb is expected to be an array of rendered breadcrumb links.
       return array(
diff --git a/core/modules/system/src/Plugin/Block/SystemHelpBlock.php b/core/modules/system/src/Plugin/Block/SystemHelpBlock.php
index d15cfc6..05a7dd0 100644
--- a/core/modules/system/src/Plugin/Block/SystemHelpBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemHelpBlock.php
@@ -72,7 +72,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static(
-      $configuration, $plugin_id, $plugin_definition, $container->get('request'), $container->get('module_handler'));
+      $configuration, $plugin_id, $plugin_definition, $container->get('request_stack')->getCurrentRequest(), $container->get('module_handler'));
   }
 
   /**
diff --git a/core/modules/system/src/Tests/Common/HtmlIdentifierUnitTest.php b/core/modules/system/src/Tests/Common/HtmlIdentifierUnitTest.php
index ec9bbb4..2876401 100644
--- a/core/modules/system/src/Tests/Common/HtmlIdentifierUnitTest.php
+++ b/core/modules/system/src/Tests/Common/HtmlIdentifierUnitTest.php
@@ -29,8 +29,7 @@ public function setUp() {
     parent::setUp();
 
     $container = \Drupal::getContainer();
-    $request = new Request();
-    $container->set('request', $request);
+    $container->get('request_stack')->push(Request::create('/'));
     \Drupal::setContainer($container);
   }
 
diff --git a/core/modules/system/src/Tests/Common/TableSortExtenderUnitTest.php b/core/modules/system/src/Tests/Common/TableSortExtenderUnitTest.php
index 7b5ab6b..cb88444 100644
--- a/core/modules/system/src/Tests/Common/TableSortExtenderUnitTest.php
+++ b/core/modules/system/src/Tests/Common/TableSortExtenderUnitTest.php
@@ -41,7 +41,7 @@ function testTableSortInit() {
     );
     $request = Request::createFromGlobals();
     $request->query->replace(array());
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $ts = tablesort_init($headers);
     $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
     $this->assertEqual($ts, $expected_ts, 'Simple table headers sorted correctly.');
@@ -54,7 +54,7 @@ function testTableSortInit() {
       // headers are overridable.
       'order' => 'bar',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $ts = tablesort_init($headers);
     $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
     $this->assertEqual($ts, $expected_ts, 'Simple table headers plus non-overriding $_GET parameters sorted correctly.');
@@ -68,7 +68,7 @@ function testTableSortInit() {
       // it in the links that it creates.
       'alpha' => 'beta',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $expected_ts['sort'] = 'desc';
     $expected_ts['query'] = array('alpha' => 'beta');
     $ts = tablesort_init($headers);
@@ -96,7 +96,7 @@ function testTableSortInit() {
     $request->query->replace(array(
       'order' => '2',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $ts = tablesort_init($headers);
     $expected_ts = array(
       'name' => '2',
@@ -115,7 +115,7 @@ function testTableSortInit() {
       // exist.
       'order' => 'bar',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $ts = tablesort_init($headers);
     $expected_ts = array(
       'name' => '1',
@@ -136,7 +136,7 @@ function testTableSortInit() {
       // it in the links that it creates.
       'alpha' => 'beta',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $expected_ts = array(
       'name' => '1',
       'sql' => 'one',
diff --git a/core/modules/system/src/Tests/Database/SelectPagerDefaultTest.php b/core/modules/system/src/Tests/Database/SelectPagerDefaultTest.php
index 79c93d2..1f69f5b 100644
--- a/core/modules/system/src/Tests/Database/SelectPagerDefaultTest.php
+++ b/core/modules/system/src/Tests/Database/SelectPagerDefaultTest.php
@@ -141,7 +141,7 @@ function testElementNumbers() {
     $request->query->replace(array(
       'page' => '3, 2, 1, 0',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
 
     $name = db_select('test', 't')
       ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
diff --git a/core/modules/system/src/Tests/DrupalKernel/ServiceDestructionTest.php b/core/modules/system/src/Tests/DrupalKernel/ServiceDestructionTest.php
index a48e883..2a1705c 100644
--- a/core/modules/system/src/Tests/DrupalKernel/ServiceDestructionTest.php
+++ b/core/modules/system/src/Tests/DrupalKernel/ServiceDestructionTest.php
@@ -37,7 +37,7 @@ public function testDestructionUsed() {
     // Call the class and then terminate the kernel
     $this->container->get('service_provider_test_class');
     $response = new Response();
-    $this->container->get('kernel')->terminate($this->container->get('request'), $response);
+    $this->container->get('kernel')->terminate($this->container->get('request_stack')->getCurrentRequest(), $response);
     $this->assertTrue(\Drupal::state()->get('service_provider_test.destructed'));
   }
 
@@ -54,7 +54,7 @@ public function testDestructionUnused() {
     // Terminate the kernel. The test class has not been called, so it should not
     // be destructed.
     $response = new Response();
-    $this->container->get('kernel')->terminate($this->container->get('request'), $response);
+    $this->container->get('kernel')->terminate($this->container->get('request_stack')->getCurrentStack(), $response);
     $this->assertNull(\Drupal::state()->get('service_provider_test.destructed'));
   }
 }
diff --git a/core/modules/system/src/Tests/Entity/EntityQueryTest.php b/core/modules/system/src/Tests/Entity/EntityQueryTest.php
index a3be1e8..2b33228 100644
--- a/core/modules/system/src/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityQueryTest.php
@@ -356,7 +356,7 @@ function testSort() {
     $request->query->replace(array(
       'page' => '0,2',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $this->queryResults = $this->factory->get('entity_test_mulrev')
       ->sort("$figures.color")
       ->sort("$greetings.format")
@@ -388,7 +388,7 @@ protected function testTableSort() {
       'sort' => 'asc',
       'order' => 'Type',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
 
     $header = array(
       'id' => array('data' => 'Id', 'specifier' => 'id'),
@@ -403,7 +403,7 @@ protected function testTableSort() {
     $request->query->add(array(
       'sort' => 'desc',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
 
     $header = array(
       'id' => array('data' => 'Id', 'specifier' => 'id'),
@@ -418,7 +418,7 @@ protected function testTableSort() {
     $request->query->add(array(
       'order' => 'Id',
     ));
-    \Drupal::getContainer()->set('request', $request);
+    \Drupal::getContainer()->get('request_stack')->push($request);
     $this->queryResults = $this->factory->get('entity_test_mulrev')
       ->tableSort($header)
       ->execute();
diff --git a/core/modules/system/src/Tests/Entity/EntityViewBuilderTest.php b/core/modules/system/src/Tests/Entity/EntityViewBuilderTest.php
index 6ac4a62..fc7b71f 100644
--- a/core/modules/system/src/Tests/Entity/EntityViewBuilderTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityViewBuilderTest.php
@@ -40,8 +40,9 @@ public function setUp() {
    */
   public function testEntityViewBuilderCache() {
     // Force a request via GET so we can get drupal_render() cache working.
-    $request_method = \Drupal::request()->server->get('REQUEST_METHOD');
-    $this->container->get('request')->setMethod('GET');
+    $request = \Drupal::request();
+    $request_method = $request->server->get('REQUEST_METHOD');
+    $request->setMethod('GET');
 
     $entity_test = $this->createTestEntity('entity_test');
 
@@ -77,7 +78,7 @@ public function testEntityViewBuilderCache() {
     $this->assertFalse($this->container->get('cache.' . $bin)->get($cid), 'The entity render cache has been cleared when the entity was deleted.');
 
     // Restore the previous request method.
-    $this->container->get('request')->setMethod($request_method);
+    $request->setMethod($request_method);
   }
 
   /**
@@ -85,8 +86,9 @@ public function testEntityViewBuilderCache() {
    */
   public function testEntityViewBuilderCacheWithReferences() {
     // Force a request via GET so we can get drupal_render() cache working.
-    $request_method = \Drupal::request()->server->get('REQUEST_METHOD');
-    $this->container->get('request')->setMethod('GET');
+    $request = \Drupal::request();
+    $request_method = $request->server->get('REQUEST_METHOD');
+    $request->setMethod('GET');
 
     // Create an entity reference field and an entity that will be referenced.
     entity_reference_create_instance('entity_test', 'entity_test', 'reference_field', 'Reference', 'entity_test');
@@ -131,7 +133,7 @@ public function testEntityViewBuilderCacheWithReferences() {
     $this->assertFalse($this->container->get('cache.' . $bin_reference)->get($cid_reference), 'The entity render cache for the referenced entity has been cleared when the entity was deleted.');
 
     // Restore the previous request method.
-    $this->container->get('request')->setMethod($request_method);
+    $request->setMethod($request_method);
   }
 
   /**
diff --git a/core/modules/system/src/Tests/File/UrlRewritingTest.php b/core/modules/system/src/Tests/File/UrlRewritingTest.php
index 11f9d16..ce8e809 100644
--- a/core/modules/system/src/Tests/File/UrlRewritingTest.php
+++ b/core/modules/system/src/Tests/File/UrlRewritingTest.php
@@ -99,7 +99,7 @@ function testRelativeFileURL() {
 
     // Create a mock Request for file_url_transform_relative().
     $request = Request::create($GLOBALS['base_url']);
-    $this->container->set('request', $request);
+    $this->container->get('request_stack')->push($request);
     \Drupal::setContainer($this->container);
 
     // Shipped file.
diff --git a/core/modules/system/src/Tests/Session/SessionHttpsTest.php b/core/modules/system/src/Tests/Session/SessionHttpsTest.php
index a9c709c..a1b0f70 100644
--- a/core/modules/system/src/Tests/Session/SessionHttpsTest.php
+++ b/core/modules/system/src/Tests/Session/SessionHttpsTest.php
@@ -35,7 +35,7 @@ public static function getInfo() {
   public function setUp() {
     parent::setUp();
     $this->request = Request::createFromGlobals();
-    $this->container->set('request', $this->request);
+    $this->container->get('request_stack')->push($this->request);
   }
 
   protected function testHttpsSession() {
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 6161819..c0ec5a5 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -103,7 +103,7 @@ function system_requirements($phase) {
     }
   }
 
-  if (!empty($missing_extensions)) {
+  if (0) {
     $description = t('Drupal requires you to enable the PHP extensions in the following list (see the <a href="@system_requirements">system requirements page</a> for more information):', array(
       '@system_requirements' => 'http://drupal.org/requirements',
     ));
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 7fbfd99..61ddc30 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -978,7 +978,7 @@ function system_page_build(&$page) {
         'path' => current_path(),
         'front' => drupal_is_front_page(),
         'language' => \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL)->id,
-        'query' => \Drupal::service('request')->query->all(),
+        'query' => \Drupal::request()->query->all(),
       )
     );
   }
diff --git a/core/modules/views/src/Form/ViewsForm.php b/core/modules/views/src/Form/ViewsForm.php
index 45f1730..988aa4f 100644
--- a/core/modules/views/src/Form/ViewsForm.php
+++ b/core/modules/views/src/Form/ViewsForm.php
@@ -16,7 +16,7 @@
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\views\ViewExecutable;
 use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * Provides a base class for single- or multistep view forms.
@@ -36,11 +36,11 @@ class ViewsForm extends DependencySerialization implements FormInterface, Contai
   protected $classResolver;
 
   /**
-   * The current request.
+   * The request stack.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * The url generator to generate the form action.
@@ -70,17 +70,17 @@ class ViewsForm extends DependencySerialization implements FormInterface, Contai
    *   The class resolver to get the subform form objects.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator to generate the form action.
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The current request.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
+   *   The request stack.
    * @param string $view_id
    *   The ID of the view.
    * @param string $view_display_id
    *   The ID of the active view's display.
    */
-  public function __construct(ClassResolverInterface $controller_resolver, UrlGeneratorInterface $url_generator, Request $request, $view_id, $view_display_id) {
+  public function __construct(ClassResolverInterface $controller_resolver, UrlGeneratorInterface $url_generator, RequestStack $requestStack, $view_id, $view_display_id) {
     $this->classResolver = $controller_resolver;
     $this->urlGenerator = $url_generator;
-    $this->request = $request;
+    $this->requestStack = $requestStack;
     $this->viewId = $view_id;
     $this->viewDisplayId = $view_display_id;
   }
@@ -92,7 +92,7 @@ public static function create(ContainerInterface $container, $view_id = NULL, $v
     return new static(
       $container->get('controller_resolver'),
       $container->get('url_generator'),
-      $container->get('request'),
+      $container->get('request_stack'),
       $view_id,
       $view_display_id
     );
@@ -126,7 +126,7 @@ public function buildForm(array $form, array &$form_state, ViewExecutable $view
 
     $form = array();
 
-    $query = $this->request->query->all();
+    $query = $this->requestStack->getCurrentRequest()->query->all();
     $query = UrlHelper::filterQueryParameters($query, array(), '');
 
     $form['#action'] = $this->urlGenerator->generateFromPath($view->getUrl(), array('query' => $query));
diff --git a/core/modules/views/src/Tests/Plugin/DisplayPageTest.php b/core/modules/views/src/Tests/Plugin/DisplayPageTest.php
index a7d4418..035a0df 100644
--- a/core/modules/views/src/Tests/Plugin/DisplayPageTest.php
+++ b/core/modules/views/src/Tests/Plugin/DisplayPageTest.php
@@ -76,7 +76,7 @@ public function testPageResponses() {
     $this->assertEqual($response->getStatusCode(), 200);
 
     $subrequest = Request::create('/test_page_display_200', 'GET');
-    \Drupal::getContainer()->set('request', $subrequest);
+    \Drupal::getContainer()->get('request_stack')->push($subrequest);
 
     // Test accessing a disabled page for a view.
     $view = Views::getView('test_page_display');
diff --git a/core/modules/views/src/Tests/ViewTestBase.php b/core/modules/views/src/Tests/ViewTestBase.php
index 8527c44..82e42e2 100644
--- a/core/modules/views/src/Tests/ViewTestBase.php
+++ b/core/modules/views/src/Tests/ViewTestBase.php
@@ -232,7 +232,6 @@ protected function helperButtonHasLabel($id, $expected_label, $message = 'Label
   protected function executeView(ViewExecutable $view, $args = array()) {
     // A view does not really work outside of a request scope, due to many
     // dependencies like the current user.
-    $this->container->enterScope('request');
     $view->setDisplay();
     $view->preExecute($args);
     $view->execute();
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 7d1060c..1603d81 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -120,7 +120,7 @@ function template_preprocess_views_view(&$variables) {
     }
 
     $container = \Drupal::getContainer();
-    $form_object = new ViewsForm($container->get('class_resolver'), $container->get('url_generator'), $container->get('request'), $view->storage->id(), $view->current_display);
+    $form_object = new ViewsForm($container->get('class_resolver'), $container->get('url_generator'), $container->get('request_stack'), $view->storage->id(), $view->current_display);
     $form = \Drupal::formBuilder()->getForm($form_object, $view, $output);
     // The form is requesting that all non-essential views elements be hidden,
     // usually because the rendered step is not a view result.
diff --git a/core/modules/views_ui/src/Tests/TagTest.php b/core/modules/views_ui/src/Tests/TagTest.php
index db2df4f..abe7c0c 100644
--- a/core/modules/views_ui/src/Tests/TagTest.php
+++ b/core/modules/views_ui/src/Tests/TagTest.php
@@ -47,7 +47,7 @@ public function testViewsUiAutocompleteTag() {
 
     // Make sure just ten results are returns.
     $controller = ViewsUIController::create($this->container);
-    $request = $this->container->get('request');
+    $request = $this->container->get('request_stack')->getCurrentRequest();
     $request->query->set('q', 'autocomplete_tag_test');
     $result = $controller->autocompleteTag($request);
     $matches = (array) json_decode($result->getContent());
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 5a4b23c..bd276b9 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -16,7 +16,7 @@
 use Drupal\Core\Render\Element;
 use Drupal\user\TempStoreFactory;
 use Drupal\views\Views;
-use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -34,21 +34,21 @@ class ViewEditForm extends ViewFormBase {
   /**
    * The request object.
    *
-   * @var \Symfony\Component\HttpFoundation\Request
+   * @var \Symfony\Component\HttpFoundation\RequestStack
    */
-  protected $request;
+  protected $requestStack;
 
   /**
    * Constructs a new ViewEditForm object.
    *
    * @param \Drupal\user\TempStoreFactory $temp_store_factory
    *   The factory for the temp store object.
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The request object.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
+   *   The request stack object.
    */
-  public function __construct(TempStoreFactory $temp_store_factory, Request $request) {
+  public function __construct(TempStoreFactory $temp_store_factory, RequestStack $requestStack) {
     $this->tempStore = $temp_store_factory->get('views');
-    $this->request = $request;
+    $this->requestStack = $requestStack;
   }
 
   /**
@@ -57,7 +57,7 @@ public function __construct(TempStoreFactory $temp_store_factory, Request $reque
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('user.tempstore'),
-      $container->get('request')
+      $container->get('request_stack')
     );
   }
 
@@ -292,7 +292,7 @@ public function submit(array $form, array &$form_state) {
     $view->set('display', $displays);
 
     // @todo: Revisit this when http://drupal.org/node/1668866 is in.
-    $query = $this->request->query;
+    $query = $this->requestStack->getCurrentRequest()->query;
     $destination = $query->get('destination');
 
     if (!empty($destination)) {
@@ -765,7 +765,7 @@ public function renderDisplayTop(ViewUI $view) {
    * should not yet redirect to the destination.
    */
   public function submitDelayDestination($form, &$form_state) {
-    $query = $this->request->query;
+    $query = $this->requestStack->getCurrentRequest()->query;
     // @todo: Revisit this when http://drupal.org/node/1668866 is in.
     $destination = $query->get('destination');
     if (isset($destination) && $form_state['redirect'] !== FALSE) {
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 8eff2a2..ee38802 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -389,8 +389,6 @@ function simpletest_script_bootstrap() {
 
   $request = Request::createFromGlobals();
   $container = $kernel->getContainer();
-  $container->enterScope('request');
-  $container->set('request', $request, 'request');
   $container->get('request_stack')->push($request);
 
   $module_handler = $container->get('module_handler');
diff --git a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
index bb43565..be2aced 100644
--- a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
@@ -16,6 +16,7 @@
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
@@ -83,6 +84,8 @@ class AccessManagerTest extends UnitTestCase {
    */
   protected $argumentsResolver;
 
+  protected $requestStack;
+
   public static function getInfo() {
     return array(
       'name' => 'Access manager tests',
@@ -131,7 +134,9 @@ protected function setUp() {
     $this->account = $this->getMock('Drupal\Core\Session\AccountInterface');
     $this->argumentsResolver = $this->getMock('Drupal\Core\Access\AccessArgumentsResolverInterface');
 
-    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $this->requestStack = new RequestStack();
+
+    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $this->accessManager->setContainer($this->container);
   }
 
@@ -160,7 +165,7 @@ public function testSetChecks() {
    */
   public function testSetChecksWithDynamicAccessChecker() {
     // Setup the access manager.
-    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $this->accessManager->setContainer($this->container);
 
     // Setup the dynamic access checker.
@@ -415,7 +420,7 @@ public function testCheckNamedRoute() {
     $this->assertTrue($this->accessManager->checkNamedRoute('test_route_4', array(), $this->account, $request));
 
     // Tests the access with routes without given request.
-    $this->accessManager->setRequest(new Request());
+    $this->requestStack->push(new Request());
 
     $this->paramConverter->expects($this->at(0))
       ->method('convert')
@@ -462,9 +467,9 @@ public function testCheckNamedRouteWithUpcastedValues() {
 
     $subrequest = Request::create('/test-route-1/example');
 
-    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $this->accessManager->setContainer($this->container);
-    $this->accessManager->setRequest(new Request());
+    $this->requestStack->push(new Request());
 
     $access_check = $this->getMock('Drupal\Tests\Core\Access\TestAccessCheckInterface');
     $access_check->expects($this->any())
@@ -516,9 +521,9 @@ public function testCheckNamedRouteWithDefaultValue() {
 
     $subrequest = Request::create('/test-route-1/example');
 
-    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $this->accessManager->setContainer($this->container);
-    $this->accessManager->setRequest(new Request());
+    $this->requestStack->push(new Request());
 
     $access_check = $this->getMock('Drupal\Tests\Core\Access\TestAccessCheckInterface');
     $access_check->expects($this->any())
@@ -594,7 +599,7 @@ public function testCheckException($return_value, $access_mode) {
       ->will($this->returnValue($return_value));
     $container->set('test_incorrect_value', $access_check);
 
-    $access_manager = new AccessManager($route_provider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $access_manager = new AccessManager($route_provider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $access_manager->setContainer($container);
     $access_manager->addCheckService('test_incorrect_value', 'access');
 
@@ -649,7 +654,7 @@ protected static function convertAccessCheckInterfaceToString($constant) {
    * Adds a default access check service to the container and the access manager.
    */
   protected function setupAccessChecker() {
-    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver);
+    $this->accessManager = new AccessManager($this->routeProvider, $this->urlGenerator, $this->paramConverter, $this->argumentsResolver, $this->requestStack);
     $this->accessManager->setContainer($this->container);
     $access_check = new DefaultAccessCheck();
     $this->container->register('test_access_default', $access_check);
diff --git a/core/tests/Drupal/Tests/Core/DrupalTest.php b/core/tests/Drupal/Tests/Core/DrupalTest.php
index 5ace241..54a5a20 100644
--- a/core/tests/Drupal/Tests/Core/DrupalTest.php
+++ b/core/tests/Drupal/Tests/Core/DrupalTest.php
@@ -56,14 +56,6 @@ public function testService() {
   }
 
   /**
-   * Tests the service() method.
-   */
-  public function testRequest() {
-    $this->setMockContainerService('request');
-    $this->assertNotNull(\Drupal::request());
-  }
-
-  /**
    * Tests the currentUser() method.
    */
   public function testCurrentUser() {
diff --git a/core/tests/Drupal/Tests/Core/HttpKernelTest.php b/core/tests/Drupal/Tests/Core/HttpKernelTest.php
deleted file mode 100644
index 8115ada..0000000
--- a/core/tests/Drupal/Tests/Core/HttpKernelTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Tests\Core\HttpKernelTest.
- */
-
-namespace Drupal\Tests\Core;
-
-use Drupal\Core\Controller\ControllerResolver;
-use Drupal\Core\DependencyInjection\ClassResolver;
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\HttpKernel;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
-use Symfony\Component\DependencyInjection\Scope;
-use Symfony\Component\EventDispatcher\EventDispatcher;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpKernel\KernelEvents;
-
-/**
- * Tests the custom http kernel of drupal.
- *
- * @see \Drupal\Core\HttpKernel
- */
-class HttpKernelTest extends UnitTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'HttpKernel (Unit)',
-      'description' => 'Tests the HttpKernel.',
-      'group' => 'Routing',
-    );
-  }
-
-  /**
-   * Tests the forward method.
-   *
-   * @see \Drupal\Core\HttpKernel::setupSubrequest()
-   */
-  public function testSetupSubrequest() {
-    $container = new ContainerBuilder();
-
-    $request = new Request();
-    $container->addScope(new Scope('request'));
-    $container->enterScope('request');
-    $container->set('request', $request, 'request');
-
-    $dispatcher = new EventDispatcher();
-    $class_resolver = new ClassResolver();
-    $class_resolver->setContainer($container);
-    $controller_resolver = new ControllerResolver($class_resolver);
-
-    $http_kernel = new HttpKernel($dispatcher, $controller_resolver);
-    $http_kernel->setContainer($container);
-
-    $test_controller = '\Drupal\Tests\Core\Controller\TestController';
-    $random_attribute = $this->randomName();
-    $subrequest = $http_kernel->setupSubrequest($test_controller, array('custom_attribute' => $random_attribute), array('custom_query' => $random_attribute));
-    $this->assertNotSame($subrequest, $request, 'The subrequest is not the same as the main request.');
-    $this->assertEquals($subrequest->attributes->get('custom_attribute'), $random_attribute, 'Attributes are set from the subrequest.');
-    $this->assertEquals($subrequest->query->get('custom_query'), $random_attribute, 'Query attributes are set from the subrequest.');
-    $this->assertEquals($subrequest->attributes->get('_controller'), $test_controller, 'Controller attribute got set.');
-
-    $subrequest = $http_kernel->setupSubrequest(NULL, array(), array());
-    $this->assertFalse($subrequest->attributes->has('_controller'), 'Ensure that _controller is not copied when no controller was set before.');
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
index 51c7e86..da3d4e9 100644
--- a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
+++ b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 // @todo Remove once watchdog() is removed.
 if (!defined('WATCHDOG_EMERGENCY')) {
@@ -74,7 +75,9 @@ public function testLog(callable $expected, Request $request = NULL, AccountInte
       ->with($this->anything(), $message, $this->callback($expected));
     $channel->addLogger($logger);
     if ($request) {
-      $channel->setRequest($request);
+      $requestStack = new RequestStack();
+      $requestStack->push($request);
+      $channel->setRequestStack($requestStack);
     }
     if ($current_user) {
       $channel->setCurrentUser($current_user);
diff --git a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
index 5226261..4dd528c 100644
--- a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Site\Settings;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
 use Symfony\Component\Routing\RequestContext;
@@ -121,7 +122,7 @@ function setUp() {
     $this->aliasManager = $alias_manager;
 
     $context = new RequestContext();
-    $context->fromRequest(Request::create('/some/path'));
+    $context->fromRequest($request = Request::create('/some/path'));
 
     $processor = new PathProcessorAlias($this->aliasManager);
     $processor_manager = new PathProcessorManager();
@@ -133,12 +134,15 @@ function setUp() {
 
     $config_factory_stub = $this->getConfigFactoryStub(array('system.filter' => array('protocols' => array('http', 'https'))));
 
-    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $config_factory_stub, new Settings(array()));
+    $requestStack = new RequestStack();
+    $requestStack->push($request);
+
+    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $config_factory_stub, new Settings(array()), null, $requestStack);
     $generator->setContext($context);
     $this->generator = $generator;
 
     // Second generator for mixed-mode sessions.
-    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $config_factory_stub, new Settings(array('mixed_mode_sessions' => TRUE)));
+    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $config_factory_stub, new Settings(array('mixed_mode_sessions' => TRUE)), null, $requestStack);
     $generator->setContext($context);
     $this->generatorMixedMode = $generator;
   }
diff --git a/core/tests/Drupal/Tests/Core/Session/AnonymousUserSessionTest.php b/core/tests/Drupal/Tests/Core/Session/AnonymousUserSessionTest.php
index 2fb144d..db93ce7 100644
--- a/core/tests/Drupal/Tests/Core/Session/AnonymousUserSessionTest.php
+++ b/core/tests/Drupal/Tests/Core/Session/AnonymousUserSessionTest.php
@@ -12,6 +12,7 @@
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Definition;
 use Symfony\Component\DependencyInjection\Scope;
+use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
  * Tests the AnonymousUserSession class.
@@ -44,9 +45,9 @@ public function testAnonymousUserSessionWithRequest() {
       ->method('getClientIp')
       ->will($this->returnValue('test'));
     $container = new ContainerBuilder();
-    $container->addScope(new Scope('request'));
-    $container->enterScope('request');
-    $container->set('request', $request, 'request');
+    $requestStack = new RequestStack();
+    $requestStack->push($request);
+    $container->set('request_stack', $requestStack);
     \Drupal::setContainer($container);
 
     $anonymous_user = new AnonymousUserSession();
@@ -62,11 +63,6 @@ public function testAnonymousUserSessionWithRequest() {
   public function testAnonymousUserSessionWithNoRequest() {
     $container = new ContainerBuilder();
 
-    // Set a synthetic 'request' definition on the container.
-    $definition = new Definition();
-    $definition->setSynthetic(TRUE);
-
-    $container->setDefinition('request', $definition);
     \Drupal::setContainer($container);
 
     $anonymous_user = new AnonymousUserSession();
diff --git a/core/update.php b/core/update.php
index b6accf3..219e4c2 100644
--- a/core/update.php
+++ b/core/update.php
@@ -336,7 +336,6 @@ function update_task_list($active = NULL) {
 $kernel->boot();
 $request = Request::createFromGlobals();
 $container = \Drupal::getContainer();
-$container->set('request', $request);
 $container->get('request_stack')->push($request);
 
 // Determine if the current user has access to run update.php.
