diff --git feedback.module feedback.module
index 65c2acd..8525e37 100644
--- feedback.module
+++ feedback.module
@@ -399,3 +399,9 @@ function feedback_user_delete($account) {
   feedback_delete_multiple($fids);
 }
 
+/**
+ * Implements hook_views_api();
+ */
+function feedback_views_api() {
+  return array('api' => 2.0);
+}
diff --git feedback.views.inc feedback.views.inc
new file mode 100644
index 0000000..dab2383
--- /dev/null
+++ feedback.views.inc
@@ -0,0 +1,163 @@
+<?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']['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 feedback.views_default.inc feedback.views_default.inc
new file mode 100644
index 0000000..2910ed8
--- /dev/null
+++ feedback.views_default.inc
@@ -0,0 +1,285 @@
+<?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->view_php = '';
+  $view->base_table = 'feedback';
+  $view->is_cacheable = FALSE;
+  $view->api_version = 2;
+  $view->disabled = TRUE; /* Edit this to true to make a default view disabled initially */
+  $handler = $view->new_display('default', 'Defaults', 'default');
+  $handler->override_option('relationships', array(
+    'uid' => array(
+      'label' => 'User',
+      'required' => 0,
+      'id' => 'uid',
+      'table' => 'feedback',
+      'field' => 'uid',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('fields', array(
+    'location' => array(
+      'label' => 'Location',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'display_as_link' => 1,
+      'exclude' => 0,
+      'id' => 'location',
+      'table' => 'feedback',
+      'field' => 'location',
+      'relationship' => 'none',
+    ),
+    'timestamp' => array(
+      'label' => 'Date',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'date_format' => 'small',
+      'custom_date_format' => '',
+      'exclude' => 0,
+      'id' => 'timestamp',
+      'table' => 'feedback',
+      'field' => 'timestamp',
+      'relationship' => 'none',
+    ),
+    'name' => array(
+      'label' => 'User',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'link_to_user' => 1,
+      'overwrite_anonymous' => 0,
+      'anonymous_text' => '',
+      'exclude' => 0,
+      'id' => 'name',
+      'table' => 'users',
+      'field' => 'name',
+      'relationship' => 'uid',
+    ),
+    'message' => array(
+      'id' => 'message',
+      'table' => 'feedback',
+      'field' => 'message',
+    ),
+    'useragent' => array(
+      'label' => '',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'useragent',
+      'table' => 'feedback',
+      'field' => 'useragent',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('sorts', array(
+    'timestamp' => array(
+      'order' => 'ASC',
+      'granularity' => 'second',
+      'id' => 'timestamp',
+      'table' => 'feedback',
+      'field' => 'timestamp',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('filters', array(
+    'status' => array(
+      'operator' => '=',
+      'value' => '0',
+      'group' => '0',
+      'exposed' => FALSE,
+      'expose' => array(
+        'operator' => FALSE,
+        'label' => '',
+      ),
+      'id' => 'status',
+      'table' => 'feedback',
+      'field' => 'status',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('access', array(
+    'type' => 'perm',
+    'perm' => 'view feedback messages',
+  ));
+  $handler->override_option('cache', array(
+    'type' => 'none',
+  ));
+  $handler->override_option('title', 'Feedback Messages');
+  $handler->override_option('header', 'Open feedback messages');
+  $handler->override_option('header_format', '1');
+  $handler->override_option('header_empty', 0);
+  $handler->override_option('items_per_page', 50);
+  $handler->override_option('use_pager', '1');
+  $handler->override_option('style_plugin', 'table');
+  $handler->override_option('style_options', array(
+    'grouping' => '',
+    'override' => 1,
+    'sticky' => 0,
+    'order' => 'asc',
+    'columns' => array(
+      'location' => 'location',
+      'timestamp' => 'timestamp',
+      'name' => 'name',
+      'message' => 'message',
+      'useragent' => 'message',
+    ),
+    'info' => array(
+      'location' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'timestamp' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'name' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'message' => array(
+        'separator' => '<br />',
+      ),
+      'useragent' => array(
+        'sortable' => 0,
+        'separator' => '',
+      ),
+    ),
+    'default' => '-1',
+  ));
+  $handler = $view->new_display('page', 'Page', 'page_1');
+  $handler->override_option('path', 'admin/reports/feedback');
+  $handler->override_option('menu', array(
+    'type' => 'normal',
+    'title' => 'Feedback messages',
+    'description' => '',
+    'weight' => '0',
+    'name' => 'navigation',
+  ));
+  $handler->override_option('tab_options', array(
+    'type' => 'none',
+    'title' => '',
+    'description' => '',
+    'weight' => 0,
+    'name' => 'navigation',
+  ));
+  $handler = $view->new_display('attachment', 'Attachment', 'attachment_1');
+  $handler->override_option('filters', array(
+    'status' => array(
+      'operator' => '=',
+      'value' => '1',
+      'group' => '0',
+      'exposed' => FALSE,
+      'expose' => array(
+        'operator' => FALSE,
+        'label' => '',
+      ),
+      'id' => 'status',
+      'table' => 'feedback',
+      'field' => 'status',
+      'relationship' => 'none',
+      'override' => array(
+        'button' => 'Use default',
+      ),
+    ),
+  ));
+  $handler->override_option('title', '');
+  $handler->override_option('header', 'Processed Feedback Messages');
+  $handler->override_option('attachment_position', 'after');
+  $handler->override_option('inherit_arguments', TRUE);
+  $handler->override_option('inherit_exposed_filters', FALSE);
+  $handler->override_option('inherit_pager', FALSE);
+  $handler->override_option('render_pager', TRUE);
+  $handler->override_option('displays', array(
+    'page_1' => 'page_1',
+    'default' => 0,
+  ));
+  $views[$view->name] = $view;
+  return $views;
+}
