diff --git a/entity.info b/entity.info
index 0cae8cb..6061e56 100644
--- a/entity.info
+++ b/entity.info
@@ -17,6 +17,7 @@ files[] = views/handlers/entity_views_handler_field_boolean.inc
 files[] = views/handlers/entity_views_handler_field_date.inc
 files[] = views/handlers/entity_views_handler_field_duration.inc
 files[] = views/handlers/entity_views_handler_field_entity.inc
+files[] = views/handlers/entity_views_handler_field_entity_link.inc
 files[] = views/handlers/entity_views_handler_field_field.inc
 files[] = views/handlers/entity_views_handler_field_numeric.inc
 files[] = views/handlers/entity_views_handler_field_options.inc
diff --git a/views/entity.views.inc b/views/entity.views.inc
index 56b606b..b546992 100644
--- a/views/entity.views.inc
+++ b/views/entity.views.inc
@@ -384,6 +384,14 @@ class EntityDefaultViewsController {
       $data[$table]['table']['entity type'] = $this->type;
       $data[$table] += $this->schema_fields();
 
+      $data[$table]['link'] = array(
+        'title' => t('Link'),
+        'help' => t('A simple link to the entity'),
+        'field' => array(
+          'handler' => 'entity_views_handler_field_entity_link',
+        ),
+      );
+
       // Add in any reverse-relationships which have been determined.
       $data += $this->relationships;
     }
diff --git a/views/handlers/entity_views_handler_field_entity_link.inc b/views/handlers/entity_views_handler_field_entity_link.inc
new file mode 100644
index 0000000..b7996f5
--- /dev/null
+++ b/views/handlers/entity_views_handler_field_entity_link.inc
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Field handler to present a link to the node.
+ *
+ * @ingroup views_field_handlers
+ */
+class entity_views_handler_field_entity_link extends views_handler_field_entity {
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['text'] = array('default' => '', 'translatable' => TRUE);
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    $form['text'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Text to display'),
+      '#default_value' => $this->options['text'],
+    );
+    parent::options_form($form, $form_state);
+
+    // The path is set by render_link function so don't allow to set it.
+    $form['alter']['path'] = array('#access' => FALSE);
+    $form['alter']['external'] = array('#access' => FALSE);
+  }
+
+  function pre_render(&$values) {
+    $this->entity_info = entity_get_info($this->entity_type);
+
+    parent::pre_render($values);
+  }
+
+  function render($values) {
+    if ($entity = $this->get_value($values)) {
+      return $this->render_link($entity, $values);
+    }
+  }
+
+  /**
+   * Render whatever the data is as a link to the node.
+   *
+   * Data should be made XSS safe prior to calling this function.
+   */
+  function render_link($entity, $values) {
+    if (entity_access('view', $this->entity_type, $entity)) {
+      $this->options['alter']['make_link'] = TRUE;
+      $uri = entity_uri($this->entity_type, $entity);
+      $this->options['alter']['path'] = $uri['path'];
+      $this->options['alter']['options'] = $uri['options'];
+      $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
+      return $text;
+    }
+  }
+}
