diff --git modules/system/system.module modules/system/system.module
index b5dfc54..38834ee 100644
--- modules/system/system.module
+++ modules/system/system.module
@@ -3524,9 +3524,10 @@ function system_date_formats() {
  *   - dfid: The date format ID.
  *   - format: The format string.
  *   - type: The machine-readable name of the date type.
- *   - locales: An array of language codes. This can include both 2 character
- *     language codes like 'en and 'fr' and 5 character language codes like
- *     'en-gb' and 'en-us'.
+ *   - locales: An array of locale codes, representing all the locales that
+ *     this format can apply to. This can include both 2 character language
+ *     codes like 'en and 'fr' and 5 character locale codes like 'en-gb' and
+ *     'en-us'. An empty array indicates the format is not locale-specific.
  *   - locked: A boolean indicating whether or not this date type should be
  *     configurable from the user interface.
  *   - module: The name of the module that defined this date format in its
@@ -3693,12 +3694,13 @@ function _system_date_format_types_build() {
  *   - dfid: The date format ID.
  *   - format: The PHP date format string.
  *   - type: The machine-readable name of the date type the format belongs to.
- *   - locales: An array of language codes. This can include both 2 character
- *     language codes like 'en and 'fr' and 5 character language codes like
- *     'en-gb' and 'en-us'.
+ *   - locales: An array of locale codes, representing all the locales that
+ *     this format can apply to. This can include both 2 character language
+ *     codes like 'en and 'fr' and 5 character locale codes like 'en-gb' and
+ *     'en-us'. An empty array indicates the format is not locale-specific.
  *   - locked: A boolean indicating whether or not this date type should be
  *     configurable from the user interface.
- *   - module: The name of the module that defined this format in its
+ *   - module: The name of the module that defined this date format in its
  *     hook_date_formats(). An empty string if the format was user-defined.
  *   - is_new: A boolean indicating whether or not this date type is as of yet
  *     unsaved in the database.
@@ -3712,31 +3714,35 @@ function _system_date_formats_build() {
     system_date_format_type_save($info);
   }
 
-  // Get formats supplied by various contrib modules.
-  $module_formats = module_invoke_all('date_formats');
+  // Get list of modules that implement hook_date_formats().
+  $modules = module_implements('date_formats');
 
-  foreach ($module_formats as $module_format) {
-    // System types are locked.
-    $module_format['locked'] = 1;
-    // If no date type is specified, assign 'custom'.
-    if (!isset($module_format['type'])) {
-      $module_format['type'] = 'custom';
-    }
-    if (!in_array($module_format['type'], array_keys($types))) {
-      continue;
-    }
-    if (!isset($date_formats[$module_format['type']])) {
-      $date_formats[$module_format['type']] = array();
-    }
+  foreach ($modules as $module) {
+    $module_formats = module_invoke($module, 'date_formats');
+    foreach ($module_formats as $module_format) {
+      $module_format['module'] = $module;
+      // System types are locked.
+      $module_format['locked'] = 1;
+      // If no date type is specified, assign 'custom'.
+      if (!isset($module_format['type'])) {
+        $module_format['type'] = 'custom';
+      }
+      if (!in_array($module_format['type'], array_keys($types))) {
+        continue;
+      }
+      if (!isset($date_formats[$module_format['type']])) {
+        $date_formats[$module_format['type']] = array();
+      }
 
-    // If another module already set this format, merge in the new settings.
-    if (isset($date_formats[$module_format['type']][$module_format['format']])) {
-      $date_formats[$module_format['type']][$module_format['format']] = array_merge_recursive($date_formats[$module_format['type']][$module_format['format']], $module_format);
-    }
-    else {
-      // This setting will be overridden later if it already exists in the db.
-      $module_format['is_new'] = TRUE;
-      $date_formats[$module_format['type']][$module_format['format']] = $module_format;
+      // If another module already set this format, merge in the new settings.
+      if (isset($date_formats[$module_format['type']][$module_format['format']])) {
+        $date_formats[$module_format['type']][$module_format['format']] = array_merge_recursive($date_formats[$module_format['type']][$module_format['format']], $module_format);
+      }
+      else {
+        // This setting will be overridden later if it already exists in the db.
+        $module_format['is_new'] = TRUE;
+        $date_formats[$module_format['type']][$module_format['format']] = $module_format;
+      }
     }
   }
 
@@ -3748,6 +3754,7 @@ function _system_date_formats_build() {
       $date_formats[$record->type] = array();
     }
     $format = (array) $record;
+    unset($format['language']);
     $format['is_new'] = FALSE; // It's in the db, so override this setting.
     // If this format not already present, add it to the array.
     if (!isset($date_formats[$record->type][$record->format])) {
