diff --git a/dart.admin.inc b/dart.admin.inc
index c1b60cc..c79bd18 100644
--- a/dart.admin.inc
+++ b/dart.admin.inc
@@ -286,6 +286,12 @@ function dart_prefix_site_zone_form($required, $default_values = array()) {
     '#attributes' => array('style' => 'width:auto'),
     '#description' => t('Typically this is hte subsection of your site.'),
   );
+  $form['tokens'] = array(
+    '#theme' => 'token_tree',
+    '#token_types' => array('node', 'menu', 'term', 'user'),
+    '#global_types' => TRUE,
+    '#click_insert' => TRUE,
+  );
 
   return $form;
 }
@@ -321,5 +327,5 @@ function theme_dart_prefix_site_zone_form($variables) {
     "#suffix" => '<div class="description">' . $form['#description'] . theme('item_list', array('items' => $descriptions)) . '</div></div>',
   );
 
-  return drupal_render($form['dart_prefix_site_zone']);
+  return drupal_render($form['dart_prefix_site_zone']) . drupal_render($form['tokens']);
 }
diff --git a/dart.module b/dart.module
index b77f671..1ed453e 100644
--- a/dart.module
+++ b/dart.module
@@ -339,6 +339,10 @@ function dart_tag_prepare(&$tags) {
     $variables = array('prefix', 'site', 'zone', 'slug');
     foreach ($variables as $var) {
       $tag->{$var} = empty($tag->settings['overrides'][$var]) ? variable_get('dart_global_' . $var, '') : $tag->settings['overrides'][$var];
+      $tag->{$var} = token_replace($tag->{$var}, _dart_get_token_context(), array(
+        'clear' => TRUE,
+        'sanitize' => TRUE,
+      ));
     }
     $tag->slug = ($tag->slug != '<none>' ? $tag->slug : '');
 
@@ -553,7 +557,10 @@ function _dart_block_tags() {
 function _dart_add_key_val(&$tag, $key, $val = NULL, $eval = FALSE) {
   if (!empty($val)) {
     $tag->key_vals[$key][] = array(
-      'val' => $val,
+      'val' => token_replace($val, _dart_get_token_context(), array(
+        'clear' => TRUE,
+        'sanitize' => TRUE,
+      )),
       'eval' => $eval,
     );
   }
@@ -666,6 +673,28 @@ function _dart_build_term_key_vals() {
 }
 
 /**
+ * Return an array of contexts to be used by token_replace().
+ * @return array
+ */
+function _dart_get_token_context() {
+  $context = &drupal_static(__FUNCTION__);
+  if (empty($context)) {
+    if (arg(0) == 'node' && is_numeric(arg(1))) {
+      $context['node'] = node_load(arg(1));
+    }
+    if (arg(0) == 'taxonomy' && is_numeric(arg(2))) {
+      $context['term'] = taxonomy_term_load(arg(2));
+    }
+    $context['menu'] = menu_load('main-menu');
+
+    // Allow other modules to alter the current token context.
+    drupal_alter('dart_token_context', $context);
+  }
+
+  return $context;
+}
+
+/**
  * Template preprocess function for dart tags.
  */
 function template_preprocess_dart_tag(&$variables) {
diff --git a/plugins/export_ui/dart_ctools_export_ui.inc b/plugins/export_ui/dart_ctools_export_ui.inc
index 8ab7f07..4ddf994 100644
--- a/plugins/export_ui/dart_ctools_export_ui.inc
+++ b/plugins/export_ui/dart_ctools_export_ui.inc
@@ -275,6 +275,13 @@ function dart_tag_name_exists($machinename) {
  */
 function theme_dart_key_vals_form($variables) {
   $form = &$variables['form'];
+  $form['tokens'] = array(
+    '#theme' => 'token_tree',
+    '#token_types' => array('node', 'menu', 'term', 'user'),
+    '#global_types' => TRUE,
+    '#click_insert' => TRUE,
+  );
+
   $rows = array();
   $headers = array(
     t('Key'),
@@ -314,5 +321,6 @@ function theme_dart_key_vals_form($variables) {
 
   $output = theme('table', array('header' => $headers, 'rows' => $rows));
   $output .= drupal_render_children($form);
+
   return $output;
 }
