Index: modules/system/system.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.test,v
retrieving revision 1.148
diff -u -p -r1.148 system.test
--- modules/system/system.test	15 Oct 2010 04:44:08 -0000	1.148
+++ modules/system/system.test	15 Oct 2010 22:34:45 -0000
@@ -1525,7 +1525,7 @@ class TokenReplaceTestCase extends Drupa
     $source .= '[node:author:name]';   // Node author's name
     $source .= '[node:created:since]'; // Time since the node was created
     $source .= '[current-user:name]';  // Current user's name
-    $source .= '[date:short]';         // Short date format of REQUEST_TIME
+    $source .= '[current-date:short]'; // Short date format of REQUEST_TIME
     $source .= '[user:name]';          // No user passed in, should be untouched
     $source .= '[bogus:token]';        // Non-existent token
 
Index: modules/system/system.tokens.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.tokens.inc,v
retrieving revision 1.12
diff -u -p -r1.12 system.tokens.inc
--- modules/system/system.tokens.inc	17 Aug 2010 21:31:13 -0000	1.12
+++ modules/system/system.tokens.inc	15 Oct 2010 22:34:45 -0000
@@ -20,6 +20,11 @@ function system_token_info() {
   $types['date'] = array(
     'name' => t("Dates"),
     'description' => t("Tokens related to times and dates."),
+    'needs-data' => 'date',
+  );
+  $types['current-date'] = array(
+    'name' => t("Dates"),
+    'description' => t("Tokens related to the current time and date."),
   );
   $types['file'] = array(
     'name' => t("Files"),
@@ -135,10 +140,13 @@ function system_token_info() {
  */
 function system_tokens($type, $tokens, array $data = array(), array $options = array()) {
   $url_options = array('absolute' => TRUE);
-  if (isset($language)) {
-    $url_options['language'] = $language;
+  if (isset($options['language'])) {
+    $url_options['language'] = $options['language'];
+    $language_code = $options['language']->language;
+  }
+  else {
+    $language_code = NULL;
   }
-  $langcode = (isset($language) ? $language->language : NULL);
   $sanitize = !empty($options['sanitize']);
 
   $replacements = array();
@@ -175,30 +183,25 @@ function system_tokens($type, $tokens, a
     }
   }
 
-  elseif ($type == 'date') {
-    if (empty($data['date'])) {
-      $date = REQUEST_TIME;
-    }
-    else {
-      $date = $data['date'];
-    }
+  elseif ($type == 'date' && !empty($data['date'])) {
+    $date = $data['date'];
 
     foreach ($tokens as $name => $original) {
       switch ($name) {
         case 'short':
-          $replacements[$original] = format_date($date, 'short', '', NULL, $langcode);
+          $replacements[$original] = format_date($date, 'short', '', NULL, $language_code);
           break;
 
         case 'medium':
-          $replacements[$original] = format_date($date, 'medium', '', NULL, $langcode);
+          $replacements[$original] = format_date($date, 'medium', '', NULL, $language_code);
           break;
 
         case 'long':
-          $replacements[$original] = format_date($date, 'long', '', NULL, $langcode);
+          $replacements[$original] = format_date($date, 'long', '', NULL, $language_code);
           break;
 
         case 'since':
-          $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $langcode);
+          $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $language_code);
           break;
 
         case 'raw':
@@ -209,11 +212,15 @@ function system_tokens($type, $tokens, a
 
     if ($created_tokens = token_find_with_prefix($tokens, 'custom')) {
       foreach ($created_tokens as $name => $original) {
-        $replacements[$original] = format_date($date, 'custom', $name, NULL, $langcode);
+        $replacements[$original] = format_date($date, 'custom', $name, NULL, $language_code);
       }
     }
   }
 
+  elseif ($type == 'current-date') {
+    $replacements += token_generate('date', $tokens, array('date' => REQUEST_TIME), $options);
+  }
+
   elseif ($type == 'file' && !empty($data['file'])) {
     $file = $data['file'];
 
@@ -251,7 +258,7 @@ function system_tokens($type, $tokens, a
 
         // These tokens are default variations on the chained tokens handled below.
         case 'timestamp':
-          $replacements[$original] = format_date($file->timestamp, 'medium', '', NULL, $langcode);
+          $replacements[$original] = format_date($file->timestamp, 'medium', '', NULL, $language_code);
           break;
 
         case 'owner':
