Index: modules/locale/locale.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.admin.inc,v
retrieving revision 1.14
diff -u -p -r1.14 locale.admin.inc
--- modules/locale/locale.admin.inc	29 May 2010 18:45:31 -0000	1.14
+++ modules/locale/locale.admin.inc	23 Jun 2010 00:08:07 -0000
@@ -99,7 +99,9 @@ function theme_locale_languages_overview
 function locale_languages_overview_form_submit($form, &$form_state) {
   $languages = language_list();
   $default = language_default();
+  $url_prefixes = variable_get('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX) == LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX;
   $enabled_count = 0;
+
   foreach ($languages as $langcode => $language) {
     if ($form_state['values']['site_default'] == $langcode || $default->language == $langcode) {
       // Automatically enable the default language and the language
@@ -107,6 +109,16 @@ function locale_languages_overview_form_
       // value from that disabled checkbox).
       $form_state['values']['enabled'][$langcode] = 1;
     }
+
+    // If language URL prefixes are enabled we must clear language domains and
+    // assign a valid prefix to each non-default language. 
+    if ($url_prefixes) {
+      $language->domain = '';
+      if (empty($language->prefix) && $form_state['values']['site_default'] != $langcode) {
+        $language->prefix = $langcode;
+      }
+    }
+
     if ($form_state['values']['enabled'][$langcode]) {
       $enabled_count++;
       $language->enabled = 1;
@@ -114,19 +126,25 @@ function locale_languages_overview_form_
     else {
       $language->enabled = 0;
     }
+
     $language->weight = $form_state['values']['weight'][$langcode];
+
     db_update('languages')
       ->fields(array(
         'enabled' => $language->enabled,
         'weight' => $language->weight,
+        'prefix' => $language->prefix,
+        'domain' => $language->domain,
       ))
       ->condition('language', $langcode)
       ->execute();
+
     $languages[$langcode] = $language;
   }
-  drupal_set_message(t('Configuration saved.'));
+
   variable_set('language_default', $languages[$form_state['values']['site_default']]);
   variable_set('language_count', $enabled_count);
+  drupal_set_message(t('Configuration saved.'));
 
   // Changing the language settings impacts the interface.
   cache_clear_all('*', 'cache_page', TRUE);
Index: modules/locale/locale.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.test,v
retrieving revision 1.72
diff -u -p -r1.72 locale.test
--- modules/locale/locale.test	27 May 2010 12:29:39 -0000	1.72
+++ modules/locale/locale.test	23 Jun 2010 00:08:07 -0000
@@ -89,6 +89,11 @@ class LocaleConfigurationTest extends Dr
     $this->assertNoFieldChecked('edit-site-default-en', t('Default language updated.'));
     $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
 
+    // Check if a valid language prefix is added after changing the default
+    // language.
+    $this->drupalGet('admin/config/regional/language/edit/en');
+    $this->assertFieldByXPath('//input[@name="prefix"]', 'en', t('A valid path prefix has been added to the previous default language.'));
+
     // Ensure we can't delete the default language.
     $this->drupalGet('admin/config/regional/language/delete/' . $langcode);
     $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
