diff --git a/core/modules/system/system.test b/core/modules/system/system.test
index 4e3761d..b3b742f 100644
--- a/core/modules/system/system.test
+++ b/core/modules/system/system.test
@@ -1835,8 +1835,9 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
     $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 .= '[date:raw]';           // No date passed in, should be untouched
     $source .= '[bogus:token]';        // Non-existent token
 
     $target  = check_plain($node->title);
@@ -1851,6 +1852,7 @@ class TokenReplaceTestCase extends DrupalWebTestCase {
 
     // Test without using the clear parameter (non-existent token untouched).
     $target .= '[user:name]';
+    $target .= '[date:raw]';
     $target .= '[bogus:token]';
     $result = token_replace($source, array('node' => $node), array('language' => $language));
     $this->assertEqual($target, $result, 'Valid tokens replaced while invalid tokens ignored.');
diff --git a/core/modules/system/system.tokens.inc b/core/modules/system/system.tokens.inc
index b612d10..09606a4 100644
--- a/core/modules/system/system.tokens.inc
+++ b/core/modules/system/system.tokens.inc
@@ -19,6 +19,11 @@ function system_token_info() {
   $types['date'] = array(
     'name' => t("Dates"),
     'description' => t("Tokens related to times and dates."),
+    'need-data' => 'date',
+  );
+  $types['current-date'] = array(
+    'name' => t('Current date'),
+    'description' => t('Tokens related to the current time and date.'),
   );
   $types['file'] = array(
     'name' => t("Files"),
@@ -173,13 +178,8 @@ function system_tokens($type, $tokens, array $data = array(), array $options = 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) {
@@ -212,6 +212,10 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
     }
   }
 
+  elseif ($type == 'current-date') {
+    $replacements += token_generate('date', $tokens, array('date' => REQUEST_TIME), $options);
+  }
+
   elseif ($type == 'file' && !empty($data['file'])) {
     $file = $data['file'];
 
