diff --git a/link.info b/link.info
index 2b65825..8a7e984 100644
--- a/link.info
+++ b/link.info
@@ -16,5 +16,6 @@ files[] = tests/link.entity_token.test
 files[] = tests/link.validate.test
 
 ; Views Handlers
+files[] = views/link_views_handler_field_linkfield.inc
 files[] = views/link_views_handler_argument_target.inc
 files[] = views/link_views_handler_filter_protocol.inc
diff --git a/views/link.views.inc b/views/link.views.inc
index 27d5182..991fa57 100644
--- a/views/link.views.inc
+++ b/views/link.views.inc
@@ -24,6 +24,19 @@
 }*/
 
 /**
+ * Implements hook_field_views_data_views_data_alter().
+ *
+ * Add extra tokens.
+ */
+function link_field_views_data_views_data_alter(&$data, $field) {
+  $field_name = $field['field_name'];
+  $data_key = 'field_data_' . $field_name;
+
+  // Add special handler to base field
+  $data[$data_key][$field_name]['field']['handler'] = 'LinkfieldHandlerFieldLinkfield';
+}
+
+/**
  * Return CCK Views data for the link_field_settings($op == 'views data').
  *
  * @TODO: Is there some way to tell views I have formatters for it?
diff --git a/views/link_views_handler_field_linkfield.inc b/views/link_views_handler_field_linkfield.inc
new file mode 100644
index 0000000..cdcf7b6
--- /dev/null
+++ b/views/link_views_handler_field_linkfield.inc
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Contains the Link attributes field handler.
+ */
+
+class LinkfieldHandlerFieldLinkfield extends views_handler_field_field {
+
+  /**
+   * Add additional tokens.
+   */
+  function add_self_tokens(&$tokens, $item) {
+    parent::add_self_tokens($tokens, $item);
+    $tokenvalue = '';
+    if (isset($item['raw'])) {
+      // If $item['raw'] is an array then we can use as is, if it's an object
+      // we cast it to an array, if it's neither, we can't use it. Same for
+      // $item['raw']['attributes']
+      $raw = $item['raw'];
+      if (is_object($raw)) $raw=(array)($raw);
+      if (is_array($raw) && isset($raw['attributes'])) {
+        $attributes = $raw['attributes'];
+        if (is_object($attributes)) $attributes=(array)($attributes);
+        if (is_array($attributes) && isset($attributes['target'])) {
+          $target = $attributes['target'];
+          if (is_scalar($target)) {
+            // Use filter_xss_admin because it's user data and we can't be sure
+            // it is safe.
+            $tokenvalue = filter_xss_admin($target);
+          }
+        }
+      }
+    }
+    $tokens['[' . $this->options['id'] . '-target]'] = $tokenvalue;
+  }
+
+  /**
+   * Document any special tokens this field might use for itself.
+   *
+   * @see add_self_tokens() for details.
+   */
+  function document_self_tokens(&$tokens) {
+    parent::document_self_tokens($tokens);
+    $tokens['[' . $this->options['id'] . '-target' . ']'] = t('Link Target.');
+  }
+
+}
