diff --git a/README.txt b/README.txt
index 97de674..54db81c 100644
--- a/README.txt
+++ b/README.txt
@@ -18,6 +18,7 @@ To submit bug reports and feature suggestions, or to track changes:
 * BrowsCap (optional, record user agents)
 * Unfuddle Feedback (optional, Unfuddle ticketing integration)
 * Mollom (optional, spam prevention)
+* Views (optional)
 
 
 -- INSTALLATION --
diff --git a/feedback.info b/feedback.info
index db396bb..514be49 100644
--- a/feedback.info
+++ b/feedback.info
@@ -5,3 +5,4 @@ core = 7.x
 configure = admin/config/user-interface/feedback
 files[] = feedback.controller.inc
 files[] = tests/feedback.test
+files[] = feedback_handler_field_feedback_link.inc
diff --git a/feedback.module b/feedback.module
index 8e47120..bc91bfe 100644
--- a/feedback.module
+++ b/feedback.module
@@ -572,3 +572,10 @@ function feedback_mollom_form_info($form_id) {
     );
   }
 }
+
+/**
+ * Implements hook_views_api();
+ */
+function feedback_views_api() {
+  return array('api' => 3.0);
+}
diff --git a/feedback.views.inc b/feedback.views.inc
new file mode 100644
index 0000000..85583b1
--- /dev/null
+++ b/feedback.views.inc
@@ -0,0 +1,170 @@
+<?php
+
+/**
+ * @file
+ * Provides views integration.
+ */
+
+/**
+ * Implements hook_views_data().
+ */
+function feedback_views_data() {
+  $data['feedback']['table']['group'] = t('Feedback');
+  $data['feedback']['table']['base'] = array(
+    'field' => 'fid',
+    'title' => t('Feedback'),
+    'help' => t('Feedback messages submitted to the site.'),
+  );
+  $data['feedback']['table']['join']['users'] = array(
+    'left_field' => 'uid',
+    'field' => 'uid',
+  );
+  $data['feedback']['fid'] = array(
+    'title' => t('Feedback ID'),
+    'help' => t('The primary identifier for a feedback message.'),
+    'field' => array(
+      'handler' => 'views_handler_field_numeric',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort_numeric',
+    ),
+  );
+  $data['feedback']['view_entry'] = array(
+    'field' => array(
+      'title' => t('Link'),
+      'help' => t('Provide a simple link to the feedback entry.'),
+      'handler' => 'feedback_handler_field_feedback_link',
+    ),
+  );
+  $data['feedback']['uid'] = array(
+    'title' => t('User Id'),
+    'help' => t('The user id of the author of a feedback message.'),
+    'relationship' => array(
+      'base' => 'users',
+      'base field' => 'uid',
+      'handler' => 'views_handler_relationship',
+      'label' => t('User'),
+    ),
+  );
+  $data['feedback']['status'] = array(
+    'title' => t('Status'),
+    'help' => t('The status of a feedback message.'),
+    'field' => array(
+      'handler' => 'views_handler_field_boolean',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_boolean_operator',
+      'label' => t('Feedback status is processed'),
+      'type' => 'yes-no',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_boolean',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['message'] = array(
+    'title' => t('Message'),
+    'help' => t('The actual feedback message.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['location'] = array(
+    'title' => t('Location'),
+    'help' => t('The internal Drupal path of the page the feedback message was submitted on.'),
+    'field' => array(
+      'handler' => 'views_handler_field_url',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['location_masked'] = array(
+    'title' => t('Location Masked'),
+    'help' => t('The masked Drupal path of the page the feedback message was submitted on.'),
+    'field' => array(
+      'handler' => 'views_handler_field_url',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['url'] = array(
+    'title' => t('URL'),
+    'help' => t('The absolute URL of the page the feedback message was submitted on.'),
+    'field' => array(
+      'handler' => 'views_handler_field_url',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['useragent'] = array(
+    'title' => t('User agent'),
+    'help' => t('The user agent of the feedback message author.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['feedback']['timestamp'] = array(
+    'title' => t('Timestamp'),
+    'help' => t('The UNIX timestamp when the feedback message was created.'),
+    'field' => array(
+      'click sortable' => TRUE,
+      'handler' => 'views_handler_field_date',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_date',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_date',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort_date',
+    ),
+  );
+  return $data;
+}
diff --git a/feedback.views_default.inc b/feedback.views_default.inc
new file mode 100644
index 0000000..079d502
--- /dev/null
+++ b/feedback.views_default.inc
@@ -0,0 +1,312 @@
+<?php
+
+/**
+ * @file
+ * Contains default views on behalf of the feedback module.
+ */
+
+/**
+ * Implements hook_views_default_views().
+ */
+function feedback_views_default_views() {
+  $view = new view;
+  $view->name = 'feedback_messages';
+  $view->description = 'Override the default feedback messages report.';
+  $view->tag = 'feedback';
+  $view->base_table = 'feedback';
+  $view->human_name = '';
+  $view->core = 0;
+  $view->api_version = '3.0-alpha1';
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+  /* Display: Defaults */
+  $handler = $view->new_display('default', 'Defaults', 'default');
+  $handler->display->display_options['title'] = 'Feedback Messages';
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'view feedback messages';
+  $handler->display->display_options['cache']['type'] = 'none';
+  $handler->display->display_options['query']['type'] = 'views_query';
+  $handler->display->display_options['exposed_form']['type'] = 'basic';
+  $handler->display->display_options['pager']['type'] = 'full';
+  $handler->display->display_options['pager']['options']['items_per_page'] = 50;
+  $handler->display->display_options['style_plugin'] = 'table';
+  $handler->display->display_options['style_options']['columns'] = array(
+    'location' => 'location',
+    'timestamp' => 'timestamp',
+    'name' => 'name',
+    'message' => 'message',
+    'useragent' => 'message',
+    'view_entry' => 'message',
+    'fid' => 'message',
+  );
+  $handler->display->display_options['style_options']['default'] = '-1';
+  $handler->display->display_options['style_options']['info'] = array(
+    'location' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+    ),
+    'timestamp' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+    ),
+    'name' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+    ),
+    'message' => array(
+      'align' => '',
+      'separator' => '',
+    ),
+    'useragent' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+    ),
+    'view_entry' => array(
+      'align' => '',
+      'separator' => '',
+    ),
+    'fid' => array(
+      'align' => '',
+      'separator' => '',
+    ),
+  );
+  $handler->display->display_options['style_options']['override'] = 1;
+  $handler->display->display_options['style_options']['sticky'] = 0;
+  $handler->display->display_options['style_options']['empty_table'] = 0;
+  /* Header: Global: Text area */
+  $handler->display->display_options['header']['text']['id'] = 'text';
+  $handler->display->display_options['header']['text']['table'] = 'views';
+  $handler->display->display_options['header']['text']['field'] = 'area';
+  $handler->display->display_options['header']['text']['empty'] = FALSE;
+  $handler->display->display_options['header']['text']['content'] = 'Open Feedback Messages';
+  $handler->display->display_options['header']['text']['format'] = 'full_html';
+  /* No results behavior: Global: Text area */
+  $handler->display->display_options['empty']['area']['id'] = 'area';
+  $handler->display->display_options['empty']['area']['table'] = 'views';
+  $handler->display->display_options['empty']['area']['field'] = 'area';
+  $handler->display->display_options['empty']['area']['empty'] = FALSE;
+  $handler->display->display_options['empty']['area']['content'] = 'There are no feedback entries.';
+  /* Relationship: Feedback: User Id */
+  $handler->display->display_options['relationships']['uid']['id'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['table'] = 'feedback';
+  $handler->display->display_options['relationships']['uid']['field'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['required'] = 0;
+  /* Field: Feedback: Location */
+  $handler->display->display_options['fields']['location']['id'] = 'location';
+  $handler->display->display_options['fields']['location']['table'] = 'feedback';
+  $handler->display->display_options['fields']['location']['field'] = 'location';
+  $handler->display->display_options['fields']['location']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['location']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['location']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['location']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['location']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['location']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['location']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['location']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['location']['empty_zero'] = 0;
+  $handler->display->display_options['fields']['location']['display_as_link'] = 1;
+  /* Field: Feedback: Timestamp */
+  $handler->display->display_options['fields']['timestamp']['id'] = 'timestamp';
+  $handler->display->display_options['fields']['timestamp']['table'] = 'feedback';
+  $handler->display->display_options['fields']['timestamp']['field'] = 'timestamp';
+  $handler->display->display_options['fields']['timestamp']['label'] = 'Date';
+  $handler->display->display_options['fields']['timestamp']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['absolute'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['external'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['replace_spaces'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['nl2br'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['timestamp']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['timestamp']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['timestamp']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['timestamp']['element_label_colon'] = 1;
+  $handler->display->display_options['fields']['timestamp']['element_default_classes'] = 1;
+  $handler->display->display_options['fields']['timestamp']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['timestamp']['empty_zero'] = 0;
+  $handler->display->display_options['fields']['timestamp']['date_format'] = 'short';
+  /* Field: User: Name */
+  $handler->display->display_options['fields']['name']['id'] = 'name';
+  $handler->display->display_options['fields']['name']['table'] = 'users';
+  $handler->display->display_options['fields']['name']['field'] = 'name';
+  $handler->display->display_options['fields']['name']['relationship'] = 'uid';
+  $handler->display->display_options['fields']['name']['label'] = 'User';
+  $handler->display->display_options['fields']['name']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['name']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['name']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['name']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['name']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['name']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['name']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['name']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['name']['empty_zero'] = 0;
+  $handler->display->display_options['fields']['name']['link_to_user'] = 1;
+  $handler->display->display_options['fields']['name']['overwrite_anonymous'] = 0;
+  /* Field: Feedback: Message */
+  $handler->display->display_options['fields']['message']['id'] = 'message';
+  $handler->display->display_options['fields']['message']['table'] = 'feedback';
+  $handler->display->display_options['fields']['message']['field'] = 'message';
+  $handler->display->display_options['fields']['message']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['absolute'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['external'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['replace_spaces'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['nl2br'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['message']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['message']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['message']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['message']['element_type'] = 'div';
+  $handler->display->display_options['fields']['message']['element_label_colon'] = 1;
+  $handler->display->display_options['fields']['message']['element_default_classes'] = 1;
+  $handler->display->display_options['fields']['message']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['message']['empty_zero'] = 0;
+  /* Field: Feedback: User agent */
+  $handler->display->display_options['fields']['useragent']['id'] = 'useragent';
+  $handler->display->display_options['fields']['useragent']['table'] = 'feedback';
+  $handler->display->display_options['fields']['useragent']['field'] = 'useragent';
+  $handler->display->display_options['fields']['useragent']['label'] = '';
+  $handler->display->display_options['fields']['useragent']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['absolute'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['external'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['replace_spaces'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['nl2br'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['useragent']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['useragent']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['useragent']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['useragent']['element_type'] = 'div';
+  $handler->display->display_options['fields']['useragent']['element_label_colon'] = 1;
+  $handler->display->display_options['fields']['useragent']['element_default_classes'] = 1;
+  $handler->display->display_options['fields']['useragent']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['useragent']['empty_zero'] = 0;
+  /* Field: Feedback: Link */
+  $handler->display->display_options['fields']['view_entry']['id'] = 'view_entry';
+  $handler->display->display_options['fields']['view_entry']['table'] = 'feedback';
+  $handler->display->display_options['fields']['view_entry']['field'] = 'view_entry';
+  $handler->display->display_options['fields']['view_entry']['label'] = '';
+  $handler->display->display_options['fields']['view_entry']['alter']['alter_text'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['make_link'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['absolute'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['external'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['replace_spaces'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['nl2br'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['view_entry']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['view_entry']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['view_entry']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['view_entry']['element_label_colon'] = 0;
+  $handler->display->display_options['fields']['view_entry']['element_default_classes'] = 1;
+  $handler->display->display_options['fields']['view_entry']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['view_entry']['empty_zero'] = 0;
+  /* Field: Feedback: Delete link */
+  $handler->display->display_options['fields']['fid']['id'] = 'fid';
+  $handler->display->display_options['fields']['fid']['table'] = 'feedback';
+  $handler->display->display_options['fields']['fid']['field'] = 'fid';
+  $handler->display->display_options['fields']['fid']['ui_name'] = 'Feedback: Delete link';
+  $handler->display->display_options['fields']['fid']['label'] = '';
+  $handler->display->display_options['fields']['fid']['alter']['alter_text'] = 1;
+  $handler->display->display_options['fields']['fid']['alter']['text'] = ' delete';
+  $handler->display->display_options['fields']['fid']['alter']['make_link'] = 1;
+  $handler->display->display_options['fields']['fid']['alter']['path'] = 'admin/reports/feedback/[fid]/delete';
+  $handler->display->display_options['fields']['fid']['alter']['absolute'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['external'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['replace_spaces'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['trim'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['nl2br'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['word_boundary'] = 1;
+  $handler->display->display_options['fields']['fid']['alter']['ellipsis'] = 1;
+  $handler->display->display_options['fields']['fid']['alter']['strip_tags'] = 0;
+  $handler->display->display_options['fields']['fid']['alter']['html'] = 0;
+  $handler->display->display_options['fields']['fid']['element_label_colon'] = 0;
+  $handler->display->display_options['fields']['fid']['element_wrapper_type'] = 'span';
+  $handler->display->display_options['fields']['fid']['element_default_classes'] = 1;
+  $handler->display->display_options['fields']['fid']['hide_empty'] = 0;
+  $handler->display->display_options['fields']['fid']['empty_zero'] = 0;
+  $handler->display->display_options['fields']['fid']['separator'] = '';
+  $handler->display->display_options['fields']['fid']['format_plural'] = 0;
+  /* Sort criterion: Feedback: Timestamp */
+  $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp';
+  $handler->display->display_options['sorts']['timestamp']['table'] = 'feedback';
+  $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp';
+  /* Filter criterion: Feedback: Status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'feedback';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['value'] = '0';
+  $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
+
+  /* Display: Page */
+  $handler = $view->new_display('page', 'Page', 'page_1');
+  $handler->display->display_options['path'] = 'admin/reports/feedback';
+  $handler->display->display_options['menu']['type'] = 'normal';
+  $handler->display->display_options['menu']['title'] = 'Feedback messages';
+  $handler->display->display_options['menu']['description'] = 'View feedback messages.';
+  $handler->display->display_options['menu']['weight'] = '0';
+  $handler->display->display_options['menu']['name'] = 'management';
+
+  /* Display: Attachment */
+  $handler = $view->new_display('attachment', 'Attachment', 'attachment_1');
+  $handler->display->display_options['defaults']['title'] = FALSE;
+  $handler->display->display_options['pager']['type'] = 'some';
+  $handler->display->display_options['defaults']['header'] = FALSE;
+  /* Header: Global: Text area */
+  $handler->display->display_options['header']['text']['id'] = 'area';
+  $handler->display->display_options['header']['text']['table'] = 'views';
+  $handler->display->display_options['header']['text']['field'] = 'area';
+  $handler->display->display_options['header']['text']['empty'] = FALSE;
+  $handler->display->display_options['header']['text']['content'] = 'Processed Feedback Messages';
+  $handler->display->display_options['defaults']['filters'] = FALSE;
+  /* Filter criterion: Feedback: Status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'feedback';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['value'] = '1';
+  $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
+  $handler->display->display_options['displays'] = array(
+    'page_1' => 'page_1',
+    'default' => 0,
+  );
+  $handler->display->display_options['attachment_position'] = 'after';
+  $handler->display->display_options['render_pager'] = TRUE;
+  $translatables['feedback_messages'] = array(
+    t('Defaults'),
+    t('Feedback Messages'),
+    t('more'),
+    t('Apply'),
+    t('Reset'),
+    t('Sort by'),
+    t('Asc'),
+    t('Desc'),
+    t('Items per page'),
+    t('- All -'),
+    t('Offset'),
+    t('Open Feedback Messages'),
+    t('There are no feedback entries.'),
+    t('User'),
+    t('Location'),
+    t('Date'),
+    t('Message'),
+    t(' delete'),
+    t('admin/reports/feedback/[fid]/delete'),
+    t('.'),
+    t('Page'),
+    t('Attachment'),
+    t('Processed Feedback Messages'),
+  );
+  $views[$view->name] = $view;
+  return $views;
+}
diff --git a/feedback_handler_field_feedback_link.inc b/feedback_handler_field_feedback_link.inc
new file mode 100644
index 0000000..bd8e685
--- /dev/null
+++ b/feedback_handler_field_feedback_link.inc
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Field handler to present a link to a feedback entry.
+ */
+class feedback_handler_field_feedback_link extends views_handler_field {
+  function construct() {
+    parent::construct();
+    $this->additional_fields['fid'] = 'fid';
+  }
+
+  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);
+  }
+
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  function render($values) {
+    $value = $this->get_value($values, 'fid');
+    return $this->render_link($this->sanitize_value($value), $values);
+  }
+
+  function render_link($data, $values) {
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = "admin/reports/feedback/$data";
+    $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
+    return $text;
+  }
+}
