diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 96791e3..364011c 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -1095,7 +1095,6 @@ function menu_tree_output($tree) {
  */
 function menu_tree_all_data($menu_name, $link = NULL, $max_depth = NULL) {
   $tree = &drupal_static(__FUNCTION__, array());
-
   $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Use $mlid as a flag for whether the data being loaded is for the whole tree.
@@ -1363,7 +1362,6 @@ function menu_build_tree($menu_name, array $parameters = array()) {
 function _menu_build_tree($menu_name, array $parameters = array()) {
   // Static cache of already built menu trees.
   $trees = &drupal_static(__FUNCTION__, array());
-
   $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Build the cache id; sort parents to prevent duplicate storage and remove
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 5e0a40a..699efbb 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2753,6 +2753,12 @@ function theme_get_suggestions($args, $base, $delimiter = '__') {
  * @see maintenance-page.tpl.php
  */
 function template_preprocess_maintenance_page(&$variables) {
+  global $theme;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+  // Retrieve the theme data to list all available regions.
+  $theme_data = list_themes();
+  $regions = $theme_data[$theme]->info['regions'];
+
   // Add favicon
   if (theme_get_setting('toggle_favicon')) {
     $favicon = theme_get_setting('favicon');
@@ -2760,11 +2766,6 @@ function template_preprocess_maintenance_page(&$variables) {
     drupal_add_html_head_link(array('rel' => 'shortcut icon', 'href' => drupal_strip_dangerous_protocols($favicon), 'type' => $type));
   }
 
-  global $theme;
-  // Retrieve the theme data to list all available regions.
-  $theme_data = list_themes();
-  $regions = $theme_data[$theme]->info['regions'];
-
   // Get all region content set with drupal_add_region_content().
   foreach (array_keys($regions) as $region) {
     // Assign region to a region variable.
@@ -2795,8 +2796,6 @@ function template_preprocess_maintenance_page(&$variables) {
     }
   }
 
-  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
-
   $variables['head_title_array']  = $head_title;
   $variables['head_title']        = implode(' | ', $head_title);
   $variables['base_path']         = base_path();
diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index a3d59b0..9fee858 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -328,7 +328,8 @@ function hook_block_view_MODULE_DELTA_alter(&$data, $block) {
  *   An array of $blocks, keyed by the block ID.
  */
 function hook_block_list_alter(&$blocks) {
-  global $language_interface, $theme_key;
+  global $theme_key;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // This example shows how to achieve language specific visibility setting for
   // blocks.
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index a29a331..165cdf3 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -1226,7 +1226,8 @@ function book_toc($bid, $depth_limit, $exclude = array()) {
  * @see book-export-html.tpl.php
  */
 function template_preprocess_book_export_html(&$variables) {
-  global $base_url, $language_interface;
+  global $base_url;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $variables['title'] = check_plain($variables['title']);
   $variables['base_url'] = $base_url;
diff --git a/core/modules/comment/comment.test b/core/modules/comment/comment.test
index 259e420..7d181e0 100644
--- a/core/modules/comment/comment.test
+++ b/core/modules/comment/comment.test
@@ -1868,7 +1868,8 @@ class CommentTokenReplaceTestCase extends CommentHelperCase {
    * Creates a comment, then tests the tokens generated from it.
    */
   function testCommentTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+
     $url_options = array(
       'absolute' => TRUE,
       'language' => $language_interface,
diff --git a/core/modules/contact/contact.pages.inc b/core/modules/contact/contact.pages.inc
index bf096a7..18f9457 100644
--- a/core/modules/contact/contact.pages.inc
+++ b/core/modules/contact/contact.pages.inc
@@ -128,7 +128,8 @@ function contact_site_form_validate($form, &$form_state) {
  * @see contact_site_form_validate()
  */
 function contact_site_form_submit($form, &$form_state) {
-  global $user, $language_interface;
+  global $user;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $values = $form_state['values'];
   $values['sender'] = $user;
@@ -250,7 +251,8 @@ function contact_personal_form($form, &$form_state, $recipient) {
  * @see contact_personal_form_validate()
  */
 function contact_personal_form_submit($form, &$form_state) {
-  global $user, $language_interface;
+  global $user;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $values = $form_state['values'];
   $values['sender'] = $user;
diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index 9b2b6f2..8b1316e 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -43,7 +43,7 @@ function entity_modules_disabled() {
  * @see hook_entity_info_alter()
  */
 function entity_get_info($entity_type = NULL) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Use the advanced drupal_static() pattern, since this is called very often.
   static $drupal_static_fast;
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 78bc62e..021937d 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -67,7 +67,7 @@ function field_info_cache_clear() {
  * @see _field_info_collate_types_reset()
  */
 function _field_info_collate_types() {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Use the advanced drupal_static() pattern, since this is called very often.
   static $drupal_static_fast;
diff --git a/core/modules/file/tests/file.test b/core/modules/file/tests/file.test
index 05083fc..cefab6b 100644
--- a/core/modules/file/tests/file.test
+++ b/core/modules/file/tests/file.test
@@ -1057,7 +1057,7 @@ class FileTokenReplaceTestCase extends FileFieldTestCase {
    * Creates a file, then tests the tokens generated from it.
    */
   function testFileTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
     $url_options = array(
       'absolute' => TRUE,
       'language' => $language_interface,
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 45f5170..3810000 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -392,7 +392,7 @@ function filter_modules_disabled($modules) {
  * @see filter_formats_reset()
  */
 function filter_formats($account = NULL) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
   $formats = &drupal_static(__FUNCTION__, array());
 
   // All available formats are cached for performance.
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 9e13c85..ada72f4 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -915,7 +915,7 @@ function image_style_path($style_name, $uri) {
  * @see image_effect_definition_load()
  */
 function image_effect_definitions() {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // hook_image_effect_info() includes translated strings, so each language is
   // cached separately.
diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index e341094..da7abff 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -150,6 +150,7 @@ function theme_language_admin_overview_form_table($variables) {
 function language_admin_overview_form_submit($form, &$form_state) {
   $languages = language_list();
   $old_default = language_default();
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   foreach ($languages as $langcode => $language) {
     $language->default = ($form_state['values']['site_default'] == $langcode);
@@ -165,7 +166,7 @@ function language_admin_overview_form_submit($form, &$form_state) {
 
     // If the interface language has been disabled make sure that the form
     // redirect includes the new default language as a query parameter.
-    if ($language->enabled == FALSE && $langcode == $GLOBALS['language_interface']->langcode) {
+    if ($language->enabled == FALSE && $langcode == $language_interface->langcode) {
       $form_state['redirect'] = array('admin/config/regional/language', array('language' => $languages[$form_state['values']['site_default']]));
     }
 
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 34f1a59..ad195e9 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -240,7 +240,7 @@ function language_delete($langcode) {
  * and checks to see if a related right to left CSS file should be included.
  */
 function language_css_alter(&$css) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // If the current language is RTL, add the CSS file with the RTL overrides.
   if ($language_interface->direction == LANGUAGE_RTL) {
diff --git a/core/modules/language/language.test b/core/modules/language/language.test
index 3195141..b90cd9c 100644
--- a/core/modules/language/language.test
+++ b/core/modules/language/language.test
@@ -201,23 +201,6 @@ class LanguageDependencyInjectionTest extends DrupalWebTestCase {
   }
 
   /**
-   * Test dependency injected Language against the GLOBAL language object.
-   *
-   * @todo Once the PHP global is gone, we won't need this test as the same
-   * test is done without the PHP global in the following test.
-   */
-  function testDependencyInjectedLanguage() {
-    // Initialize the language system.
-    drupal_language_initialize();
-
-    $expected = $GLOBALS[LANGUAGE_TYPE_INTERFACE];
-    $result = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
-    foreach ($expected as $property => $value) {
-      $this->assertEqual($expected->$property, $result->$property, t('The dependency injected language object %prop property equals the $GLOBAL language object %prop property.', array('%prop' => $property)));
-    }
-  }
-
-  /**
    * Test dependency injected languages against a new Language object.
    *
    * @see Drupal\Core\Language\Language
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index 24ac5e3..e51ad68 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -190,8 +190,8 @@ function locale_menu() {
  * Initialize date formats according to the user's current locale.
  */
 function locale_init() {
-  global $conf, $language_interface;
-
+  global $conf;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
   // For each date type (e.g. long, short), get the localized date format
   // for the user's current language and override the default setting for it
   // in $conf. This should happen on all pages except the date and time formats
@@ -390,7 +390,7 @@ function locale_language_delete($language) {
  *   Language code to use for the lookup.
  */
 function locale($string = NULL, $context = NULL, $langcode = NULL) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Use the advanced drupal_static() pattern, since this is called very often.
   static $drupal_static_fast;
@@ -503,7 +503,7 @@ function locale_reset() {
  *   plural formula.
  */
 function locale_get_plural($count, $langcode = NULL) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   // Used to locally cache the plural formulas for all languages.
   $plural_formulas = &drupal_static(__FUNCTION__, array());
@@ -589,7 +589,7 @@ function locale_system_update($components) {
  * file if necessary, and adds it to the page.
  */
 function locale_js_alter(&$javascript) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $dir = 'public://' . variable_get('locale_js_directory', 'languages');
   $parsed = variable_get('javascript_parsed', array());
@@ -648,7 +648,7 @@ function locale_js_alter(&$javascript) {
  * Provides the language support for the jQuery UI Date Picker.
  */
 function locale_library_info_alter(&$libraries, $module) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
   if ($module == 'system' && isset($libraries['system']['ui.datepicker'])) {
     $datepicker = drupal_get_path('module', 'locale') . '/locale.datepicker.js';
     $libraries['system']['ui.datepicker']['js'][$datepicker] = array('group' => JS_THEME);
@@ -786,7 +786,7 @@ function locale_form_system_file_system_settings_alter(&$form, $form_state) {
  */
 function locale_preprocess_node(&$variables) {
   if ($variables['langcode'] != LANGUAGE_NOT_SPECIFIED) {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     $node_language = language_load($variables['langcode']);
     if ($node_language->langcode != $language_interface->langcode) {
diff --git a/core/modules/locale/locale.test b/core/modules/locale/locale.test
index bb3c6e7..c86bbe6 100644
--- a/core/modules/locale/locale.test
+++ b/core/modules/locale/locale.test
@@ -1575,6 +1575,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
    */
   function testUninstallProcess() {
     $locale_module = array('locale', 'language');
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     $language = (object) array(
       'langcode' => 'fr',
@@ -1585,7 +1586,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
 
     // Check the UI language.
     drupal_language_initialize();
-    $this->assertEqual($GLOBALS['language_interface']->langcode, $this->langcode, t('Current language: %lang', array('%lang' => $GLOBALS['language_interface']->langcode)));
+    $this->assertEqual($language_interface->langcode, $this->langcode, t('Current language: %lang', array('%lang' => $language_interface->langcode)));
 
     // Enable multilingual workflow option for articles.
     variable_set('node_type_language_article', 1);
@@ -1630,7 +1631,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
 
     // Check the init language logic.
     drupal_language_initialize();
-    $this->assertEqual($GLOBALS['language_interface']->langcode, 'en', t('Language after uninstall: %lang', array('%lang' => $GLOBALS['language_interface']->langcode)));
+    $this->assertEqual($language_interface->langcode, 'en', t('Language after uninstall: %lang', array('%lang' => $GLOBALS['language_interface']->langcode)));
 
     // Check JavaScript files deletion.
     $this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found'))));
diff --git a/core/modules/locale/tests/locale_test.module b/core/modules/locale/tests/locale_test.module
index 93dfaa1..c9a036a 100644
--- a/core/modules/locale/tests/locale_test.module
+++ b/core/modules/locale/tests/locale_test.module
@@ -22,8 +22,9 @@ function locale_test_boot() {
  */
 function locale_test_init() {
   locale_test_store_language_negotiation();
-  if (isset($GLOBALS['language_interface']) && isset($GLOBALS['language_interface']->method_id)) {
-    drupal_set_message(t('Language negotiation method: @name', array('@name' => $GLOBALS['language_interface']->method_id)));
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+  if (isset($language_interface) && isset($language_interface->method_id)) {
+    drupal_set_message(t('Language negotiation method: @name', array('@name' => $language_interface->method_id)));
   }
 }
 
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index bdd5051..306e2e1 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -694,7 +694,8 @@ function node_type_update_nodes($old_type, $type) {
  *   type object by $type->disabled being set to TRUE.
  */
 function _node_types_build($rebuild = FALSE) {
-  $cid = 'node_types:' . $GLOBALS['language_interface']->langcode;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+  $cid = 'node_types:' . $language_interface->langcode;
 
   if (!$rebuild) {
     $_node_types = &drupal_static(__FUNCTION__);
diff --git a/core/modules/node/node.test b/core/modules/node/node.test
index 058e0e7..1ec568e 100644
--- a/core/modules/node/node.test
+++ b/core/modules/node/node.test
@@ -2265,7 +2265,7 @@ class NodeTokenReplaceTestCase extends NodeWebTestCase {
    * Creates a node, then tests the tokens generated from it.
    */
   function testNodeTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
     $url_options = array(
       'absolute' => TRUE,
       'language' => $language_interface,
diff --git a/core/modules/openid/openid.inc b/core/modules/openid/openid.inc
index 518dc8a..d594dde 100644
--- a/core/modules/openid/openid.inc
+++ b/core/modules/openid/openid.inc
@@ -83,7 +83,7 @@ function openid_redirect_http($url, $message) {
  * Creates a js auto-submit redirect for (for the 2.x protocol)
  */
 function openid_redirect($url, $message) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n";
   $output .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' . $language_interface->langcode . '" lang="' . $language_interface->langcode . '">' . "\n";
diff --git a/core/modules/poll/poll.test b/core/modules/poll/poll.test
index 3ab570c..31e1a53 100644
--- a/core/modules/poll/poll.test
+++ b/core/modules/poll/poll.test
@@ -630,7 +630,7 @@ class PollTokenReplaceTestCase extends PollWebTestCase {
    * Creates a poll, then tests the tokens generated from it.
    */
   function testPollTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Craete a poll with three choices.
     $title = $this->randomName();
diff --git a/core/modules/search/search.pages.inc b/core/modules/search/search.pages.inc
index ff0d271..c940223 100644
--- a/core/modules/search/search.pages.inc
+++ b/core/modules/search/search.pages.inc
@@ -104,7 +104,7 @@ function template_preprocess_search_results(&$variables) {
  * @see search-result.tpl.php
  */
 function template_preprocess_search_result(&$variables) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $result = $variables['result'];
   $variables['url'] = check_url($result['link']);
diff --git a/core/modules/simpletest/drupal_web_test_case.php b/core/modules/simpletest/drupal_web_test_case.php
index 591e8a1..c891aca 100644
--- a/core/modules/simpletest/drupal_web_test_case.php
+++ b/core/modules/simpletest/drupal_web_test_case.php
@@ -1287,7 +1287,8 @@ class DrupalWebTestCase extends DrupalTestCase {
    *   either a single array or a variable number of string arguments.
    */
   protected function setUp() {
-    global $user, $language_interface, $conf;
+    global $user, $conf;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Generate a temporary prefixed database to ensure that tests have a clean starting point.
     $this->databasePrefix = 'simpletest' . mt_rand(1000, 1000000);
@@ -1533,7 +1534,8 @@ class DrupalWebTestCase extends DrupalTestCase {
    * and reset the database prefix.
    */
   protected function tearDown() {
-    global $user, $language_interface;
+    global $user;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // In case a fatal error occurred that was not in the test process read the
     // log to pick up any fatal errors.
diff --git a/core/modules/statistics/statistics.test b/core/modules/statistics/statistics.test
index d19fd92..07f7bb3 100644
--- a/core/modules/statistics/statistics.test
+++ b/core/modules/statistics/statistics.test
@@ -472,7 +472,7 @@ class StatisticsTokenReplaceTestCase extends StatisticsTestCase {
    * Creates a node, then tests the statistics tokens generated from it.
    */
   function testStatisticsTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Create user and node.
     $user = $this->drupalCreateUser(array('create page content'));
diff --git a/core/modules/system/language.api.php b/core/modules/system/language.api.php
index 9f28619..3f83924 100644
--- a/core/modules/system/language.api.php
+++ b/core/modules/system/language.api.php
@@ -52,7 +52,7 @@ function hook_language_init() {
  *   The current path.
  */
 function hook_language_switch_links_alter(array &$links, $type, $path) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   if ($type == LANGUAGE_TYPE_CONTENT && isset($links[$language_interface->langcode])) {
     foreach ($links[$language_interface->langcode] as $link) {
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index dc73a59..cbe5081 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -1970,7 +1970,8 @@ function hook_xmlrpc_alter(&$methods) {
  *     the message is not possible to translate.
  */
 function hook_watchdog(array $log_entry) {
-  global $base_url, $language_interface;
+  global $base_url;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $severity_list = array(
     WATCHDOG_EMERGENCY     => t('Emergency'),
diff --git a/core/modules/system/system.test b/core/modules/system/system.test
index 78f6a23..eec5a13 100644
--- a/core/modules/system/system.test
+++ b/core/modules/system/system.test
@@ -1908,11 +1908,13 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
    * Creates a user and a node, then tests the tokens generated from them.
    */
   function testTokenReplacement() {
+    global $user;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+
     // Create the initial objects.
     $account = $this->drupalCreateUser();
     $node = $this->drupalCreateNode(array('uid' => $account->uid));
     $node->title = '<blink>Blinking Text</blink>';
-    global $user, $language_interface;
 
     $source  = '[node:title]';         // Title of the node we passed in
     $source .= '[node:author:name]';   // Node author's name
@@ -1957,7 +1959,7 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
    * Test whether token-replacement works in various contexts.
    */
   function testSystemTokenRecognition() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Generate prefixes and suffixes for the token context.
     $tests = array(
@@ -1986,7 +1988,8 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
    * Tests the generation of all system site information tokens.
    */
   function testSystemSiteTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+
     $url_options = array(
       'absolute' => TRUE,
       'language' => $language_interface,
@@ -2027,7 +2030,7 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
    * Tests the generation of all system date tokens.
    */
   function testSystemDateTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Set time to one hour before request.
     $date = REQUEST_TIME - 3600;
diff --git a/core/modules/system/tests/common.test b/core/modules/system/tests/common.test
index f0ac957..131a8c5 100644
--- a/core/modules/system/tests/common.test
+++ b/core/modules/system/tests/common.test
@@ -789,8 +789,9 @@ class CommonCascadingStylesheetsTestCase extends DrupalWebTestCase {
    * Tests Locale module's CSS Alter to include RTL overrides.
    */
   function testAlter() {
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+
     // Switch the language to a right to left language and add system.base.css.
-    global $language_interface;
     $language_interface->direction = LANGUAGE_RTL;
     $path = drupal_get_path('module', 'system');
     drupal_add_css($path . '/system.base.css');
diff --git a/core/modules/system/tests/mail.test b/core/modules/system/tests/mail.test
index 5d33102..2a0f37b 100644
--- a/core/modules/system/tests/mail.test
+++ b/core/modules/system/tests/mail.test
@@ -38,7 +38,7 @@ class MailTestCase extends DrupalWebTestCase implements MailInterface {
    * Assert that the pluggable mail system is functional.
    */
   public function testPluggableFramework() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Use MailTestCase for sending a message.
     $message = drupal_mail('simpletest', 'mail_test', 'testing@example.com', $language_interface);
diff --git a/core/modules/system/tests/upgrade/upgrade.test b/core/modules/system/tests/upgrade/upgrade.test
index e4045be..6856aa4 100644
--- a/core/modules/system/tests/upgrade/upgrade.test
+++ b/core/modules/system/tests/upgrade/upgrade.test
@@ -45,7 +45,8 @@ abstract class UpgradePathTestCase extends DrupalWebTestCase {
    * Override of DrupalWebTestCase::setUp() specialized for upgrade testing.
    */
   protected function setUp() {
-    global $user, $language_interface, $conf;
+    global $user, $conf;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Load the Update API.
     require_once DRUPAL_ROOT . '/core/includes/update.inc';
@@ -149,7 +150,8 @@ abstract class UpgradePathTestCase extends DrupalWebTestCase {
    * Override of DrupalWebTestCase::tearDown() specialized for upgrade testing.
    */
   protected function tearDown() {
-    global $user, $language_interface;
+    global $user;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // In case a fatal error occurred that was not in the test process read the
     // log to pick up any fatal errors.
diff --git a/core/modules/taxonomy/taxonomy.test b/core/modules/taxonomy/taxonomy.test
index fe60239..4af0790 100644
--- a/core/modules/taxonomy/taxonomy.test
+++ b/core/modules/taxonomy/taxonomy.test
@@ -1780,7 +1780,7 @@ class TaxonomyTokenReplaceTestCase extends TaxonomyWebTestCase {
    * Creates some terms and a node, then tests the tokens generated from them.
    */
   function testTaxonomyTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     // Create two taxonomy terms.
     $term1 = $this->createTerm($this->vocabulary);
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 1f94436..86d2245 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -920,7 +920,8 @@ function user_user_view($account) {
  * @see user_validate_mail()
  */
 function user_account_form(&$form, &$form_state) {
-  global $user, $language_interface;
+  global $user;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $account = $form['#user'];
   $register = ($form['#user']->uid > 0 ? FALSE : TRUE);
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index f24849c..7e7be9c 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -72,7 +72,7 @@ function user_pass_validate($form, &$form_state) {
 }
 
 function user_pass_submit($form, &$form_state) {
-  global $language_interface;
+  $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
   $account = $form_state['values']['account'];
   // Mail one time login URL and instructions using current language.
diff --git a/core/modules/user/user.test b/core/modules/user/user.test
index d5fa28e..2f77cb9 100644
--- a/core/modules/user/user.test
+++ b/core/modules/user/user.test
@@ -2091,7 +2091,8 @@ class UserTokenReplaceTestCase extends DrupalWebTestCase {
    * Creates a user, then tests the tokens generated from it.
    */
   function testUserTokenReplacement() {
-    global $language_interface;
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
+
     $url_options = array(
       'absolute' => TRUE,
       'language' => $language_interface,
diff --git a/core/update.php b/core/update.php
index 9797833..a4bd894 100644
--- a/core/update.php
+++ b/core/update.php
@@ -380,16 +380,11 @@ update_prepare_d8_bootstrap();
 // Determine if the current user has access to run update.php.
 drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
 
-// The interface language global has been renamed in D8, we must ensure that it
-// contains a valid value while language settings are upgraded.
-// @todo Remove this globals reference entirely: http://drupal.org/node/1510686
-$GLOBALS[LANGUAGE_TYPE_INTERFACE] = language_default();
 
 // Ensure the default language is properly registered within the Dependency
 // Injection container during the upgrade process.
 $default = language_default();
-drupal_container()->register(LANGUAGE_TYPE_INTERFACE, 'Drupal\\Core\\Language\\Language')
-  ->addMethodCall('extend', array($default));
+drupal_container()->register(LANGUAGE_TYPE_INTERFACE, 'Drupal\\Core\\Language\\Language');
 
 // Only allow the requirements check to proceed if the current user has access
 // to run updates (since it may expose sensitive information about the site's
