diff --git a/modules/system/system.tokens.inc b/modules/system/system.tokens.inc
index 27d7dfd..ed0d68a 100644
--- a/modules/system/system.tokens.inc
+++ b/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_types();
+  foreach ($date_format_types as $date_format_type => $date_format_type_info) {
+    $date[$date_format_type] = array(
+      'name' => t('@type format', array('@type' => $date_format_type_info['title'])),
+      'description' => t("A date in '@type' format. (%date)", array('@type' => $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/en/function.date.php'))),
@@ -78,7 +74,6 @@ function system_token_info() {
     'description' => t("A date in UNIX timestamp format (%date)", array('%date' => REQUEST_TIME)),
   );
 
-
   // File related tokens.
   $file['fid'] = array(
     'name' => t("File ID"),
@@ -182,24 +177,17 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
       $date = $data['date'];
     }
 
+    $date_format_types = system_get_date_types();
     foreach ($tokens as $name => $original) {
-      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;
+      // Date type token replacement.
+      if (isset($date_format_types[$name])) {
+        $replacements[$original] = format_date($date, $name, '', NULL, $langcode);
+      }
 
+      switch ($name) {
         case 'since':
           $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $langcode);
           break;
-
         case 'raw':
           $replacements[$original] = $sanitize ? check_plain($date) : $date;
           break;
