diff --git a/core/includes/token.inc b/core/includes/token.inc
index 7a5fea1..f526d64 100644
--- a/core/includes/token.inc
+++ b/core/includes/token.inc
@@ -248,10 +248,19 @@ function token_find_with_prefix(array $tokens, $prefix, $delimiter = ':') {
  *   An associative array of token information, grouped by token type.
  */
 function token_info() {
-  $data = &drupal_static(__FUNCTION__);
-  if (!isset($data)) {
-    $data = module_invoke_all('token_info');
-    drupal_alter('token_info', $data);
+  $info = &drupal_static(__FUNCTION__);
+
+  if (!isset($info)) {
+    $cid = 'token_info:' . $GLOBALS['language']->language;
+    if ($cache = cache_get($cid)) {
+      $info = $cache->data;
+    }
+    else {
+      $info = module_invoke_all('token_info');
+      drupal_alter('token_info', $info);
+      cache_set($cid, $info);
+    }
   }
-  return $data;
+
+  return $info;
 }
