diff --git a/eva.callbacks.php b/eva.callbacks.php
new file mode 100644
index 0000000..569058a
--- /dev/null
+++ b/eva.callbacks.php
@@ -0,0 +1,23 @@
+<?php
+
+function eva_token_tree_callback($entity_type, $js) {
+  // Generate the HTML for the tree.
+  $output = theme('token_tree', array('token_types' => array(token_get_entity_mapping('entity', $entity_type))));
+
+  // If the user doesn't have JavaScript, simply return the tree as a
+  // renderable array.
+  if ($js == 'nojs') {
+    return array(
+      'tree' => array(
+        '#markup' => $output,
+      ),
+    );
+  }
+
+  // If the users does have JavaScript, then send back ajax commands to render
+  // the tree.
+  $commands = array();
+  $commands[] = ajax_command_replace('#eva-token-tree-wrapper', $output);
+  print ajax_render($commands);
+  exit;
+}
\ No newline at end of file
diff --git a/eva.install b/eva.install
new file mode 100644
index 0000000..90bb2ee
--- /dev/null
+++ b/eva.install
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * Register the ajax callback for token with the menu system.
+ */
+function eva_update_7100() {
+  menu_rebuild();
+}
+
diff --git a/eva.module b/eva.module
index 4a32781..20ab3da 100755
--- a/eva.module
+++ b/eva.module
@@ -56,7 +56,7 @@ function eva_field_extra_fields() {
  * This is a terrible, terrible hack that should not be necessary; taxonomy and
  * some other entity types use fields, but don't implement  hook_entity_view().
  * We have to ALTER those entity types after they're built. For the time being,
- * we'll use a list of special cases to trigger this special handling. 
+ * we'll use a list of special cases to trigger this special handling.
  */
 function eva_entity_view_alter(&$build, $type) {
   $view_mode = $build['#view_mode'];
@@ -71,7 +71,7 @@ function eva_entity_view_alter(&$build, $type) {
   $views = eva_get_views($type);
 
   foreach ($views as $info) {
-    $longname = $info['name'] .'_'. $info['display'];
+    $longname = $info['name'] . '_' . $info['display'];
     if (isset($fields[$longname]) && $fields[$longname]['visible']) {
       if ($view = views_get_view($info['name'])) {
         $view->set_display($info['display']);
@@ -118,7 +118,7 @@ function eva_get_views($type = NULL, $reset = FALSE) {
 
   if (!isset($used_views) || $reset) {
     views_include('cache');
-    
+
     // If we're not resetting, check the Views cache.
     if (!$reset) {
       $cache = views_cache_get("eva");
@@ -158,8 +158,7 @@ function eva_get_views($type = NULL, $reset = FALSE) {
   // Now spit back the data.
   if (isset($type) & isset($used_views)) {
     return isset($used_views[$type]) ? $used_views[$type] : array();
-  }
-  else {
+  } else {
     return isset($used_views) ? $used_views : array();
   }
 }
@@ -183,7 +182,7 @@ function _eva_extract_entity_from_build($build) {
   if (!empty($build['#entity'])) {
     return $build['#entity'];
   }
-  
+
   // Other entities stick them here!
   elseif (!empty($build['#' . $build['#entity_type']])) {
     return $build['#' . $build['#entity_type']];
@@ -192,8 +191,7 @@ function _eva_extract_entity_from_build($build) {
   // Some entities are naughty.
   elseif ($build['#entity_type'] == 'user') {
     return $build['#account'];
-  }
-  elseif ($build['#entity_type'] == 'taxonomy_term') {
+  } elseif ($build['#entity_type'] == 'taxonomy_term') {
     return $build['#term'];
   }
 
@@ -250,4 +248,23 @@ function eva_form_views_ui_edit_form_alter(&$form, &$form_state, $form_id) {
   // Clear the field cache when views are saved. This will make sure newly
   // created EVA views and/or exposed filters will appear.
   $form['actions']['save']["#submit"][] = 'field_cache_clear';
+}
+
+/**
+ * Implements hook_menu().
+ */
+function eva_menu() {
+  $items = array();
+
+  // Callback for pulling in the token tree over ajax.
+  $items['eva/token-tree/%/%'] = array(
+    'page callback' => 'eva_token_tree_callback',
+    'page arguments' => array(2, 3),
+    'access arguments' => array('administer views'),
+    'theme callback' => 'ajax_base_page_theme',
+    'type' => MENU_CALLBACK,
+    'file' => 'eva.callbacks.php',
+  );
+
+  return $items;
 }
\ No newline at end of file
diff --git a/eva_plugin_display_entity.inc b/eva_plugin_display_entity.inc
index 449a65b..5fd1e37 100755
--- a/eva_plugin_display_entity.inc
+++ b/eva_plugin_display_entity.inc
@@ -4,6 +4,7 @@
  * The plugin that handles entity-attached views.
  */
 class eva_plugin_display_entity extends views_plugin_display {
+
   function option_definition() {
     $options = parent::option_definition();
 
@@ -67,7 +68,7 @@ class eva_plugin_display_entity extends views_plugin_display {
       'title' => t('Show title'),
       'value' => $this->get_option('show_title') ? t('Yes') : t('No'),
     );
-    
+
     $options['exposed_form_as_field'] = array(
       'category' => 'entity_view',
       'title' => t('Exposed Form as Field'),
@@ -88,7 +89,7 @@ class eva_plugin_display_entity extends views_plugin_display {
   function options_form(&$form, &$form_state) {
     // It is very important to call the parent function here:
     parent::options_form($form, $form_state);
-    
+
     $entity_info = entity_get_info();
     $entity_type = $this->get_option('entity_type');
 
@@ -158,9 +159,22 @@ class eva_plugin_display_entity extends views_plugin_display {
         );
 
         if (module_exists('token')) {
-          $form['token']['tokens'] = array(
-            '#theme' => 'token_tree',
-            '#token_types' => array(token_get_entity_mapping('entity', $entity_type)),
+
+          // Render a link that pulls in the token tree via ajax.
+          $form['token']['token-link'] = array(
+            '#prefix' => '<div id="eva-token-tree-wrapper"><p>',
+            '#suffix' => '</p></div>',
+            '#type' => 'link',
+            '#title' => t('Show Token Tree'),
+            '#href' => 'eva/token-tree/' . $entity_type . '/nojs',
+            '#ajax' => array(
+              'path' => 'eva/token-tree/' . $entity_type . '/ajax',
+            ),
+            '#options' => array(
+              'attributes' => array(
+                'target' => '_blank',
+              ),
+            ),
           );
         }
         break;
@@ -182,7 +196,6 @@ class eva_plugin_display_entity extends views_plugin_display {
           '#description' => t('Check this box to have a separate field for this view\'s exposed form on the "Manage Display" tab'),
         );
     }
-
   }
 
   function options_submit(&$form, &$form_state) {
@@ -200,7 +213,7 @@ class eva_plugin_display_entity extends views_plugin_display {
           // only one on the new type, we can select it automatically. Otherwise
           // we need to wipe the options and start over.
           $new_entity_info = entity_get_info($new_entity);
-          
+
           $new_bundle_keys = array_keys($new_entity_info['bundles']);
           $new_bundles = array();
           if (count($new_bundle_keys) == 1) {
@@ -216,8 +229,7 @@ class eva_plugin_display_entity extends views_plugin_display {
         $this->set_option('argument_mode', $form_state['values']['argument_mode']);
         if ($form_state['values']['argument_mode'] == 'token') {
           $this->set_option('default_argument', $form_state['values']['default_argument']);
-        }
-        else {
+        } else {
           $this->set_option('default_argument', NULL);
         }
         break;
@@ -227,7 +239,6 @@ class eva_plugin_display_entity extends views_plugin_display {
       case 'exposed_form_as_field':
         $this->set_option('exposed_form_as_field', $form_state['values']['exposed_form_as_field']);
         break;
-      
     }
   }
 
@@ -252,7 +263,7 @@ class eva_plugin_display_entity extends views_plugin_display {
       $entity = $this->view->current_entity;
       $entity_type = $this->view->display_handler->get_option('entity_type');
       $entity_info = entity_get_info($entity_type);
-  
+
       $arg_mode = $this->view->display_handler->get_option('argument_mode');
       if ($arg_mode == 'token') {
         if ($token_string = $this->view->display_handler->get_option('default_argument')) {
@@ -263,11 +274,10 @@ class eva_plugin_display_entity extends views_plugin_display {
           foreach ($token_values as $key => $value) {
             $new_args[$key] = $value;
           }
-  
+
           $this->view->args = $new_args;
         }
-      }
-      elseif ($arg_mode == 'id') {
+      } elseif ($arg_mode == 'id') {
         $this->view->args = array($entity->{$entity_info['entity keys']['id']});
       }
     }
@@ -302,4 +312,7 @@ class eva_plugin_display_entity extends views_plugin_display {
       return $data;
     }
   }
+
 }
+
+
