diff --git token.module token.module
index 5cac6ad..8320410 100644
--- token.module
+++ token.module
@@ -462,7 +462,18 @@ function _token_get_id($type = 'global', $object = NULL) {
  */
 function token_get_date_token_info($description, $token_prefix = '') {
   $time = time();
-  $tokens[$token_prefix . 'small']  = t("!description date in 'small' format. (%date)", array('!description' => $description, '%date' => format_date($time, 'small')));
+  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('!description date (!format)', array('!description' => $description, '!format' => $type_info['title']));
+      }
+    }
+  }
+  else {
+    $tokens[$token_prefix . 'small']  = t("!description date in 'small' format. (%date)", array('!description' => $description, '%date' => format_date($time, 'small')));
+  }
   $tokens[$token_prefix . 'yyyy']   = t("!description year (four digit)", array('!description' => $description));
   $tokens[$token_prefix . 'yy']     = t("!description year (two digit)", array('!description' => $description));
   $tokens[$token_prefix . 'month']  = t("!description month (full word)", array('!description' => $description));
@@ -490,7 +501,43 @@ function token_get_date_token_values($timestamp = NULL, $token_prefix = '', $lan
 
   if (!isset($formats)) {
     $formats = array();
-    $formats['small'] = variable_get('date_format_short', 'm/d/Y - H:i');
+    
+    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);
+      }
+    }
+    else {
+      $formats['small'] = variable_get('date_format_short', 'm/d/Y - H:i');
+    }
+    
     $formats['yyyy']  = 'Y';
     $formats['yy']    = 'y';
     $formats['month'] = 'F';
