diff --git a/core/modules/system/system.tokens.inc b/core/modules/system/system.tokens.inc
index 8cb1d7b..dee5066 100644
--- a/core/modules/system/system.tokens.inc
+++ b/core/modules/system/system.tokens.inc
@@ -53,18 +53,14 @@ function system_token_info() {
   );
 
   // Date related tokens.
-  $date['short'] = array(
-    'name' => t("Short format"),
-    'description' => t("A date in 'short' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'short'))),
-  );
-  $date['medium'] = array(
-    'name' => t("Medium format"),
-    'description' => t("A date in 'medium' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'medium'))),
-  );
-  $date['long'] = array(
-    'name' => t("Long format"),
-    'description' => t("A date in 'long' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'long'))),
-  );
+ $date_format_types = system_get_date_formats();
+ foreach ($date_format_types as $date_format_type => $date_format_type_info) {
+   $date[$date_format_type] = array(
+     'name' => t('@name format', array('@name' => $date_format_type_info['name'])),
+     'description' => t("A date in '@name' format. (%date)", array('@name' => $date_format_type, '%date' => format_date(REQUEST_TIME, $date_format_type))),
+     'module' => 'token',
+   );
+ }
   $date['custom'] = array(
     'name' => t("Custom format"),
     'description' => t("A date in a custom format. See !php-date for details.", array('!php-date' => l(t('the PHP documentation'), 'http://php.net/manual/function.date.php'))),
@@ -183,20 +179,14 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
       $date = $data['date'];
     }
 
+    $date_format_types = system_get_date_formats();
     foreach ($tokens as $name => $original) {
+      // Date type token replacement.
+      if (isset($date_format_types[$name])) {
+        $replacements[$original] = format_date($date, $name, '', NULL, $langcode);
+      }
+ 
       switch ($name) {
-        case 'short':
-          $replacements[$original] = format_date($date, 'short', '', NULL, $langcode);
-          break;
-
-        case 'medium':
-          $replacements[$original] = format_date($date, 'medium', '', NULL, $langcode);
-          break;
-
-        case 'long':
-          $replacements[$original] = format_date($date, 'long', '', NULL, $langcode);
-          break;
-
         case 'since':
           $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $langcode);
           break;
