diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index ebc3b16..e341094 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -654,6 +654,7 @@ function language_negotiation_configure_form_submit($form, &$form_state) {
  * Builds the URL language negotiation method configuration form.
  */
 function language_negotiation_configure_url_form($form, &$form_state) {
+  global $base_url;
   language_negotiation_include();
 
   $form['language_negotiation_url_part'] = array(
@@ -703,7 +704,7 @@ function language_negotiation_configure_url_form($form, &$form_state) {
       '#title' => t('%language (%langcode) path prefix', array('%language' => $language->name, '%langcode' => $language->langcode)),
       '#maxlength' => 64,
       '#default_value' => isset($prefixes[$langcode]) ? $prefixes[$langcode] : '',
-      '#field_prefix' => url('', array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='),
+      '#field_prefix' => $base_url . '/' . (variable_get('clean_url', 0) ? '' : '?q='),
     );
     $form['domain'][$langcode] = array(
       '#type' => 'textfield',
diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index c29e0d8..1c6c2d7 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -290,7 +290,7 @@ function locale_update_8004() {
       // Rename the language negotiation methods weight variable.
       $weight = variable_get('locale_language_providers_weight_' . $type , NULL);
       if ($weight !== NULL) {
-        variable_set('locale_language_negotiation_methods_weight_' . $type , $weight);
+        variable_set('language_negotiation_methods_weight_' . $type , $weight);
         variable_del('locale_language_providers_weight_' . $type);
       }
     }
@@ -423,8 +423,18 @@ function locale_update_8006() {
   $variable_names = array(
     'language_negotiation_language_interface',
     'language_negotiation_language_content',
-    'language_negotiation_language_url'
+    'language_negotiation_language_url',
   );
+  // 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,
+  ));
+  foreach ($language_types as $language_type => $configurable) {
+    $variable_names[] = 'language_negotiation_methods_weight_' . $language_type;
+  }
   $callback_map = array(
     'locale_language_from_url' => 'language_from_url',
     'locale_language_switcher_url' =>  'language_switcher_url',
@@ -446,7 +456,11 @@ function locale_update_8006() {
     'locale-session' => 'language-session',
   );
   foreach ($variable_names as $variable_name) {
-    $value = variable_get($variable_name, array());
+    $value = variable_get($variable_name);
+    // Skip processing if the variable is not stored in the db.
+    if ($value === NULL) {
+      continue;
+    }
     $new_value = $value;
     foreach ($value as $type => $type_settings) {
       // Convert the file.
@@ -470,16 +484,23 @@ function locale_update_8006() {
 }
 
 /**
- * Convert the variable locale_language_negotiation_url_part, locale_language_negotiation_url_domains.
+ * Rename the option variables of the locale language negotiation.
  */
 function locale_update_8007() {
-  $value = variable_get('locale_language_negotiation_url_part', 0);
-  variable_set('language_negotiation_url_part', $value);
-  variable_del('locale_language_negotiation_url_part');
-
-  $value = variable_get('locale_language_negotiation_url_domains', 0);
-  variable_set('language_negotiation_url_domains', $value);
-  variable_del('locale_language_negotiation_url_domains');
+  $variable_name_map = array(
+    'locale_language_negotiation_url_part' => 'language_negotiation_url_part',
+    'locale_language_negotiation_url_domains' => 'language_negotiation_url_domains',
+    'locale_language_negotiation_url_prefixes' => 'language_negotiation_url_prefixes',
+    'locale_language_negotiation_session_param' => 'language_negotiation_session_param',
+  );
+  foreach ($variable_name_map as $deprecated_variable_name => $new_variable_name) {
+    // Check if this variable is stored in the db and if so rename it.
+    $value = variable_get($deprecated_variable_name);
+    if ($value !== NULL) {
+      variable_set($new_variable_name, $value);
+      variable_del($deprecated_variable_name);
+    }
+  }
 }
 
 /**
diff --git a/core/modules/simpletest/tests/upgrade/upgrade.language.test b/core/modules/simpletest/tests/upgrade/upgrade.language.test
index 245a3e3..50a4ef0 100644
--- a/core/modules/simpletest/tests/upgrade/upgrade.language.test
+++ b/core/modules/simpletest/tests/upgrade/upgrade.language.test
@@ -102,7 +102,7 @@ class LanguageUpgradePathTestCase extends UpgradePathTestCase {
     $expected_weights = array('locale-url' => '-8', 'locale-session' => '-6', 'locale-user' => '-4', 'locale-browser' => '-2', 'language-default' => '10');
     // Check that locale_language_providers_weight_language is correctly
     // renamed.
-    $current_weights = variable_get('locale_language_negotiation_methods_weight_language_interface', array());
+    $current_weights = variable_get('language_negotiation_methods_weight_language_interface', array());
     $this->assertTrue(serialize($expected_weights) == serialize($current_weights), t('Language negotiation method weights upgraded.'));
 
     // Look up migrated plural string.
