diff --git a/core/includes/mail.inc b/core/includes/mail.inc
index c22d10a..8b1f454 100644
--- a/core/includes/mail.inc
+++ b/core/includes/mail.inc
@@ -25,9 +25,10 @@
  * filled on the page, there are two additional choices if you are not
  * sending the email to a user on the site. You can either use the language
  * used to generate the page or the site default language. See
- * language_default(). The former is good if sending email to the person
- * filling the form, the later is good if you send email to an address
- * previously set up (like contact addresses in a contact form).
+ * Drupal\Core\Language\LanguageManagerInterface::getDefaultLanguage(). The
+ * former is good if sending email to the person filling the form, the later
+ * is good if you send email to an address previously set up (like contact
+ * addresses in a contact form).
  *
  * Taking care of always using the proper language is even more important
  * when sending emails in a row to multiple users. Hook_mail() abstracts
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
index 5969aae..50bcb7b 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
@@ -19,6 +19,7 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\field\Entity\FieldStorageConfig;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -104,6 +105,13 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase implements S
   protected $entityManager;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * The entity schema handler.
    *
    * @var \Drupal\Core\Entity\Schema\EntitySchemaHandlerInterface
@@ -125,7 +133,8 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $entity_type,
       $container->get('database'),
       $container->get('entity.manager'),
-      $container->get('cache.entity')
+      $container->get('cache.entity'),
+      $container->get('language_manager')
     );
   }
 
@@ -151,13 +160,16 @@ public function getFieldStorageDefinitions() {
    *   The entity manager.
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
    *   The cache backend to be used.
+   *  @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache) {
+  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager) {
     parent::__construct($entity_type);
 
     $this->database = $database;
     $this->entityManager = $entity_manager;
     $this->cacheBackend = $cache;
+    $this->languageManager = $language_manager;
 
     // @todo Remove table names from the entity type definition in
     //   https://drupal.org/node/2232465
@@ -1164,7 +1176,7 @@ protected function loadFieldItems(array $entities) {
     }
 
     // Load field data.
-    $langcodes = array_keys(language_list(LanguageInterface::STATE_ALL));
+    $langcodes = array_keys($this->languageManager->getLanguages(LanguageInterface::STATE_ALL));
     foreach ($storage_definitions as $field_name => $storage_definition) {
       $table = $load_current ? $table_mapping->getDedicatedDataTableName($storage_definition) : $table_mapping->getDedicatedRevisionTableName($storage_definition);
 
diff --git a/core/lib/Drupal/Core/Session/UserSession.php b/core/lib/Drupal/Core/Session/UserSession.php
index 7364da9..a76adea 100644
--- a/core/lib/Drupal/Core/Session/UserSession.php
+++ b/core/lib/Drupal/Core/Session/UserSession.php
@@ -183,12 +183,12 @@ public function isAnonymous() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($fallback_to_default = TRUE) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     if (!empty($this->preferred_langcode) && isset($language_list[$this->preferred_langcode])) {
       return $language_list[$this->preferred_langcode]->id;
     }
     else {
-      return $fallback_to_default ? language_default()->id : '';
+      return $fallback_to_default ? \Drupal::languageManager()->getDefaultLanguage()->id : '';
     }
   }
 
@@ -196,12 +196,12 @@ function getPreferredLangcode($fallback_to_default = TRUE) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($fallback_to_default = TRUE) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     if (!empty($this->preferred_admin_langcode) && isset($language_list[$this->preferred_admin_langcode])) {
       return $language_list[$this->preferred_admin_langcode]->id;
     }
     else {
-      return $fallback_to_default ? language_default()->id : '';
+      return $fallback_to_default ? \Drupal::languageManager()->getDefaultLanguage()->id: '';
     }
   }
 
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
index 3a0780f..071b094 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
@@ -43,7 +43,7 @@ class Language extends TypedData {
    */
   public function getValue() {
     if (!isset($this->language) && $this->id) {
-      $this->language = language_load($this->id);
+      $this->language = \Drupal::languageManager()->getLanguage($this->id);
     }
     return $this->language;
   }
diff --git a/core/modules/action/src/Plugin/Action/EmailAction.php b/core/modules/action/src/Plugin/Action/EmailAction.php
index 58409d1..3b58404 100644
--- a/core/modules/action/src/Plugin/Action/EmailAction.php
+++ b/core/modules/action/src/Plugin/Action/EmailAction.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Action\ConfigurableActionBase;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Utility\Token;
 use Psr\Log\LoggerInterface;
@@ -47,6 +48,12 @@ class EmailAction extends ConfigurableActionBase implements ContainerFactoryPlug
    */
   protected $logger;
 
+  /** The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
   /**
    * Constructs a EmailAction object.
    *
@@ -62,13 +69,15 @@ class EmailAction extends ConfigurableActionBase implements ContainerFactoryPlug
    *   The entity manager.
    * @param \Psr\Log\LoggerInterface $logger
    *   A logger instance.
+   * @param \Drupal\Core\Language\LanguageManagerInterface
+   *   The language manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, Token $token, EntityManagerInterface $entity_manager, LoggerInterface $logger) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, Token $token, EntityManagerInterface $entity_manager, LoggerInterface $logger, LanguageManagerInterface $language_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
-
     $this->token = $token;
     $this->storage = $entity_manager->getStorage('user');
     $this->logger = $logger;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -78,7 +87,8 @@ public static function create(ContainerInterface $container, array $configuratio
     return new static($configuration, $plugin_id, $plugin_definition,
       $container->get('token'),
       $container->get('entity.manager'),
-      $container->get('logger.factory')->get('action')
+      $container->get('logger.factory')->get('action'),
+      $container->get('language_manager')
     );
   }
 
@@ -101,7 +111,7 @@ public function execute($entity = NULL) {
       $langcode = $recipient_account->getPreferredLangcode();
     }
     else {
-      $langcode = language_default()->id;
+      $langcode = $this->languageManager->getDefaultLanguage()->id;
     }
     $params = array('context' => $this->configuration);
 
diff --git a/core/modules/aggregator/src/Tests/FeedLanguageTest.php b/core/modules/aggregator/src/Tests/FeedLanguageTest.php
index aabf111..fa8afa3 100644
--- a/core/modules/aggregator/src/Tests/FeedLanguageTest.php
+++ b/core/modules/aggregator/src/Tests/FeedLanguageTest.php
@@ -34,7 +34,7 @@ protected function setUp() {
     parent::setUp();
 
     // Create test languages.
-    $this->langcodes = array(language_load('en'));
+    $this->langcodes = array(\Drupal::languageManager()->getLanguage('en'));
     for ($i = 1; $i < 3; ++$i) {
       $language = new Language(array(
         'id' => 'l' . $i,
diff --git a/core/modules/block/src/Tests/BlockLanguageCacheTest.php b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
index d370072..0d70e78 100644
--- a/core/modules/block/src/Tests/BlockLanguageCacheTest.php
+++ b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
@@ -36,7 +36,7 @@ protected function setUp() {
     parent::setUp();
 
     // Create test languages.
-    $this->langcodes = array(language_load('en'));
+    $this->langcodes = array(\Drupal::languageManager()->getLanguage('en'));
     for ($i = 1; $i < 3; ++$i) {
       $language = new Language(array(
         'id' => 'l' . $i,
diff --git a/core/modules/comment/comment.tokens.inc b/core/modules/comment/comment.tokens.inc
index b34fdcb..508078c 100644
--- a/core/modules/comment/comment.tokens.inc
+++ b/core/modules/comment/comment.tokens.inc
@@ -119,7 +119,7 @@ function comment_tokens($type, $tokens, array $data = array(), array $options =
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/comment/src/CommentStorage.php b/core/modules/comment/src/CommentStorage.php
index 9639d59..805c2b7 100644
--- a/core/modules/comment/src/CommentStorage.php
+++ b/core/modules/comment/src/CommentStorage.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\ContentEntityDatabaseStorage;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -43,11 +44,11 @@ class CommentStorage extends ContentEntityDatabaseStorage implements CommentStor
    *   The entity manager.
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
    *   Cache backend instance to use.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityManagerInterface $entity_manager, AccountInterface $current_user, CacheBackendInterface $cache) {
-    parent::__construct($entity_info, $database, $entity_manager, $cache);
+  public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityManagerInterface $entity_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager) {
+    parent::__construct($entity_info, $database, $entity_manager, $cache, $language_manager);
     $this->currentUser = $current_user;
   }
 
@@ -60,7 +61,8 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $container->get('database'),
       $container->get('entity.manager'),
       $container->get('current_user'),
-      $container->get('cache.entity')
+      $container->get('cache.entity'),
+      $container->get('language_manager')
     );
   }
 
diff --git a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
index 837ee47..6fa4136 100644
--- a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
+++ b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
@@ -36,7 +36,7 @@ function testConfigLanguageOverride() {
     // The language module implements a config factory override object that
     // overrides configuration when the Language module is enabled. This test ensures that
     // English overrides work.
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('en'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'en bar');
 
@@ -53,11 +53,11 @@ function testConfigLanguageOverride() {
       'id' => 'de',
     )));
 
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('fr'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('fr'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'fr bar');
 
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('de'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('de'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'de bar');
 
diff --git a/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php b/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
index 791ef85..ec6fe13 100644
--- a/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
+++ b/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
@@ -24,7 +24,7 @@ public function access(Route $route, Request $request, AccountInterface $account
     // checks in addition to the checks performed for the translation overview.
     $base_access = parent::access($route, $request, $account);
     if ($base_access === static::ALLOW) {
-      $target_language = language_load($request->attributes->get('langcode'));
+      $target_language = \Drupal::languageManager()->getLanguage($request->attributes->get('langcode'));
 
       // Make sure that the target language is not locked, and that the target
       // language is not the original submission language. Although technically
diff --git a/core/modules/config_translation/src/ConfigEntityMapper.php b/core/modules/config_translation/src/ConfigEntityMapper.php
index ce66ff6..cdd0174 100644
--- a/core/modules/config_translation/src/ConfigEntityMapper.php
+++ b/core/modules/config_translation/src/ConfigEntityMapper.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\locale\LocaleConfigManager;
@@ -74,9 +75,11 @@ class ConfigEntityMapper extends ConfigNamesMapper {
    *   The string translation manager.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $translation_manager, EntityManagerInterface $entity_manager) {
-    parent::__construct($plugin_id, $plugin_definition, $config_factory, $typed_config, $locale_config_manager, $config_mapper_manager, $route_provider, $translation_manager);
+  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $translation_manager, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) {
+    parent::__construct($plugin_id, $plugin_definition, $config_factory, $typed_config, $locale_config_manager, $config_mapper_manager, $route_provider, $translation_manager, $language_manager);
     $this->setType($plugin_definition['entity_type']);
 
     $this->entityManager = $entity_manager;
@@ -97,7 +100,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $container->get('plugin.manager.config_translation.mapper'),
       $container->get('router.route_provider'),
       $container->get('string_translation'),
-      $container->get('entity.manager')
+      $container->get('entity.manager'),
+      $container->get('language_manager')
     );
   }
 
diff --git a/core/modules/config_translation/src/ConfigNamesMapper.php b/core/modules/config_translation/src/ConfigNamesMapper.php
index 57811d9..088b8dc 100644
--- a/core/modules/config_translation/src/ConfigNamesMapper.php
+++ b/core/modules/config_translation/src/ConfigNamesMapper.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -55,6 +56,13 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
   protected $configMapperManager;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * The route provider.
    *
    * @var \Drupal\Core\Routing\RouteProviderInterface
@@ -109,12 +117,14 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
    *   The route provider.
    * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    *
    * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException
    *   Throws an exception if the route specified by the 'base_route_name' in
    *   the plugin definition could not be found by the route provider.
    */
-  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation) {
+  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation, LanguageManagerInterface $language_manager) {
     $this->pluginId = $plugin_id;
     $this->pluginDefinition = $plugin_definition;
     $this->routeProvider = $route_provider;
@@ -125,6 +135,7 @@ public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterfa
     $this->configMapperManager = $config_mapper_manager;
 
     $this->stringTranslation = $string_translation;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -141,7 +152,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $container->get('locale.config.typed'),
       $container->get('plugin.manager.config_translation.mapper'),
       $container->get('router.route_provider'),
-      $container->get('string_translation')
+      $container->get('string_translation'),
+      $container->get('language_manager')
     );
   }
 
@@ -418,7 +430,7 @@ public function getLangcode() {
    */
   public function getLanguageWithFallback() {
     $langcode = $this->getLangcode();
-    $language = language_load($langcode);
+    $language = $this->languageManager->getLanguage($langcode);
     // If the language of the file is English but English is not a configured
     // language on the site, create a mock language object to represent this
     // language run-time. In this case, the title of the language is
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
index d4c18a4..793af38 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
@@ -121,7 +121,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Request $
     $mapper = $this->configMapperManager->createInstance($plugin_id);
     $mapper->populateFromRequest($request);
 
-    $language = language_load($langcode);
+    $language = \Drupal::languageManager()->getLanguage($langcode);
     if (!$language) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
index d3d63be..d9a6707 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
@@ -150,7 +150,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Request $
     $mapper = $this->configMapperManager->createInstance($plugin_id);
     $mapper->populateFromRequest($request);
 
-    $language = language_load($langcode);
+    $language = \Drupal::languageManager()->getLanguage($langcode);
     if (!$language) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index 22bcaaf..0fa02eb 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -325,7 +325,7 @@ public function testContactConfigEntityTranslation() {
 
     // Test that delete links work and operations perform properly.
     foreach ($this->langcodes as $langcode) {
-      $replacements = array('%label' => t('!label !entity_type', array('!label' => $label, '!entity_type' => Unicode::strtolower(t('Contact form')))), '@language' => language_load($langcode)->name);
+      $replacements = array('%label' => t('!label !entity_type', array('!label' => $label, '!entity_type' => Unicode::strtolower(t('Contact form')))), '@language' => \Drupal::languageManager()->getLanguage($langcode)->name);
 
       $this->drupalGet("$translation_base_url/$langcode/delete");
       $this->assertRaw(t('Are you sure you want to delete the @language translation of %label?', $replacements));
diff --git a/core/modules/config_translation/tests/src/ConfigEntityMapperTest.php b/core/modules/config_translation/tests/src/ConfigEntityMapperTest.php
index 904895f..a41263b 100644
--- a/core/modules/config_translation/tests/src/ConfigEntityMapperTest.php
+++ b/core/modules/config_translation/tests/src/ConfigEntityMapperTest.php
@@ -33,6 +33,13 @@ class ConfigEntityMapperTest extends UnitTestCase {
   protected $entityManager;
 
   /**
+   * The language manager used for testing.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface $language_manager|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $languageManager;
+
+  /**
    * The entity instance used for testing.
    *
    * @var \Drupal\Core\Entity\EntityInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -59,6 +66,8 @@ protected function setUp() {
       ->with('entity.configurable_language.edit_form')
       ->will($this->returnValue(new Route('/admin/config/regional/language/edit/{configurable_language}')));
 
+    $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
+
     $definition = array(
       'class' => '\Drupal\config_translation\ConfigEntityMapper',
       'base_route_name' => 'entity.configurable_language.edit_form',
@@ -83,7 +92,8 @@ protected function setUp() {
       $this->getMock('Drupal\config_translation\ConfigMapperManagerInterface'),
       $this->routeProvider,
       $this->getStringTranslationStub(),
-      $this->entityManager
+      $this->entityManager,
+      $this->languageManager
     );
   }
 
diff --git a/core/modules/config_translation/tests/src/ConfigNamesMapperTest.php b/core/modules/config_translation/tests/src/ConfigNamesMapperTest.php
index 3794f95..500a844 100644
--- a/core/modules/config_translation/tests/src/ConfigNamesMapperTest.php
+++ b/core/modules/config_translation/tests/src/ConfigNamesMapperTest.php
@@ -52,6 +52,13 @@ class ConfigNamesMapperTest extends UnitTestCase {
   protected $typedConfigManager;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * The configuration mapper manager.
    *
    * @var \Drupal\config_translation\ConfigMapperManagerInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -93,6 +100,8 @@ protected function setUp() {
 
     $this->baseRoute = new Route('/admin/config/system/site-information');
 
+    $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
+
     $this->routeProvider
       ->expects($this->any())
       ->method('getRouteByName')
@@ -107,7 +116,8 @@ protected function setUp() {
       $this->localeConfigManager,
       $this->configMapperManager,
       $this->routeProvider,
-      $this->getStringTranslationStub()
+      $this->getStringTranslationStub(),
+      $this->languageManager
     );
   }
 
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index afbbc8d..2fdc029 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -108,7 +108,7 @@ function contact_mail($key, &$message, $params) {
   $contact_message = $params['contact_message'];
   /** @var $sender \Drupal\user\UserInterface */
   $sender = $params['sender'];
-  $language = language_load($message['langcode']);
+  $language = \Drupal::languageManager()->getLanguage($message['langcode']);
 
   $variables = array(
     '!site-name' => \Drupal::config('system.site')->get('name'),
diff --git a/core/modules/content_translation/src/ContentTranslationHandler.php b/core/modules/content_translation/src/ContentTranslationHandler.php
index 60eb6f3..92f0380 100644
--- a/core/modules/content_translation/src/ContentTranslationHandler.php
+++ b/core/modules/content_translation/src/ContentTranslationHandler.php
@@ -100,7 +100,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
 
     // Adjust page title to specify the current language being edited, if we
     // have at least one translation.
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     if (isset($languages[$form_langcode]) && ($has_translations || $new_translation)) {
       $title = $this->entityFormTitle($entity);
       // When editing the original values display just the entity label.
@@ -133,7 +133,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
           '#submit' => array(array($this, 'entityFormSourceChange')),
         ),
       );
-      foreach (language_list(LanguageInterface::STATE_CONFIGURABLE) as $language) {
+      foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_CONFIGURABLE) as $language) {
         if (isset($translations[$language->id])) {
           $form['source_langcode']['source']['#options'][$language->id] = $language->name;
         }
@@ -146,7 +146,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, En
     $language_widget = isset($form['langcode']) && $form['langcode']['#type'] == 'language_select';
     if ($language_widget && $has_translations) {
       $form['langcode']['#options'] = array();
-      foreach (language_list(LanguageInterface::STATE_CONFIGURABLE) as $language) {
+      foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_CONFIGURABLE) as $language) {
         if (empty($translations[$language->id]) || $language->id == $entity_langcode) {
           $form['langcode']['#options'][$language->id] = $language->name;
         }
@@ -445,7 +445,7 @@ public function entityFormSourceChange($form, FormStateInterface $form_state) {
       'source' => $source,
       'target' => $form_object->getFormLangcode($form_state),
     ));
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     drupal_set_message(t('Source language set to: %language', array('%language' => $languages[$source]->name)));
   }
 
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index e17ab46..32ddaec 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -963,7 +963,7 @@ function file_tokens($type, $tokens, array $data = array(), array $options = arr
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/language/src/Form/LanguageAddForm.php b/core/modules/language/src/Form/LanguageAddForm.php
index acef863..8e47ecb 100644
--- a/core/modules/language/src/Form/LanguageAddForm.php
+++ b/core/modules/language/src/Form/LanguageAddForm.php
@@ -124,7 +124,7 @@ public function validateCustom(array $form, FormStateInterface $form_state) {
       // Reuse the editing form validation routine if we add a custom language.
       $this->validateCommon($form['custom_language'], $form_state);
 
-      if ($language = language_load($langcode)) {
+      if ($language = \Drupal::languageManager()->getLanguage($langcode)) {
         $form_state->setErrorByName('langcode', $this->t('The language %language (%langcode) already exists.', array('%language' => $language->name, '%langcode' => $langcode)));
       }
     }
@@ -142,7 +142,7 @@ public function validatePredefined($form, FormStateInterface $form_state) {
       $form_state->setErrorByName('predefined_langcode', $this->t('Fill in the language details and save the language with <em>Add custom language</em>.'));
     }
     else {
-      if ($language = language_load($langcode)) {
+      if ($language = \Drupal::languageManager()->getLanguage($langcode)) {
         $form_state->setErrorByName('predefined_langcode', $this->t('The language %language (%langcode) already exists.', array('%language' => $language->name, '%langcode' => $langcode)));
       }
     }
diff --git a/core/modules/language/src/Form/LanguageDeleteForm.php b/core/modules/language/src/Form/LanguageDeleteForm.php
index 26c83a2..bfa3b2d 100644
--- a/core/modules/language/src/Form/LanguageDeleteForm.php
+++ b/core/modules/language/src/Form/LanguageDeleteForm.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Entity\EntityConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -29,13 +30,23 @@ class LanguageDeleteForm extends EntityConfirmFormBase {
   protected $urlGenerator;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * Constructs a new LanguageDeleteForm object.
    *
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(UrlGeneratorInterface $url_generator) {
+  public function __construct(UrlGeneratorInterface $url_generator, LanguageManagerInterface $language_manager) {
     $this->urlGenerator = $url_generator;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -43,7 +54,8 @@ public function __construct(UrlGeneratorInterface $url_generator) {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('url_generator')
+      $container->get('url_generator'),
+      $container->get('language_manager')
     );
   }
 
@@ -89,14 +101,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $langcode = $this->entity->id();
 
     // Warn and redirect user when attempting to delete the default language.
-    if (language_default()->id == $langcode) {
+    if ($this->languageManager->getDefaultLanguage()->id == $langcode) {
       drupal_set_message($this->t('The default language cannot be deleted.'));
       $url = $this->urlGenerator->generateFromPath('admin/config/regional/language', array('absolute' => TRUE));
       return new RedirectResponse($url);
     }
 
     // Throw a 404 when attempting to delete a non-existing language.
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
     if (!isset($languages[$langcode])) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/language/src/Form/LanguageEditForm.php b/core/modules/language/src/Form/LanguageEditForm.php
index de2213a..fb4a250 100644
--- a/core/modules/language/src/Form/LanguageEditForm.php
+++ b/core/modules/language/src/Form/LanguageEditForm.php
@@ -9,6 +9,8 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\language\Form\LanguageFormBase;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Controller for language edit forms.
@@ -16,6 +18,32 @@
 class LanguageEditForm extends LanguageFormBase {
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * Constructs a new LanguageEditForm object.
+   *
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
+   */
+  public function __construct(LanguageManagerInterface $language_manager) {
+    $this->languageManager = $language_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('language_manager')
+    );
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getFormId() {
@@ -49,7 +77,7 @@ public function actions(array $form, FormStateInterface $form_state) {
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     // Prepare a language object for saving.
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     $langcode = $form_state->getValue('langcode');
     $language = $languages[$langcode];
     $language->name = $form_state->getValue('name');
diff --git a/core/modules/language/src/Form/NegotiationBrowserForm.php b/core/modules/language/src/Form/NegotiationBrowserForm.php
index 39d47cb..b84b83e 100644
--- a/core/modules/language/src/Form/NegotiationBrowserForm.php
+++ b/core/modules/language/src/Form/NegotiationBrowserForm.php
@@ -60,7 +60,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form = array();
 
     // Initialize a language list to the ones available, including English.
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
 
     $existing_languages = array();
     foreach ($languages as $langcode => $language) {
diff --git a/core/modules/language/src/Form/NegotiationUrlForm.php b/core/modules/language/src/Form/NegotiationUrlForm.php
index e2e241e..3692605 100644
--- a/core/modules/language/src/Form/NegotiationUrlForm.php
+++ b/core/modules/language/src/Form/NegotiationUrlForm.php
@@ -69,7 +69,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       ),
     );
 
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     $prefixes = language_negotiation_url_prefixes();
     $domains = language_negotiation_url_domains();
     foreach ($languages as $langcode => $language) {
@@ -98,7 +98,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    * Implements \Drupal\Core\Form\FormInterface::validateForm().
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
 
     // Count repeated values for uniqueness check.
     $count = array_count_values($form_state->getValue('prefix'));
diff --git a/core/modules/language/src/LanguageListBuilder.php b/core/modules/language/src/LanguageListBuilder.php
index c8dbe13..483d1e4 100644
--- a/core/modules/language/src/LanguageListBuilder.php
+++ b/core/modules/language/src/LanguageListBuilder.php
@@ -10,6 +10,11 @@
 use Drupal\Core\Config\Entity\DraggableListBuilder;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
 
 /**
  * Defines a class to build a listing of language entities.
@@ -24,6 +29,37 @@ class LanguageListBuilder extends DraggableListBuilder {
   protected $entitiesKey = 'languages';
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
+    return new static(
+      $entity_type,
+      $container->get('entity.manager')->getStorage($entity_type->id()),
+      $container->get('language_manager')
+    );
+  }
+
+  /**
+   * Constructs a new EntityListController object.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type definition.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
+   *   The entity storage controller class.
+   */
+  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, LanguageManagerInterface $language_manager) {
+    parent::__construct($entity_type, $storage);
+    $this->languageManager = $language_manager;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function load() {
@@ -47,7 +83,7 @@ public function getFormId() {
    */
   public function getDefaultOperations(EntityInterface $entity) {
     $operations = parent::getDefaultOperations($entity);
-    $default = language_default();
+    $default = $this->languageManager->getDefaultLanguage();
 
     // Deleting the site default language is not allowed.
     if ($entity->id() == $default->id) {
@@ -89,10 +125,9 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   public function submitForm(array &$form, FormStateInterface $form_state) {
     parent::submitForm($form, $form_state);
 
-    $language_manager = \Drupal::languageManager();
-    $language_manager->reset();
-    if ($language_manager instanceof ConfigurableLanguageManagerInterface) {
-      $language_manager->updateLockedLanguageWeights();
+    $this->languageManager->reset();
+    if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
+      $this->languageManager->updateLockedLanguageWeights();
     }
 
     drupal_set_message(t('Configuration saved.'));
diff --git a/core/modules/language/src/Plugin/Condition/Language.php b/core/modules/language/src/Plugin/Condition/Language.php
index 523c3df..7b10a81 100644
--- a/core/modules/language/src/Plugin/Condition/Language.php
+++ b/core/modules/language/src/Plugin/Condition/Language.php
@@ -31,7 +31,7 @@ class Language extends ConditionPluginBase {
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     if (\Drupal::languageManager()->isMultilingual()) {
       // Fetch languages.
-      $languages = language_list(LanguageInterface::STATE_CONFIGURABLE);
+      $languages = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_CONFIGURABLE);
       $langcodes_options = array();
       foreach ($languages as $language) {
         $langcodes_options[$language->id] = $language->getName();
@@ -65,7 +65,7 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
    * {@inheritdoc}
    */
   public function summary() {
-    $language_list = language_list(LanguageInterface::STATE_ALL);
+    $language_list = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
     $selected = $this->configuration['langcodes'];
     // Reduce the language list to an array of language names.
     $language_names = array_reduce($language_list, function(&$result, $item) use ($selected) {
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index 131612f..6bdc17c 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -32,7 +32,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $langcode = $filter_values['langcode'];
 
     $this->languageManager->reset();
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
 
     $langname = isset($langcode) ? $languages[$langcode]->name : "- None -";
 
diff --git a/core/modules/locale/src/Form/TranslateFormBase.php b/core/modules/locale/src/Form/TranslateFormBase.php
index 4599c44..49bd705 100644
--- a/core/modules/locale/src/Form/TranslateFormBase.php
+++ b/core/modules/locale/src/Form/TranslateFormBase.php
@@ -161,7 +161,7 @@ protected function translateFilters() {
 
     // Get all languages, except English.
     $this->languageManager->reset();
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
     $language_options = array();
     foreach ($languages as $langcode => $language) {
       if ($langcode != 'en' || locale_translate_english()) {
diff --git a/core/modules/locale/src/LocaleTypedConfig.php b/core/modules/locale/src/LocaleTypedConfig.php
index cbe9d1a..f9c8350 100644
--- a/core/modules/locale/src/LocaleTypedConfig.php
+++ b/core/modules/locale/src/LocaleTypedConfig.php
@@ -90,7 +90,7 @@ public function getTranslation($langcode) {
    * {@inheritdoc}
    */
   public function language() {
-    return language_load($this->langcode);
+    return \Drupal::languageManager()->getLanguage($this->langcode);
   }
 
   /**
diff --git a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
index 9d93b45..19a7f15 100644
--- a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
@@ -151,7 +151,7 @@ function testMenuLanguageRemovedEnglish() {
 
     // Remove English language. To do that another language has to be set as
     // default.
-    $language = language_load('cs');
+    $language = \Drupal::languageManager()->getLanguage('cs');
     $language->default = TRUE;
     language_save($language);
     language_delete('en');
diff --git a/core/modules/node/src/NodeGrantDatabaseStorage.php b/core/modules/node/src/NodeGrantDatabaseStorage.php
index a47a7d9..97b1ce8 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorage.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorage.php
@@ -179,7 +179,7 @@ public function write(NodeInterface $node, array $grants, $realm = NULL, $delete
           continue;
         }
         if (isset($grant['langcode'])) {
-          $grant_languages = array($grant['langcode'] => language_load($grant['langcode']));
+          $grant_languages = array($grant['langcode'] => \Drupal::languageManager()->getLanguage($grant['langcode']));
         }
         else {
           $grant_languages = $node->getTranslationLanguages(TRUE);
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 8ebb9cc..0dec899 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -17,6 +17,7 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Database\Query\Condition;
@@ -115,6 +116,7 @@ static public function create(ContainerInterface $container, array $configuratio
       $plugin_definition,
       $container->get('database'),
       $container->get('entity.manager'),
+      $container->get('language_manager'),
       $container->get('module_handler'),
       $container->get('config.factory')->get('search.settings'),
       $container->get('state'),
@@ -135,6 +137,8 @@ static public function create(ContainerInterface $container, array $configuratio
    *   A database connection object.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   An entity manager object.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   A module manager object.
    * @param \Drupal\Core\Config\Config $search_settings
@@ -144,9 +148,10 @@ static public function create(ContainerInterface $container, array $configuratio
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The $account object to use for checking for access to advanced search.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
     $this->database = $database;
     $this->entityManager = $entity_manager;
+    $this->languageManager = $language_manager;
     $this->moduleHandler = $module_handler;
     $this->searchSettings = $search_settings;
     $this->state = $state;
@@ -277,7 +282,7 @@ public function execute() {
 
       $extra = $this->moduleHandler->invokeAll('node_search_result', array($node, $item->langcode));
 
-      $language = language_load($item->langcode);
+      $language = $this->languageManager->getLanguage($item->langcode);
       $username = array(
         '#theme' => 'username',
         '#account' => $node->getOwner(),
diff --git a/core/modules/node/src/Plugin/views/field/Language.php b/core/modules/node/src/Plugin/views/field/Language.php
index 9f7ff51..0cfc838 100644
--- a/core/modules/node/src/Plugin/views/field/Language.php
+++ b/core/modules/node/src/Plugin/views/field/Language.php
@@ -44,7 +44,7 @@ public function render(ResultRow $values) {
     // @todo: Drupal Core dropped native language until config translation is
     // ready, see http://drupal.org/node/1616594.
     $value = $this->getValue($values);
-    $language = language_load($value);
+    $language = \Drupal::languageManager()->getLanguage($value);
     $value = $language ? $language->name : '';
     return $this->renderLink($value, $values);
   }
diff --git a/core/modules/node/src/Plugin/views/field/Node.php b/core/modules/node/src/Plugin/views/field/Node.php
index ae74239..0bbb9df 100644
--- a/core/modules/node/src/Plugin/views/field/Node.php
+++ b/core/modules/node/src/Plugin/views/field/Node.php
@@ -73,7 +73,7 @@ protected function renderLink($data, ResultRow $values) {
         $this->options['alter']['make_link'] = TRUE;
         $this->options['alter']['path'] = "node/" . $this->getValue($values, 'nid');
         if (isset($this->aliases['langcode'])) {
-          $languages = language_list();
+          $languages = \Drupal::languageManager()->getLanguages();
           $langcode = $this->getValue($values, 'langcode');
           if (isset($languages[$langcode])) {
             $this->options['alter']['language'] = $languages[$langcode];
diff --git a/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php b/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php
new file mode 100644
index 0000000..07ab69e
--- /dev/null
+++ b/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Menu\MenuRouterRebuildTest.
+ */
+
+namespace Drupal\system\Tests\Menu;
+
+use Drupal\simpletest\KernelTestBase;
+use Drupal\Core\Language\Language;
+
+/**
+ * Tests menu_router_rebuild().
+ *
+ * @group Menu
+ */
+class MenuRouterRebuildTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('system', 'menu_link_content','language', 'menu_test');
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installSchema('system', array('router'));
+    $this->installEntitySchema('menu_link_content');
+
+    $language = new Language(array('id' => 'nl'));
+    language_save($language);
+  }
+
+  /**
+   * Tests configuration context when rebuilding the menu router table.
+   */
+  public function testMenuRouterRebuildContext() {
+    // Enter a language context before rebuilding the menu router tables.
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('nl'));
+    \Drupal::service('router.builder')->rebuild();
+
+    // Check that the language context was not used for building the menu item.
+    $menu_items = \Drupal::entityManager()->getStorage('menu_link_content')->loadByProperties(array('route_name' => 'menu_test.context'));
+    $menu_item = reset($menu_items);
+    $this->assertTrue($menu_item['link_title'] == 'English', 'Config context overrides are ignored when rebuilding menu router items.');
+  }
+
+}
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 59922b7..0ced41f 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -2417,7 +2417,7 @@ function hook_tokens($type, $tokens, array $data = array(), array $options = arr
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
@@ -2490,7 +2490,7 @@ function hook_tokens_alter(array &$replacements, array $context) {
   $options = $context['options'];
 
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/system/system.tokens.inc b/core/modules/system/system.tokens.inc
index e7433aa..39e74ad 100644
--- a/core/modules/system/system.tokens.inc
+++ b/core/modules/system/system.tokens.inc
@@ -92,7 +92,7 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index a8d5101..c41ef4c 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -369,13 +369,13 @@ public function getTimeZone() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($fallback_to_default = TRUE) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     $preferred_langcode = $this->get('preferred_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->id;
     }
     else {
-      return $fallback_to_default ? language_default()->id : '';
+      return $fallback_to_default ? \Drupal::languageManager()->getDefaultLanguage()->id : '';
     }
   }
 
@@ -383,13 +383,13 @@ function getPreferredLangcode($fallback_to_default = TRUE) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($fallback_to_default = TRUE) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     $preferred_langcode = $this->get('preferred_admin_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->id;
     }
     else {
-      return $fallback_to_default ? language_default()->id : '';
+      return $fallback_to_default ? \Drupal::languageManager()->getDefaultLanguage()->id : '';
     }
   }
 
diff --git a/core/modules/user/src/Plugin/views/field/Language.php b/core/modules/user/src/Plugin/views/field/Language.php
index 0e287ab..e92d6e7 100644
--- a/core/modules/user/src/Plugin/views/field/Language.php
+++ b/core/modules/user/src/Plugin/views/field/Language.php
@@ -30,10 +30,10 @@ protected function renderLink($data, ResultRow $values) {
       }
     }
     if (empty($data)) {
-      $lang = language_default();
+      $lang = \Drupal::languageManager()->getDefaultLanguage();
     }
     else {
-      $lang = language_list();
+      $lang = \Drupal::languageManager()->getLanguages();
       $lang = $lang[$data];
     }
 
diff --git a/core/modules/user/src/UserStorage.php b/core/modules/user/src/UserStorage.php
index 65209b8..812f86f 100644
--- a/core/modules/user/src/UserStorage.php
+++ b/core/modules/user/src/UserStorage.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Password\PasswordInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -41,13 +42,15 @@ class UserStorage extends ContentEntityDatabaseStorage implements UserStorageInt
    *   The database connection to be used.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
    *   Cache backend instance to use.
    * @param \Drupal\Core\Password\PasswordInterface $password
    *   The password hashing service.
    */
-  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, PasswordInterface $password) {
-    parent::__construct($entity_type, $database, $entity_manager, $cache);
+  public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, PasswordInterface $password) {
+    parent::__construct($entity_type, $database, $entity_manager, $cache, $language_manager);
 
     $this->password = $password;
   }
@@ -61,6 +64,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
       $container->get('database'),
       $container->get('entity.manager'),
       $container->get('cache.entity'),
+      $container->get('language_manager'),
       $container->get('password')
     );
   }
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index 7d3232f..46dccc8 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -1244,9 +1244,7 @@ public function optionsSummary(&$categories, &$options) {
       'value' => t('Settings'),
       'desc' => t('Allow to set some advanced settings for the query plugin'),
     );
-
-    $language_options = $this->listLanguages(LanguageInterface::STATE_ALL | LanguageInterface::STATE_SITE_DEFAULT | PluginBase::INCLUDE_NEGOTIATED);
-
+    $language_options = \Drupal::languageManager()->getLanguages((LanguageInterface::STATE_ALL | LanguageInterface::STATE_SITE_DEFAULT | PluginBase::INCLUDE_NEGOTIATED));
     $options['field_langcode'] = array(
       'category' => 'other',
       'title' => t('Field Language'),
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index bb63902..ee35dbe 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -690,7 +690,7 @@ protected function instantiateView($form, FormStateInterface $form_state) {
       'label' => $form_state->getValue('label'),
       'description' => $form_state->getValue('description'),
       'base_table' => $this->base_table,
-      'langcode' => language_default()->id,
+      'langcode' => \Drupal::languageManager()->getDefaultLanguage()->id,
     );
 
     $view = entity_create('view', $values);
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
index fde0d84..14e4f04 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityDatabaseStorageTest.php
@@ -51,6 +51,13 @@ class ContentEntityDatabaseStorageTest extends UnitTestCase {
   protected $entityManager;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * The entity type ID.
    *
    * @var string
@@ -98,6 +105,7 @@ protected function setUp() {
     \Drupal::setContainer($this->container);
 
     $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
+    $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
     $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
     $this->cache = $this->getMock('Drupal\Core\Cache\CacheBackendInterface');
     $this->connection = $this->getMockBuilder('Drupal\Core\Database\Connection')
@@ -1086,7 +1094,7 @@ protected function setUpEntityStorage() {
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityStorage = new ContentEntityDatabaseStorage($this->entityType, $this->connection, $this->entityManager, $this->cache);
+    $this->entityStorage = new ContentEntityDatabaseStorage($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager);
   }
 
   /**
@@ -1163,7 +1171,7 @@ public function testLoadMultipleNoPersistentCache() {
       ->method('set');
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityDatabaseStorage')
-      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache))
+      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager))
       ->setMethods(array('getFromStorage'))
       ->getMock();
     $entity_storage->expects($this->once())
@@ -1213,7 +1221,7 @@ public function testLoadMultiplePersistentCacheMiss() {
       ->with($key, $entity, CacheBackendInterface::CACHE_PERMANENT, array($this->entityTypeId . '_values' => TRUE, 'entity_field_info' => TRUE));
 
     $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityDatabaseStorage')
-      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager, $this->cache))
+      ->setConstructorArgs(array($this->entityType, $this->connection, $this->entityManager,  $this->cache, $this->languageManager))
       ->setMethods(array('getFromStorage'))
       ->getMock();
     $entity_storage->expects($this->once())
