diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index a94f068cc78f5d6f14846bb3fe5c36b793cd2abe..8e024a8d3afc00789cdb017b197fa435b4b83edb 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -235,14 +235,12 @@ function ajax_render($commands = array()) {
   // during this request to be loaded by the page. We only want to send back
   // files that the page hasn't already loaded, so we implement simple diffing
   // logic using array_diff_key().
-  $request = Drupal::request();
   foreach (array('css', 'js') as $type) {
     // It is highly suspicious if $_POST['ajax_page_state'][$type] is empty,
     // since the base page ought to have at least one JS file and one CSS file
     // loaded. It probably indicates an error, and rather than making the page
     // reload all of the files, instead we return no new files.
-    $state = $request->request->get('ajax_page_state[' . $type . ']', FALSE, TRUE);
-    if ($state) {
+    if (empty($_POST['ajax_page_state'][$type])) {
       $items[$type] = array();
     }
     else {
@@ -261,7 +259,7 @@ function ajax_render($commands = array()) {
         }
       }
       // Ensure that the page doesn't reload what it already has.
-      $items[$type] = array_diff_key($items[$type], $state);
+      $items[$type] = array_diff_key($items[$type], $_POST['ajax_page_state'][$type]);
     }
   }
 
@@ -319,8 +317,7 @@ function ajax_render($commands = array()) {
 function ajax_get_form() {
   $form_state = form_state_defaults();
 
-  $request = Drupal::request();
-  $form_build_id = $request->request->get('form_build_id');
+  $form_build_id = $_POST['form_build_id'];
 
   // Get the form from the cache.
   $form = form_get_cache($form_build_id, $form_state);
@@ -345,7 +342,7 @@ function ajax_get_form() {
 
   // The form needs to be processed; prepare for that by setting a few internal
   // variables.
-  $form_state['input'] = $request->request->all();
+  $form_state['input'] = $_POST;
   $form_id = $form['#form_id'];
 
   return array($form, $form_state, $form_id, $form_build_id);
@@ -407,10 +404,10 @@ function ajax_form_callback() {
  * @see file_menu()
  */
 function ajax_base_page_theme() {
-  $request = Drupal::request();
-  $theme = $request->request->get('ajax_page_state[theme]', NULL, TRUE);
-  $token = $request->request->get('ajax_page_state[theme_token]', NULL, TRUE);
-  if (!empty($theme) && !empty($token)) {
+  if (!empty($_POST['ajax_page_state']['theme']) && !empty($_POST['ajax_page_state']['theme_token'])) {
+    $theme = $_POST['ajax_page_state']['theme'];
+    $token = $_POST['ajax_page_state']['theme_token'];
+
     // Prevent a request forgery from giving a person access to a theme they
     // shouldn't be otherwise allowed to see. However, since everyone is allowed
     // to see the default theme, token validation isn't required for that, and
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 03eaa399953131e2478c9fc5310bcfa79b4790fa..a518afd882d0df3f3e90a0fe910d5501521ed977 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -3989,8 +3989,7 @@ function show(&$element) {
  * @see drupal_render_cache_set()
  */
 function drupal_render_cache_get($elements) {
-  $request = Drupal::request();
-  if (!$request->isMethodSafe() || !$cid = drupal_render_cid_create($elements)) {
+  if (!in_array($_SERVER['REQUEST_METHOD'], array('GET', 'HEAD')) || !$cid = drupal_render_cid_create($elements)) {
     return FALSE;
   }
   $bin = isset($elements['#cache']['bin']) ? $elements['#cache']['bin'] : 'cache';
@@ -4022,8 +4021,7 @@ function drupal_render_cache_get($elements) {
  */
 function drupal_render_cache_set(&$markup, $elements) {
   // Create the cache ID for the element.
-  $request = Drupal::request();
-  if (!$request->isMethodSafe() || !$cid = drupal_render_cid_create($elements)) {
+  if (!in_array($_SERVER['REQUEST_METHOD'], array('GET', 'HEAD')) || !$cid = drupal_render_cid_create($elements)) {
     return FALSE;
   }
 
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index f44162db231b5ac8ed5de3c9192f7722da7011bf..3fe23b727cc564192bdd5dc8614d4e9164393b94 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -222,8 +222,7 @@ function _drupal_log_error($error, $fatal = FALSE) {
     }
   }
 
-  $request = Drupal::request();
-  if ($request->isXmlHttpRequest()) {
+  if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
     if ($fatal) {
       if (error_displayable($error)) {
         // When called from JavaScript, simply output the error message.
diff --git a/core/includes/pager.inc b/core/includes/pager.inc
index cb97b401b8037b04773c04e23473bc635a780840..cef12ac4c3a432698fc5fc29213514b343bac746 100644
--- a/core/includes/pager.inc
+++ b/core/includes/pager.inc
@@ -26,7 +26,7 @@
  * @see pager_default_initialize()
  */
 function pager_find_page($element = 0) {
-  $page = Drupal::request()->query->get('page', '');
+  $page = isset($_GET['page']) ? $_GET['page'] : '';
   $page_array = explode(',', $page);
   if (!isset($page_array[$element])) {
     $page_array[$element] = 0;
@@ -136,7 +136,7 @@ function pager_default_initialize($total, $limit, $element = 0) {
 function pager_get_query_parameters() {
   $query = &drupal_static(__FUNCTION__);
   if (!isset($query)) {
-    $query = drupal_get_query_parameters(Drupal::request()->query->all(), array('page'));
+    $query = drupal_get_query_parameters($_GET, array('page'));
   }
   return $query;
 }
@@ -425,7 +425,7 @@ function pager_query_add_page(array $query, $element, $index) {
   // Determine the first result to display on the linked page.
   $page_new = pager_load_array($index, $element, $pager_page_array);
 
-  $page = Drupal::request()->query->get('page', '');
+  $page = isset($_GET['page']) ? $_GET['page'] : '';
   if ($new_page = implode(',', pager_load_array($page_new[$element], $element, explode(',', $page)))) {
     $query['page'] = $new_page;
   }
diff --git a/core/includes/tablesort.inc b/core/includes/tablesort.inc
index 82201e20f05751a8348900c8b29bd8861991dcc4..c42b1f4ea1203eb27e52f479b19b210a018ed8b5 100644
--- a/core/includes/tablesort.inc
+++ b/core/includes/tablesort.inc
@@ -100,7 +100,7 @@ function tablesort_cell($cell, $header, $ts, $i) {
  *   page request except for those pertaining to table sorting.
  */
 function tablesort_get_query_parameters() {
-  return drupal_get_query_parameters(Drupal::request()->query->all(), array('sort', 'order'));
+  return drupal_get_query_parameters($_GET, array('sort', 'order'));
 }
 
 /**
@@ -115,7 +115,7 @@ function tablesort_get_query_parameters() {
  *   - "sql": The name of the database field to sort on.
  */
 function tablesort_get_order($headers) {
-  $order = Drupal::request()->query->get('order', '');
+  $order = isset($_GET['order']) ? $_GET['order'] : '';
   foreach ($headers as $header) {
     if (is_array($header)) {
       if (isset($header['data']) && $order == $header['data']) {
@@ -150,9 +150,8 @@ function tablesort_get_order($headers) {
  *   The current sort direction ("asc" or "desc").
  */
 function tablesort_get_sort($headers) {
-  $sort = Drupal::request()->query->get('sort');
-  if (isset($sort)) {
-    return (strtolower($sort) == 'desc') ? 'desc' : 'asc';
+  if (isset($_GET['sort'])) {
+    return (strtolower($_GET['sort']) == 'desc') ? 'desc' : 'asc';
   }
   // The user has not specified a sort. Use the default for the currently sorted
   // header if specified; otherwise use "asc".
diff --git a/core/modules/system/lib/Drupal/system/Tests/Common/TableSortExtenderUnitTest.php b/core/modules/system/lib/Drupal/system/Tests/Common/TableSortExtenderUnitTest.php
index 241949fce4a4c30b449bd00386ed8cd10daafd21..c7cc2a9b8e60f35bfce2c5c34e86e14b941fcf31 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Common/TableSortExtenderUnitTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Common/TableSortExtenderUnitTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\system\Tests\Common;
 
 use Drupal\simpletest\UnitTestBase;
-use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Tests unicode handling features implemented in unicode.inc.
@@ -54,42 +53,38 @@ function testTableSortInit() {
     $headers = array('foo', 'bar', 'baz');
     // Reset $_GET to prevent parameters from Simpletest and Batch API ending
     // up in $ts['query'].
+    $_GET = array();
     $expected_ts = array(
       'name' => 'foo',
       'sql' => '',
       'sort' => 'asc',
       'query' => array(),
     );
-    $request = Request::createFromGlobals();
-    $request->query->replace(array());
-    \Drupal::getContainer()->set('request', $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.');
 
     // Test with simple table headers plus $_GET parameters that should _not_
     // override the default.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
+
+    $_GET = array(
       // This should not override the table order because only complex
       // headers are overridable.
       'order' => 'bar',
-    ));
-    \Drupal::getContainer()->set('request', $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.');
 
     // Test with simple table headers plus $_GET parameters that _should_
     // override the default.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
+
+    $_GET = array(
       'sort' => 'DESC',
       // Add an unrelated parameter to ensure that tablesort will include
       // it in the links that it creates.
       'alpha' => 'beta',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    );
     $expected_ts['sort'] = 'desc';
     $expected_ts['query'] = array('alpha' => 'beta');
     $ts = tablesort_init($headers);
@@ -113,11 +108,9 @@ function testTableSortInit() {
       ),
     );
     // Reset $_GET from previous assertion.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
+    $_GET = array(
       'order' => '2',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    );
     $ts = tablesort_init($headers);
     $expected_ts = array(
       'name' => '2',
@@ -130,13 +123,12 @@ function testTableSortInit() {
 
     // Test complex table headers plus $_GET parameters that should _not_
     // override the default.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
+
+    $_GET = array(
       // This should not override the table order because this header does not
       // exist.
       'order' => 'bar',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    );
     $ts = tablesort_init($headers);
     $expected_ts = array(
       'name' => '1',
@@ -146,18 +138,18 @@ function testTableSortInit() {
     );
     $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
     $this->assertEqual($ts, $expected_ts, 'Complex table headers plus non-overriding $_GET parameters sorted correctly.');
+    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
 
     // Test complex table headers plus $_GET parameters that _should_
     // override the default.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
+
+    $_GET = array(
       'order' => '1',
       'sort' => 'ASC',
       // Add an unrelated parameter to ensure that tablesort will include
       // it in the links that it creates.
       'alpha' => 'beta',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    );
     $expected_ts = array(
       'name' => '1',
       'sql' => 'one',
@@ -167,5 +159,7 @@ function testTableSortInit() {
     $ts = tablesort_init($headers);
     $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
     $this->assertEqual($ts, $expected_ts, 'Complex table headers plus $_GET parameters sorted correctly.');
+    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
+
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/SelectPagerDefaultTest.php b/core/modules/system/lib/Drupal/system/Tests/Database/SelectPagerDefaultTest.php
index 79c93d210ab93bb2e9864f3a5b97fe217c922805..83f0640bf016d88a3219ac0e521279142478f482 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/SelectPagerDefaultTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/SelectPagerDefaultTest.php
@@ -6,7 +6,6 @@
  */
 
 namespace Drupal\system\Tests\Database;
-use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Tests the pager query select extender.
@@ -136,12 +135,7 @@ function testHavingPagerQuery() {
    * Confirms that every pager gets a valid, non-overlaping element ID.
    */
   function testElementNumbers() {
-
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
-      'page' => '3, 2, 1, 0',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    $_GET['page'] = '3, 2, 1, 0';
 
     $name = db_select('test', 't')
       ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
@@ -174,5 +168,6 @@ function testElementNumbers() {
       ->fetchField();
     $this->assertEqual($name, 'John', 'Pager query #3 with a generated element ID returned the correct results.');
 
+    unset($_GET['page']);
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
index 69851f9c87385c4bc74a69a7cd1b92e9fd64ed61..284526fe337bb55c70b2269e57e3015bf8d4b127 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\system\Tests\Entity;
 
 use Drupal\Core\Language\Language;
-use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Tests the basic Entity API.
@@ -349,11 +348,7 @@ function testSort() {
 
     // Test the pager by setting element #1 to page 2 with a page size of 4.
     // Results will be #8-12 from above.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
-      'page' => '0,2',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    $_GET['page'] = '0,2';
     $this->queryResults = $this->factory->get('entity_test_mulrev')
       ->sort("$figures.color")
       ->sort("$greetings.format")
@@ -380,13 +375,8 @@ protected function testTableSort() {
     // While ordering on bundles do not give us a definite order, we can still
     // assert that all entities from one bundle are after the other as the
     // order dictates.
-    $request = Request::createFromGlobals();
-    $request->query->replace(array(
-      'sort' => 'asc',
-      'order' => 'Type',
-    ));
-    \Drupal::getContainer()->set('request', $request);
-
+    $_GET['sort'] = 'asc';
+    $_GET['order'] = 'Type';
     $header = array(
       'id' => array('data' => 'Id', 'specifier' => 'id'),
       'type' => array('data' => 'Type', 'specifier' => 'type'),
@@ -396,12 +386,7 @@ protected function testTableSort() {
       ->tableSort($header)
       ->execute());
     $this->assertBundleOrder('asc');
-
-    $request->query->add(array(
-      'sort' => 'desc',
-    ));
-    \Drupal::getContainer()->set('request', $request);
-
+    $_GET['sort'] = 'desc';
     $header = array(
       'id' => array('data' => 'Id', 'specifier' => 'id'),
       'type' => array('data' => 'Type', 'specifier' => 'type'),
@@ -410,12 +395,8 @@ protected function testTableSort() {
       ->tableSort($header)
       ->execute());
     $this->assertBundleOrder('desc');
-
     // Ordering on ID is definite, however.
-    $request->query->add(array(
-      'order' => 'Id',
-    ));
-    \Drupal::getContainer()->set('request', $request);
+    $_GET['order'] = 'Id';
     $this->queryResults = $this->factory->get('entity_test_mulrev')
       ->tableSort($header)
       ->execute();