diff --git a/plugins/content_types/token/token.inc b/plugins/content_types/token/token.inc
index c43abd2..7c8b9c6 100644
--- a/plugins/content_types/token/token.inc
+++ b/plugins/content_types/token/token.inc
@@ -33,20 +33,22 @@ function ctools_token_content_type_content_type($subtype) {
  */
 function ctools_token_content_type_content_types() {
   // This will hold all the properties.
-  $types = array();
-  $info = token_info();
-
-  foreach ($info['tokens'] as $entity_type => $tokens) {
-    foreach ($tokens as $name => $token) {
-      if (!empty($token['name'])) {
-        $token += array('description' => '');
-        $types[$entity_type . ':' . $name] = array(
-          'category' => t('@entity (tokens)', array('@entity' => ucfirst($entity_type))),
-          'icon' => 'icon_token.png',
-          'title' => $token['name'],
-          'description' => $token['description'],
-          'required context' => new ctools_context_required(t(ucfirst($entity_type)), $entity_type),
-        );
+  $types = &drupal_static(__FUNCTION__, array());
+  if (empty($types)) {
+    $info = token_info();
+
+    foreach ($info['tokens'] as $entity_type => $tokens) {
+      foreach ($tokens as $name => $token) {
+        if (!empty($token['name'])) {
+          $token += array('description' => '');
+          $types[$entity_type . ':' . $name] = array(
+            'category' => t('@entity (tokens)', array('@entity' => ucfirst($entity_type))),
+            'icon' => 'icon_token.png',
+            'title' => $token['name'],
+            'description' => $token['description'],
+            'required context' => new ctools_context_required(t(ucfirst($entity_type)), $entity_type),
+          );
+        }
       }
     }
   }
