diff --git a/core/modules/language/language.info b/core/modules/language/language.info
index 699b283..b4b307a 100644
--- a/core/modules/language/language.info
+++ b/core/modules/language/language.info
@@ -1,5 +1,5 @@
 name = Language
-description = Lets you configure a number of languages to be used on your website.
+description = Lets you configure a number of languages to be used on your website and provides language negotiation functionality.
 package = Core
 version = VERSION
 core = 8.x
diff --git a/core/modules/language/language.install b/core/modules/language/language.install
index 92c61f4..92f61a0 100644
--- a/core/modules/language/language.install
+++ b/core/modules/language/language.install
@@ -15,25 +15,10 @@ function language_install() {
   // Add the default language to the database too.
   language_save(language_default());
 
+  // Enable URL language detection for each configurable language type.
   require_once DRUPAL_ROOT . '/core/includes/language.inc';
-
-  // We cannot rely on language negotiation hooks here, because locale module is
-  // not enabled yet. Therefore language_negotiation_set() cannot be used.
-  $info = language_negotiation_info();
-  $method = $info[LANGUAGE_NEGOTIATION_URL];
-  $method_fields = array('callbacks', 'file', 'cache');
-  $negotiation = array();
-
-  // Store only the needed data.
-  foreach ($method_fields as $field) {
-    if (isset($method[$field])) {
-      $negotiation[LANGUAGE_NEGOTIATION_URL][$field] = $method[$field];
-    }
-  }
-
-  // Enable URL language detection for each (core) configurable language type.
-  foreach (language_types_get_configurable() as $type) {
-    variable_set("language_negotiation_$type", $negotiation);
+  foreach (language_types_get_configurable(FALSE) as $type) {
+    language_negotiation_set($type, array(LANGUAGE_NEGOTIATION_URL => 0));
   }
 }
 
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index fc5048f..9d7eccc 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -452,7 +452,9 @@ function language_block_info() {
   $info = language_types_info();
   foreach (language_types_get_configurable(FALSE) as $type) {
     $block[$type] = array(
-      'info' => t('Language switcher (@type)', array('@type' => $info[$type]['name'])),
+      // The language type name is supposed to be passed through t(), hence we
+      // need to avoid double-escaping it.
+      'info' => t('Language switcher (!type)', array('!type' => $info[$type]['name'])),
       // Not worth caching.
       'cache' => DRUPAL_NO_CACHE,
     );
diff --git a/core/modules/locale/locale.info b/core/modules/locale/locale.info
index 28bbd03..8b3e5f7 100644
--- a/core/modules/locale/locale.info
+++ b/core/modules/locale/locale.info
@@ -1,5 +1,5 @@
 name = Locale
-description = Provides language negotiation functionality and user interface translation to languages other than English.
+description = Provides user interface translation to languages other than English.
 package = Core
 version = VERSION
 core = 8.x
diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index d0aa6ae..3bbe945 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -427,11 +427,7 @@ function locale_update_8006() {
   );
   // Add all language type weight variables. As the function language_types()
   // is not available its functionality is rebuild.
-  $language_types = variable_get('language_types', array(
-    LANGUAGE_TYPE_INTERFACE => TRUE,
-    LANGUAGE_TYPE_CONTENT => FALSE,
-    LANGUAGE_TYPE_URL => FALSE,
-  ));
+  $language_types = variable_get('language_types', language_types_get_default());
   foreach ($language_types as $language_type => $configurable) {
     $variable_names[] = 'language_negotiation_methods_weight_' . $language_type;
   }
@@ -482,7 +478,7 @@ function locale_update_8006() {
       }
     }
     // If necessary maintain the order of the values / keys of the variable.
-    if (stristr($variable_name, 'language_negotiation_methods_weight_') !== FALSE){
+    if (stristr($variable_name, 'language_negotiation_methods_weight_') !== FALSE) {
       asort($new_value);
     }
     variable_set($variable_name, $new_value);
