diff --git a/core/modules/system/system.tokens.inc b/core/modules/system/system.tokens.inc
index 4c27e2c..0b55bea 100644
--- a/core/modules/system/system.tokens.inc
+++ b/core/modules/system/system.tokens.inc
@@ -47,18 +47,18 @@ 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'))),
-  );
+  /** @var \Drupal\system\DateFormatInterface[] $date_formats */
+  $date_formats = \Drupal::entityManager()->getStorageController('date_format')->loadMultiple();
+  foreach ($date_formats as $date_format) {
+   $date[$date_format->id()] = array(
+     'name' => t('@name', array('@name' => $date_format->label())),
+     'description' => t("A date in the %name format. (%date)", array(
+       '%name' => $date_format->label(),
+       '%date' => format_date(REQUEST_TIME, $date_format->id()),
+     )),
+     '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/function.date.php'))),
@@ -139,20 +139,15 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
       $date = $data['date'];
     }
 
+    /** @var \Drupal\system\DateFormatInterface[] $date_formats */
+    $date_formats = \Drupal::entityManager()->getStorageController('date_format')->loadMultiple();
     foreach ($tokens as $name => $original) {
+      // Date type token replacement.
+      if (isset($date_formats[$name])) {
+        $replacements[$original] = format_date($date, $name, '', NULL, $langcode);
+      }
+ 
       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;
-
         case 'since':
           $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $langcode);
           break;
