diff --git modules/locale/locale.admin.inc modules/locale/locale.admin.inc
index 9189c71..5b70518 100644
--- modules/locale/locale.admin.inc
+++ modules/locale/locale.admin.inc
@@ -1397,20 +1397,42 @@ function locale_date_format_form($form, &$form_state, $langcode) {
   // Get list of date format types.
   $types = system_get_date_types();
 
-  // Get list of available formats.
-  $formats = system_get_date_formats();
-  $choices = array();
-  foreach ($formats as $type => $list) {
-    foreach ($list as $f => $format) {
-      $choices[$f] = format_date(REQUEST_TIME, 'custom', $f);
-    }
+  // Get list of all available date formats.
+  $all_formats = array();
+  drupal_static_reset('system_get_date_formats');
+  $date_formats = system_get_date_formats(); // Call this to rebuild the list, and to have default list.
+  foreach ($date_formats as $type => $format_info) {
+    $all_formats = array_merge($all_formats, $format_info);
   }
-  reset($formats);
+  $custom_formats = system_get_date_formats('custom');
 
   // Get configured formats for each language.
   $locale_formats = system_date_format_locale($langcode);
+
   // Display a form field for each format type.
   foreach ($types as $type => $type_info) {
+    // If a system type, only show the available formats for that type and
+    // custom ones.
+    if ($type_info['locked'] == 1) {
+      $formats = system_get_date_formats($type);
+      if (empty($formats)) {
+        $formats = $all_formats;
+      }
+      elseif (!empty($custom_formats)) {
+        $formats = array_merge($formats, $custom_formats);
+      }
+    }
+    // If a user configured type, show all available date formats.
+    else {
+      $formats = $all_formats;
+    }
+
+    $choices = array();
+    foreach ($formats as $f => $format) {
+      $choices[$f] = format_date(REQUEST_TIME, 'custom', $f);
+    }
+    reset($formats);
+
     if (!empty($locale_formats) && in_array($type, array_keys($locale_formats))) {
       $default = $locale_formats[$type];
     }
diff --git modules/locale/locale.test modules/locale/locale.test
index d103ade..13ece5c 100644
--- modules/locale/locale.test
+++ modules/locale/locale.test
@@ -2323,15 +2323,15 @@ class LocaleDateFormatsFunctionalTest extends DrupalWebTestCase {
     $this->drupalGet('admin/config/regional/date-time/locale');
     $this->assertText('Français', 'Configured languages appear.');
     $edit = array(
-      'date_format_long' => 'd.m.Y - H:i',
-      'date_format_medium' => 'd.m.Y - H:i',
+      'date_format_long' => 'l, F j, Y - H:i',
+      'date_format_medium' => 'F j, Y - H:i',
       'date_format_short' => 'd.m.Y - H:i',
     );
     $this->drupalPost('admin/config/regional/date-time/locale/fr/edit', $edit, t('Save configuration'));
     $this->assertText(t('Configuration saved.'), 'French date formats updated.');
     $edit = array(
-      'date_format_long' => 'j M Y - g:ia',
-      'date_format_medium' => 'j M Y - g:ia',
+      'date_format_long' => 'l, j F Y - g:ia',
+      'date_format_medium' => 'j F Y - g:ia',
       'date_format_short' => 'j M Y - g:ia',
     );
     $this->drupalPost('admin/config/regional/date-time/locale/en/edit', $edit, t('Save configuration'));
@@ -2342,10 +2342,10 @@ class LocaleDateFormatsFunctionalTest extends DrupalWebTestCase {
 
     // Configure format for the node posted date changes with the language.
     $this->drupalGet('node/' . $node->nid);
-    $english_date = format_date($node->created, 'custom', 'j M Y');
+    $english_date = format_date($node->created, 'custom', 'j F Y - g:ia');
     $this->assertText($english_date, t('English date format appears'));
     $this->drupalGet('fr/node/' . $node->nid);
-    $french_date = format_date($node->created, 'custom', 'd.m.Y');
+    $french_date = format_date($node->created, 'custom', 'F j, Y - H:i');
     $this->assertText($french_date, t('French date format appears'));
   }
 }
