diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index dc4a3d43c3a6e88fb7cfc756cf26d9a7ffe6c2a5..fa1335b8f6d0bfe0ae0403f156b7ffd2136c9800 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -2691,9 +2691,9 @@ function language_list($all = FALSE) {
     else {
       // No language module, so use the default language only.
       $languages = array($default->langcode => $default);
+      // Add the special languages, they will be filtered later if needed.
+      $languages += language_locked_languages($default->weight);
     }
-    // Add the special languages, they will be filtered later if needed.
-    $languages += language_locked_languages();
   }
 
   // Filter the full list of languages based on the value of the $all flag. By
@@ -2720,7 +2720,7 @@ function language_list($all = FALSE) {
  * @return
  *   An array of language objects.
  */
-function language_locked_languages($weight = 20) {
+function language_locked_languages($weight = 0) {
   $locked_language = array(
     'default' => FALSE,
     'locked' => TRUE,
@@ -2731,17 +2731,17 @@ function language_locked_languages($weight = 20) {
   $languages[LANGUAGE_NOT_SPECIFIED] = new Language(array(
     'langcode' => LANGUAGE_NOT_SPECIFIED,
     'name' => t('Not specified'),
-    'weight' => $weight++,
+    'weight' => ++$weight,
   ) + $locked_language);
   $languages[LANGUAGE_NOT_APPLICABLE] = new Language(array(
     'langcode' => LANGUAGE_NOT_APPLICABLE,
     'name' => t('Not applicable'),
-    'weight' => $weight++,
+    'weight' => ++$weight,
   ) + $locked_language);
   $languages[LANGUAGE_MULTIPLE] = new Language(array(
     'langcode' => LANGUAGE_MULTIPLE,
     'name' => t('Multiple'),
-    'weight' => $weight++,
+    'weight' => ++$weight,
   ) + $locked_language);
   return $languages;
 }
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 1dcb8e7afa7a648abf85598b0302193cd55ddb1c..49df15b232b980b3eccad0c51106b5ac2e14901d 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -234,7 +234,8 @@ function update_prepare_d8_language() {
       );
       db_add_field('language', 'locked', $locked_spec);
 
-      $languages = language_locked_languages();
+      $max_language_weight = db_query('SELECT MAX(weight) FROM {language}')->fetchField();
+      $languages = language_locked_languages($max_language_weight);
       foreach ($languages as $language) {
         db_insert('language')
           ->fields(array(
diff --git a/core/modules/language/language.install b/core/modules/language/language.install
index 1a1560bd3acb81e3d8639e7223318ced106f568c..b07753bc39826978c3c7c3b93f5a5f87c6f4c515 100644
--- a/core/modules/language/language.install
+++ b/core/modules/language/language.install
@@ -14,8 +14,8 @@
 function language_install() {
   // Add the default language at first so that language_list() returns this in
   // language_special_languages().
-  language_save(language_default());
-  $languages = language_locked_languages();
+  $default_language = language_save(language_default());
+  $languages = language_locked_languages($default_language->weight);
   foreach ($languages as $language) {
     language_save($language);
   }