diff --git token.module token.module
index 316c072..9076889 100644
--- token.module
+++ token.module
@@ -460,6 +460,16 @@ function token_get_date_token_info($description, $token_prefix = '') {
   $tokens[$token_prefix . 'd']      = t("!description day (one or two digits without leading zeros)", array('!description' => $description));
   $tokens[$token_prefix . 'raw']    = t("!description in UNIX timestamp format (1269441371)", array('!description' => $description));
   $tokens[$token_prefix . 'since']  = t("!description in 'time-since' format. (40 years 3 months)", array('!description' => $description));
+  
+  if (module_exists('date_api')) {
+    // Get list of date formats.
+    $format_types = date_get_format_types('', TRUE);
+    if (!empty($format_types)) {
+      foreach ($format_types as $type => $type_info) {
+        $tokens[$token_prefix . $type] = t('!format', array('!format' => $type));
+      }
+    }
+  }
   return $tokens;
 }
 
@@ -502,7 +512,40 @@ function token_get_date_token_values($timestamp = NULL, $token_prefix = '') {
   if (version_compare(PHP_VERSION, '5.1.0', '>=')) {
     $tokens[$token_prefix . 'date'] = gmdate('N', $timestamp);
   }
-
+  
+  if (module_exists('date_api')) {
+    // Get list of all available date format types.
+    $format_types = date_get_format_types('', TRUE);
+
+    // Get list of all available date formats.
+    $all_formats = array();
+    $date_formats = date_get_formats('', TRUE); // 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);
+    }
+    $custom_formats = date_get_formats('custom');
+    foreach ($format_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 = date_get_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;
+      }
+      
+      $format = variable_get('date_format_' . $type, array_shift(array_keys($formats)));
+      $ts = date_convert($timestamp, DATE_UNIX, DATE_DATETIME);
+      $tokens[$token_prefix . $type] = date_format_date($ts, 'custom', $format);
+    }
+  }
   return $tokens;
 }
 
