diff --git a/userpoints.info b/userpoints.info
index 9a9331c..170bec1 100644
--- a/userpoints.info
+++ b/userpoints.info
@@ -7,5 +7,6 @@ files[]=userpoints.test
 files[]=views/userpoints_views_handler_field_category.inc
 files[]=views/userpoints_views_handler_filter_category.inc
 files[]=views/userpoints_views_handler_argument_category.inc
+files[]=views/userpoints_views_handler_field_transaction_link.inc
 configure = admin/config/people/userpoints/settings
 dependencies[]=entity
diff --git a/userpoints.module b/userpoints.module
index 61f8934..5b69e08 100644
--- a/userpoints.module
+++ b/userpoints.module
@@ -1437,7 +1396,7 @@ function userpoints_entity_info() {
       'entity class' => 'UserpointsTransaction',
       'controller class' => 'UserpointsTransactionController',
       'metadata controller class' => 'UserpointsTransactionMetadataController',
-      'views controller class' => 'EntityDefaultViewsController',
+      'views controller class' => 'UserpointsTransactionViewsController',
       'base table' => 'userpoints_txn',
       'uri callback' => 'entity_class_uri',
       'fieldable' => TRUE,
diff --git a/userpoints.transaction.inc b/userpoints.transaction.inc
index 14da670..fd3aebb 100644
--- a/userpoints.transaction.inc
+++ b/userpoints.transaction.inc
@@ -1433,3 +1431,41 @@ class UserpointsTransactionMetadataController extends EntityDefaultMetadataContr
     return $info;
   }
 }
+
+class UserpointsTransactionViewsController extends EntityDefaultViewsController {
+
+  public function views_data() {
+    $data = parent::views_data();
+
+    $data['userpoints_txn']['uid']['relationship'] = array(
+      'title' => t('User'),
+      'help' => t('Relate the userpoints transaction to the user.'),
+      'handler' => 'views_handler_relationship',
+      'base' => 'users',
+      'field' => 'uid',
+      'label' => t('User'),
+    );
+
+    // Expose links to operate on a userpoints transaction.
+    $data['userpoints_txn']['view_transaction'] = array(
+      'field' => array(
+        'title' => t('Link'),
+        'help' => t('Provide a simple link to the administrator view of the transaction.'),
+        'handler' => 'userpoints_views_handler_field_transaction_link',
+        'operation' => 'view',
+      ),
+    );
+  
+    $data['userpoints_txn']['edit_transaction'] = array(
+      'field' => array(
+        'title' => t('Edit link'),
+        'help' => t('Provide a simple link to edit the transaction.'),
+        'handler' => 'userpoints_views_handler_field_transaction_link',
+        'operation' => 'edit',
+      ),
+    );
+
+    return $data;
+  }
+
+}
diff --git a/userpoints.views_default.inc b/userpoints.views_default.inc
new file mode 100644
index 0000000..c96d7f4
--- /dev/null
+++ b/userpoints.views_default.inc
@@ -0,0 +1,266 @@
+<?php
+/**
+ * @file
+ *  Default views for Userpoints
+ */
+    
+    
+/**
+ * Implements hook_views_default_views().
+ */
+function userpoints_views_default_views() {
+  $views = array();
+  
+  $view = new view();
+  $view->name = 'userpoints_transactions';
+  $view->description = 'Default views for userpoints';
+  $view->tag = 'default';
+  $view->base_table = 'userpoints_txn';
+  $view->human_name = 'Userpoints Transactions';
+  $view->core = 7;
+  $view->api_version = '3.0';
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+  
+  /* Display: Master */
+  $handler = $view->new_display('default', 'Master', 'default');
+  $handler->display->display_options['use_more_always'] = FALSE;
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'view userpoints transactions';
+  $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'] = '25';
+  $handler->display->display_options['pager']['options']['offset'] = '0';
+  $handler->display->display_options['pager']['options']['id'] = '0';
+  $handler->display->display_options['pager']['options']['quantity'] = '9';
+  $handler->display->display_options['style_plugin'] = 'table';
+  $handler->display->display_options['style_options']['columns'] = array(
+    'name' => 'name',
+    'points' => 'points',
+    'time_stamp' => 'time_stamp',
+    'description' => 'description',
+    'status' => 'status',
+  );
+  $handler->display->display_options['style_options']['default'] = 'time_stamp';
+  $handler->display->display_options['style_options']['info'] = array(
+    'name' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'points' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => 'views-align-right',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'time_stamp' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'desc',
+      'align' => 'views-align-right',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'description' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'status' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+  );
+  $handler->display->display_options['style_options']['sticky'] = TRUE;
+  /* Relationship: Userpoints Transaction: User */
+  $handler->display->display_options['relationships']['uid']['id'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['table'] = 'userpoints_txn';
+  $handler->display->display_options['relationships']['uid']['field'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['required'] = TRUE;
+  /* 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 name';
+  /* Field: Userpoints Transaction: Points */
+  $handler->display->display_options['fields']['points']['id'] = 'points';
+  $handler->display->display_options['fields']['points']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['points']['field'] = 'points';
+  $handler->display->display_options['fields']['points']['group_type'] = 'sum';
+  /* Filter criterion: Userpoints Transaction: Status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'userpoints_txn';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['value'] = array(
+    0 => '0',
+  );
+  
+  /* Display: Transactions */
+  $handler = $view->new_display('page', 'Transactions', 'page_1');
+  $handler->display->display_options['display_description'] = 'Overview of transactions';
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['fields'] = FALSE;
+  /* 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 name';
+  /* Field: Userpoints Transaction: Points */
+  $handler->display->display_options['fields']['points']['id'] = 'points';
+  $handler->display->display_options['fields']['points']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['points']['field'] = 'points';
+  /* Field: Userpoints Transaction: Timestamp */
+  $handler->display->display_options['fields']['time_stamp']['id'] = 'time_stamp';
+  $handler->display->display_options['fields']['time_stamp']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['time_stamp']['field'] = 'time_stamp';
+  $handler->display->display_options['fields']['time_stamp']['label'] = 'Date';
+  $handler->display->display_options['fields']['time_stamp']['date_format'] = 'long';
+  /* Field: Userpoints Transaction: Description */
+  $handler->display->display_options['fields']['description']['id'] = 'description';
+  $handler->display->display_options['fields']['description']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['description']['field'] = 'description';
+  $handler->display->display_options['fields']['description']['label'] = 'Reason';
+  /* Field: Userpoints Transaction: Status */
+  $handler->display->display_options['fields']['status']['id'] = 'status';
+  $handler->display->display_options['fields']['status']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['status']['field'] = 'status';
+  /* Field: Userpoints Transaction: Link */
+  $handler->display->display_options['fields']['view_transaction']['id'] = 'view_transaction';
+  $handler->display->display_options['fields']['view_transaction']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['view_transaction']['field'] = 'view_transaction';
+  $handler->display->display_options['fields']['view_transaction']['label'] = '';
+  $handler->display->display_options['fields']['view_transaction']['element_label_colon'] = FALSE;
+  /* Field: Userpoints Transaction: Edit link */
+  $handler->display->display_options['fields']['edit_transaction']['id'] = 'edit_transaction';
+  $handler->display->display_options['fields']['edit_transaction']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['edit_transaction']['field'] = 'edit_transaction';
+  $handler->display->display_options['fields']['edit_transaction']['label'] = '';
+  $handler->display->display_options['fields']['edit_transaction']['element_label_colon'] = FALSE;
+  $handler->display->display_options['defaults']['filter_groups'] = FALSE;
+  $handler->display->display_options['defaults']['filters'] = FALSE;
+  /* Filter criterion: Userpoints Transaction: Status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'userpoints_txn';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['status']['expose']['operator_id'] = 'status_op';
+  $handler->display->display_options['filters']['status']['expose']['label'] = 'Status';
+  $handler->display->display_options['filters']['status']['expose']['operator'] = 'status_op';
+  $handler->display->display_options['filters']['status']['expose']['identifier'] = 'status';
+  $handler->display->display_options['filters']['status']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+  );
+  $handler->display->display_options['path'] = 'admin/config/people/userpoints/transaction';
+  $handler->display->display_options['menu']['type'] = 'tab';
+  $handler->display->display_options['menu']['title'] = 'Transactions';
+  $handler->display->display_options['menu']['weight'] = '0';
+  $handler->display->display_options['menu']['context'] = 0;
+  
+  /* Display: Totals */
+  $handler = $view->new_display('page', 'Totals', 'page_2');
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['group_by'] = FALSE;
+  $handler->display->display_options['group_by'] = TRUE;
+  $handler->display->display_options['path'] = 'admin/config/people/userpoints/list';
+  $handler->display->display_options['menu']['type'] = 'default tab';
+  $handler->display->display_options['menu']['title'] = 'Totals';
+  $handler->display->display_options['menu']['weight'] = '-1';
+  $handler->display->display_options['menu']['context'] = 0;
+  $handler->display->display_options['tab_options']['weight'] = '0';
+  
+  /* Display: Moderation */
+  $handler = $view->new_display('page', 'Moderation', 'page_3');
+  $handler->display->display_options['display_description'] = 'Moderate transactions';
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['access'] = FALSE;
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'moderate userpoints';
+  $handler->display->display_options['defaults']['fields'] = FALSE;
+  /* 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 name';
+  /* Field: Userpoints Transaction: Points */
+  $handler->display->display_options['fields']['points']['id'] = 'points';
+  $handler->display->display_options['fields']['points']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['points']['field'] = 'points';
+  /* Field: Userpoints Transaction: Timestamp */
+  $handler->display->display_options['fields']['time_stamp']['id'] = 'time_stamp';
+  $handler->display->display_options['fields']['time_stamp']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['time_stamp']['field'] = 'time_stamp';
+  $handler->display->display_options['fields']['time_stamp']['label'] = 'Date';
+  $handler->display->display_options['fields']['time_stamp']['date_format'] = 'long';
+  /* Field: Userpoints Transaction: Description */
+  $handler->display->display_options['fields']['description']['id'] = 'description';
+  $handler->display->display_options['fields']['description']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['description']['field'] = 'description';
+  $handler->display->display_options['fields']['description']['label'] = 'Reason';
+  /* Field: Userpoints Transaction: Status */
+  $handler->display->display_options['fields']['status']['id'] = 'status';
+  $handler->display->display_options['fields']['status']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['status']['field'] = 'status';
+  /* Field: Userpoints Transaction: Link */
+  $handler->display->display_options['fields']['view_transaction']['id'] = 'view_transaction';
+  $handler->display->display_options['fields']['view_transaction']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['view_transaction']['field'] = 'view_transaction';
+  $handler->display->display_options['fields']['view_transaction']['label'] = '';
+  $handler->display->display_options['fields']['view_transaction']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['view_transaction']['menu_router_path'] = 'admin';
+  /* Field: Userpoints Transaction: Edit link */
+  $handler->display->display_options['fields']['edit_transaction']['id'] = 'edit_transaction';
+  $handler->display->display_options['fields']['edit_transaction']['table'] = 'userpoints_txn';
+  $handler->display->display_options['fields']['edit_transaction']['field'] = 'edit_transaction';
+  $handler->display->display_options['fields']['edit_transaction']['label'] = '';
+  $handler->display->display_options['fields']['edit_transaction']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['edit_transaction']['menu_router_path'] = 'admin';
+  $handler->display->display_options['defaults']['filter_groups'] = FALSE;
+  $handler->display->display_options['defaults']['filters'] = FALSE;
+  /* Filter criterion: Userpoints Transaction: Status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'userpoints_txn';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['status']['expose']['operator_id'] = 'status_op';
+  $handler->display->display_options['filters']['status']['expose']['label'] = 'Status';
+  $handler->display->display_options['filters']['status']['expose']['operator'] = 'status_op';
+  $handler->display->display_options['filters']['status']['expose']['identifier'] = 'status';
+  $handler->display->display_options['filters']['status']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+  );
+  $handler->display->display_options['path'] = 'admin/config/people/userpoints/moderate';
+  $handler->display->display_options['menu']['type'] = 'tab';
+  $handler->display->display_options['menu']['title'] = 'Moderation';
+  $handler->display->display_options['menu']['weight'] = '4';
+  $handler->display->display_options['menu']['context'] = 0;
+  
+  /* Display: Points */
+  $handler = $view->new_display('page', 'Points', 'page_4');
+  $handler->display->display_options['display_description'] = 'Public display of points';
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['group_by'] = FALSE;
+  $handler->display->display_options['group_by'] = TRUE;
+  $handler->display->display_options['path'] = 'userpoints';
+  $handler->display->display_options['menu']['type'] = 'normal';
+  $handler->display->display_options['menu']['title'] = 'Users by points';
+  $handler->display->display_options['menu']['weight'] = '-1';
+  $handler->display->display_options['menu']['context'] = 0;
+  $handler->display->display_options['tab_options']['weight'] = '0';
+  
+  $views['userpoints_transactions'] = $view;
+  
+}
diff --git a/views/userpoints_views_handler_field_transaction_link.inc b/views/userpoints_views_handler_field_transaction_link.inc
new file mode 100644
index 0000000..9caa658
--- /dev/null
+++ b/views/userpoints_views_handler_field_transaction_link.inc
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @file
+ *   Views handler for operation links.
+ */
+
+
+/**
+ * Field handler to present a link to a transaction.
+ */
+class userpoints_views_handler_field_transaction_link extends views_handler_field {
+  function construct() {
+    parent::construct();
+
+    $this->additional_fields['txn_id'] = 'txn_id';
+  }
+
+  /**
+   * Implements views_handler_field::admin_summary().
+   */
+  function admin_summary() {
+    return t('Link: @op', array('@op' => ucwords($this->definition['operation'])));
+  }
+
+  /**
+   * Implements views_handler_field::option_definition().
+   */
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['menu_router_path'] = array('default' => 'myuserpoints', 'translatable' => FALSE);
+    $options['text'] = array('default' => '', 'translatable' => TRUE);
+
+    return $options;
+  }
+
+  /**
+   * Implements views_handler_field::options_form().
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['menu_router_path'] = array(
+      '#type' => 'select',
+      '#title' => t('Menu router path'),
+      '#description' => t('Select the menu router path to use for the link.'),
+      '#options' => $this->menu_router_options(),
+      '#default_value' => $this->options['menu_router_path'],
+    );
+
+    $form['text'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Text to display'),
+      '#default_value' => $this->options['text'],
+    );
+  }
+
+  /**
+   * Implements views_handler_field::query().
+   */
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  /**
+   * Implements views_handler_field::render().
+   */
+  function render($values) {
+    $txn_id = $this->get_value($values, 'txn_id');
+    $op = $this->definition['operation'];
+    $link_options = array(
+      'query' => drupal_get_destination(),
+    );
+    $path = $this->menu_router_path($this->options['menu_router_path']);
+    $path .= '/' . $txn_id;
+
+    switch ($op) {
+      case 'edit':
+        $path .= '/edit';
+        $text = !empty($this->options['text']) ? $this->options['text'] : t('edit');
+        break;
+      default:
+        $path .= '/view';
+        $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
+        break;
+    }
+
+    return l($text, $path, array('query' => drupal_get_destination()));
+  }
+
+  /**
+   * Return menu router path.
+   * @param $option
+   *   An option as defined in menu_router_options().
+   */
+  protected function menu_router_path($option) {
+    switch ($option) {
+      case 'myuserpoints':
+        return 'myuserpoints/transaction';
+      case 'admin':
+        return 'admin/config/peope/userpoints/transaction';
+    }
+  }
+
+  /**
+   * Return an array of options for the select list.
+   */
+  protected function menu_router_options() {
+    return array(
+      'myuserpoints' => t('My Userpoints'),
+      'admin' => t('Administration'),
+    );
+  }
+}
