diff --git a/tests/userpoints.filled.database.all.php.gz b/tests/userpoints.filled.database.all.php.gz
new file mode 100644
index 0000000000000000000000000000000000000000..dc54f63372cc124c487c98ed821c190ab08b88a0
GIT binary patch
literal 49308
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
YkG|Irr;Zz4DSUr>Wp)!I%R>VFFG%N#Qvd(}

literal 0
HcmV?d00001

diff --git a/tests/userpoints.filled.database.php b/tests/userpoints.filled.database.php
new file mode 100644
index 0000000..6a0c027
--- /dev/null
+++ b/tests/userpoints.filled.database.php
@@ -0,0 +1,445 @@
+<?php
+
+/**
+ * @file
+ * Filled installation of Drupal 7.0, for test purposes.
+ *
+ * This file was generated by the dump-database-d7.sh tool, from an
+ * installation of Drupal 7, filled with data using the generate-d7-content.sh
+ * tool. It has the following modules installed:
+ *  - userpoints
+ */
+
+db_create_table('userpoints', array(
+  'fields' => array(
+    'pid' => array(
+      'type' => 'serial',
+      'not null' => TRUE,
+    ),
+    'uid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'points' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'max_points' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'last_update' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'tid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+  ),
+  'primary key' => array(
+    'pid',
+  ),
+  'indexes' => array(
+    'last_update' => array(
+      'last_update',
+    ),
+    'points' => array(
+      'points',
+    ),
+  ),
+  'unique keys' => array(
+    'uid_tid' => array(
+      'uid',
+      'tid',
+    ),
+  ),
+  'module' => 'userpoints',
+  'name' => 'userpoints',
+));
+db_insert('userpoints')->fields(array(
+  'pid',
+  'uid',
+  'points',
+  'max_points',
+  'last_update',
+  'tid',
+))
+->values(array(
+  'pid' => '1',
+  'uid' => '1',
+  'points' => '4',
+  'max_points' => '5',
+  'last_update' => '1361395354',
+  'tid' => '0',
+))
+->values(array(
+  'pid' => '2',
+  'uid' => '1',
+  'points' => '-1',
+  'max_points' => '8',
+  'last_update' => '1361395411',
+  'tid' => '2',
+))
+->values(array(
+  'pid' => '3',
+  'uid' => '1',
+  'points' => '7',
+  'max_points' => '7',
+  'last_update' => '1361395402',
+  'tid' => '1',
+))
+->execute();
+
+db_create_table('userpoints_total', array(
+  'fields' => array(
+    'uid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+    ),
+    'points' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'max_points' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'last_update' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+  ),
+  'primary key' => array(
+    'uid',
+  ),
+  'indexes' => array(
+    'last_update' => array(
+      'last_update',
+    ),
+    'points' => array(
+      'points',
+    ),
+  ),
+  'module' => 'userpoints',
+  'name' => 'userpoints_total',
+));
+db_insert('userpoints_total')->fields(array(
+  'uid',
+  'points',
+  'max_points',
+  'last_update',
+))
+->values(array(
+  'uid' => '1',
+  'points' => '10',
+  'max_points' => '19',
+  'last_update' => '1361395411',
+))
+->execute();
+
+db_create_table('userpoints_txn', array(
+  'fields' => array(
+    'txn_id' => array(
+      'type' => 'serial',
+      'not null' => TRUE,
+    ),
+    'uid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'approver_uid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'points' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'time_stamp' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'changed' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'status' => array(
+      'type' => 'int',
+      'size' => 'tiny',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'description' => array(
+      'type' => 'text',
+    ),
+    'reference' => array(
+      'type' => 'varchar',
+      'length' => 128,
+    ),
+    'expirydate' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'expired' => array(
+      'type' => 'int',
+      'size' => 'tiny',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'parent_txn_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'tid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'entity_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    ),
+    'entity_type' => array(
+      'type' => 'varchar',
+      'length' => 128,
+    ),
+    'operation' => array(
+      'type' => 'varchar',
+      'length' => 48,
+    ),
+  ),
+  'primary key' => array(
+    'txn_id',
+  ),
+  'indexes' => array(
+    'operation' => array(
+      'operation',
+    ),
+    'reference' => array(
+      'reference',
+    ),
+    'status_expired_expiry' => array(
+      'status',
+      'expired',
+      'expirydate',
+    ),
+    'changed' => array(
+      'changed',
+    ),
+    'uid' => array(
+      'uid',
+    ),
+    'approver_uid' => array(
+      'approver_uid',
+    ),
+    'points' => array(
+      'points',
+    ),
+  ),
+  'module' => 'userpoints',
+  'name' => 'userpoints_txn',
+));
+db_insert('userpoints_txn')->fields(array(
+  'txn_id',
+  'uid',
+  'approver_uid',
+  'points',
+  'time_stamp',
+  'changed',
+  'status',
+  'description',
+  'reference',
+  'expirydate',
+  'expired',
+  'parent_txn_id',
+  'tid',
+  'entity_id',
+  'entity_type',
+  'operation',
+))
+->values(array(
+  'txn_id' => '1',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '5',
+  'time_stamp' => '1361395345',
+  'changed' => '1361395345',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '0',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '2',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '-1',
+  'time_stamp' => '1361395354',
+  'changed' => '1361395354',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '0',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '3',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '-3',
+  'time_stamp' => '1361395364',
+  'changed' => '1361395364',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '2',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '4',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '1',
+  'time_stamp' => '1361395371',
+  'changed' => '1361395371',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '2',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '5',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '5',
+  'time_stamp' => '1361395380',
+  'changed' => '1361395380',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '1',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '6',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '10',
+  'time_stamp' => '1361395390',
+  'changed' => '1361395390',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '2',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '7',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '2',
+  'time_stamp' => '1361395402',
+  'changed' => '1361395402',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '1',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->values(array(
+  'txn_id' => '8',
+  'uid' => '1',
+  'approver_uid' => '1',
+  'points' => '-9',
+  'time_stamp' => '1361395411',
+  'changed' => '1361395411',
+  'status' => '0',
+  'description' => '',
+  'reference' => '',
+  'expirydate' => '0',
+  'expired' => '0',
+  'parent_txn_id' => '0',
+  'tid' => '2',
+  'entity_id' => '0',
+  'entity_type' => NULL,
+  'operation' => 'admin',
+))
+->execute();
+db_insert('system')->fields(array(
+  'name', 'filename', 'type', 'owner', 'bootstrap', 'weight', 'schema_version', 'status',
+))
+->values(array(
+  'name' => 'userpoints',
+  'filename' => drupal_get_path('module', 'userpoints') . '/userpoints.module',
+  'type' => 'module',
+  'owner' => '',
+  'bootstrap' => 0,
+  'weight' => 0,
+  'schema_version' => '7199',
+  'status' => 1,
+))
+->values(array(
+  'name' => 'entity',
+  'filename' => drupal_get_path('module', 'entity') . '/entity.module',
+  'type' => 'module',
+  'owner' => '',
+  'bootstrap' => 0,
+  'weight' => 0,
+  'schema_version' => '7002',
+  'status' => 1,
+))
+->execute();
diff --git a/userpoints.admin.inc b/userpoints.admin.inc
index 38fd598..36f6222 100644
--- a/userpoints.admin.inc
+++ b/userpoints.admin.inc
@@ -17,6 +17,13 @@ function userpoints_confirm_approve_submit($form, &$form_state) {
 
 /**
  * Form builder for add/edit userpoints transaction form.
+ *
+ * @param $form
+ * @param &$form_state
+ * @param $mode
+ *   The operation performed: edit or add.
+ * @param $txn
+ *   Either the transaction entity, user entity, or null.
  */
 function userpoints_admin_txn($form, &$form_state, $mode, $txn = NULL) {
 
@@ -31,11 +38,54 @@ function userpoints_admin_txn($form, &$form_state, $mode, $txn = NULL) {
   }
   elseif ($mode == 'add') {
     drupal_set_title(t('Add !points', userpoints_translation()));
-    if ($txn) {
+    if (isset($txn)) {
+      // Load a user account to use for the transaction user.
       $txn_user = user_load($txn);
     }
-    $txn = new UserpointsTransaction();
+    
+    if (!isset($form_state['userpoints_transaction'])) {
+      // Create a transaction entity for a single transaction type, or allow
+      // the user to choose the transaction type.
+      $types = userpoints_transaction_get_types();
+
+      if (count($types) == 1) {
+        $transaction_type = array_shift($types);
+
+        $txn = new UserpointsTransaction(array('type' => $transaction_type->name));
+      }
+      elseif (empty($types)) {
+        // No transaction types.
+        throw new Exception(t('There are no !points transaction types available.', userpoints_translation()));
+      }
+      else {
+        // Provide a selection of types and return the form.
+        $type_options = array();
+        foreach ($types as $type) {
+          $type_options[$type->name] = check_plain($type->label);
+        }
+
+        $form['userpoints_transaction_type'] = array(
+          '#type' => 'select',
+          '#title' => t('!Points Transaction Type', userpoints_translation()),
+          '#required' => TRUE,
+          '#options' => $type_options,
+        );
+
+        $form['actions'] = array('#type' => 'actions');
+        $form['actions']['submit'] = array(
+          '#type' => 'submit',
+          '#value' => t('Next'),
+          '#submit' => array('userpoints_admin_txn_type_submit'),
+        );
+
+        return $form;
+      }
+    }
+    else {
+      $txn = $form_state['userpoints_transaction'];
+    }
   }
+
   $form_state['userpoints_transaction'] = $txn;
 
   // If this transaction is read only, disable all fields.
@@ -259,6 +309,16 @@ function userpoints_admin_txn($form, &$form_state, $mode, $txn = NULL) {
       '#disabled' => $disable,
   );
 
+  if ($mode == 'add') {
+    $form['actions']['back'] = array(
+      '#type' => 'submit',
+      '#value' => t('Back'),
+      '#submit' => array('userpoints_admin_txn_back_submit'),
+      '#limit_validation_errors' => array(),
+    );
+  }
+
+  // @todo Should fields also be disabled if read-only?
   field_attach_form('userpoints_transaction', $txn, $form, $form_state);
   return $form;
 }
@@ -312,6 +372,10 @@ function userpoints_create_operation_autocomplete_label($operation, $info, $sear
  * Validate function for userpoints transaction form.
  */
 function userpoints_admin_txn_validate($form, &$form_state) {
+  if (in_array($form_state['clicked_button']['#value'], array(t('Next'), t('Back')))) {
+    return;
+  }
+
   $txn_user = user_load_by_name($form_state['values']['txn_user']);
   if (!is_object($txn_user)) {
     form_set_error('txn_user', t('Specified user does not exist.'));
@@ -332,6 +396,29 @@ function userpoints_admin_txn_validate($form, &$form_state) {
 }
 
 /**
+ * Submit function for userpoints transaction form, Step 1.
+ */
+function userpoints_admin_txn_type_submit($form, &$form_state) {
+  $form_state['rebuild'] = TRUE;
+
+  try {
+    $form_state['userpoints_transaction'] = new UserpointsTransaction(array('type' => $form_state['values']['userpoints_transaction_type']));
+  }
+  catch (Exception $e) {
+    watchdog_exception('userpoints', $e, 'Could not create !points transaction.', userpoints_translation());
+  }
+}
+
+/**
+ * Back submit function for userpoints transaciton form
+ */
+function userpoints_admin_txn_back_submit($form, &$form_state) {
+  $form_state['rebuild'] = TRUE;
+
+  unset($form_state['userpoints_transaction']);
+}
+
+/**
  * Submit function for userpoints transaction form.
  */
 function userpoints_admin_txn_submit($form, &$form_state) {
@@ -381,13 +468,18 @@ function userpoints_admin_txn_submit($form, &$form_state) {
   }
 
   // Attach field information directly to the userpoints transaction object.
-  foreach (field_info_instances('userpoints_transaction', 'userpoints_transaction') as $instance) {
+  foreach (field_info_instances('userpoints_transaction', $transaction->type) as $instance) {
     $field_name = $instance['field_name'];
     $transaction->$field_name = $form_state['values'][$field_name];
   }
 
   field_attach_submit('userpoints_transaction', $transaction, $form, $form_state);
 
+  if (!isset($form_state['values']['tid'])) {
+    // Set default tid if taxonomy is disabled.
+    $form_state['values']['tid'] = userpoints_get_default_tid();
+  }
+
   // Set common properties and save the transaction.
   $transaction
     ->setTid($form_state['values']['tid'])
@@ -835,3 +927,93 @@ function userpoints_admin_settings($form, &$form_state) {
 
   return system_settings_form($form);
 }
+
+/**
+ * Userpoints transaction type form.
+ *
+ * @param $form
+ *   The form array.
+ * @param &$form_state
+ *   The reference to the form state array.
+ * @param $type
+ *   The userpoints transaction type entity if it exists.
+ * @param $op
+ *   The operation to perform: add, edit, or clone.
+ *
+ * @return Array
+ *   An associative array based on the form API.
+ */
+function userpoints_transaction_type_form($form, &$form_state, $type, $op = 'edit') {
+  // @todo There is a bug in Entity API that turns id and name properties into bool.
+
+  if ($op == 'clone') {
+    // Prepare a clone of the transaction type entity.
+    $type->name .= '_clone';
+    $type->label .= ' (Clone)';
+  }
+
+  $form['label'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Label'),
+    '#description' => t('Provide a label for the transaction type.'),
+    '#max_length' => 255,
+    '#required' => TRUE,
+    '#default_value' => isset($type) ? check_plain($type->label) : '',
+  );
+
+  $form['name'] = array(
+    '#type' => 'machine_name',
+    '#machine_name' => array(
+      'exists' => 'userpoints_transaction_type_exists',
+      'source' => array('label'),
+    ),
+    '#max_length' => 100,
+    '#required' => TRUE,
+    '#default_value' => isset($type) ? check_plain($type->name) : '',
+  );
+
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+    '#weight' => 42,
+  );
+
+  if (isset($type->id)) {
+    $form_state['userpoints_transaction_type'] = $type;
+
+    $form['actions']['delete'] = array(
+      '#type' => 'submit',
+      '#value' => t('Delete'),
+      '#submit' => array('userpoints_transaction_type_form_delete'),
+      '#weight' => 43,
+    );
+  }
+
+  return $form;
+}
+
+/**
+ * Userpoints transaction type form delete.
+ */
+function userpoints_transaction_type_form_delete($form, &$form_state) {
+  $form_state['redirect'] = array('admin/config/people/userpoints/types/' . $form_state['userpoints_transaction_type']->name . '/delete');
+}
+
+/**
+ * Userpoints transaction type form submit.
+ */
+function userpoints_transaction_type_form_submit($form, &$form_state) {
+  $type = entity_ui_form_submit_build_entity($form, $form_state);
+
+  try {
+    $type->save();
+  }
+  catch (Exception $e) {
+    watchdog_exception('userpoints', $e);
+  }
+
+  drupal_set_message(t('Successfully saved transaction type %label', array('%label' => $type->label)));
+  $form_state['redirect'] = array('admin/config/people/userpoints/types');
+}
+
diff --git a/userpoints.install b/userpoints.install
index 990c381..5aa9558 100644
--- a/userpoints.install
+++ b/userpoints.install
@@ -101,6 +101,12 @@ function userpoints_schema() {
         'type' => 'serial',
         'not null' => TRUE,
       ),
+      'type' => array(
+        'description' => 'Bundle',
+        'type' => 'varchar',
+        'length' => 100,
+        'not null' => TRUE,
+      ),
       'uid' => array(
         'description' => 'User ID',
         'type' => 'int',
@@ -202,10 +208,74 @@ function userpoints_schema() {
       'points' => array('points'),
     )
   );
+
+  $schema['userpoints_txn_type'] = array(
+    'description' => 'Userpoints transaction type',
+    'fields' => array(
+      'id' => array(
+        'description' => 'Transaction type id',
+        'type' => 'serial',
+        'not null' => TRUE,
+      ),
+      'name' => array(
+        'description' => 'Machine name',
+        'type' => 'varchar',
+        'length' => 100,
+        'not null' => TRUE,
+      ),
+      'label' => array(
+        'description' => 'Human-readable name',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+      'status' => array(
+        'description' => 'Type status used by Entity API',
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0x01,
+      ),
+      'module' => array(
+        'description' => 'Module owner of type used by Entity API',
+        'type' => 'varchar',
+        'length' => 100,
+        'not null' => FALSE,
+      ),
+    ),
+    'primary key' => array('id'),
+    'unique keys' => array(
+      'name' => array('name'),
+    ),
+  );
+
   return $schema;
 }
 
 /**
+ * Implements hook_install().
+ */
+function userpoints_install() {
+  // Create the default userpoints bundle that is defined in 
+  // userpoints_entity_info().
+  $bundle_info = array(
+    'name' => 'userpoints',
+    'label' => st('Default'),
+    'status' => 0x01,
+    'module' => 'userpoints',
+  );
+
+  try {
+    $bundle = new UserpointsTransactionType($bundle_info);
+    $bundle->save();
+    variable_set('userpoints_default_bundle', 'userpoints');
+  }
+  catch (Exception $e) {
+    watchdog_exception('userpoints', $e, 'Failed to create default bundle.', array(), WATCHDOG_CRITICAL);
+  }
+}
+
+/**
  * Implements hook_uninstall().
  */
 function userpoints_uninstall() {
@@ -217,6 +287,8 @@ function userpoints_uninstall() {
   if ($vid && function_exists('taxonomy_vocabulary_delete')) {
     taxonomy_vocabulary_delete($vid);
   }
+  
+  variable_del('userpoints_default_bundle', 'userpoints');
 }
 
 /**
@@ -331,4 +403,74 @@ function userpoints_update_7004(&$sandbox) {
   $sandbox['current_uid'] = $last_uid;
   // Set #finished based on sandbox.
   $sandbox['#finished'] = (empty($sandbox['max']) || $last_uid == 0) ? 1 : ($sandbox['current_uid'] / $sandbox['max']);
-}
\ No newline at end of file
+}
+
+/**
+ * Add userpoints transaction type table, and default bundle.
+ */
+function userpoints_update_7200() {
+
+  // Add transaction type table from schema.
+  $txn_type_schema = array(
+    'description' => 'Userpoints transaction type',
+    'fields' => array(
+      'id' => array(
+        'description' => 'Transaction type id',
+        'type' => 'serial',
+        'not null' => TRUE,
+      ),
+      'name' => array(
+        'description' => 'Machine name',
+        'type' => 'varchar',
+        'length' => 100,
+        'not null' => TRUE,
+      ),
+      'label' => array(
+        'description' => 'Human-readable name',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+      'status' => array(
+        'description' => 'Type status used by Entity API',
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0x01,
+      ),
+      'module' => array(
+        'description' => 'Module owner of type used by Entity API',
+        'type' => 'varchar',
+        'length' => 100,
+        'not null' => FALSE,
+      ),
+    ),
+    'primary key' => array('id'),
+    'unique keys' => array(
+      'name' => array('name'),
+    ),
+  );
+  
+  db_create_table('userpoints_txn_type', $txn_type_schema);
+
+  // Create the default userpoints bundle.
+  $insert = db_insert('userpoints_txn_type')->fields(array(
+    'name' => 'userpoints',
+    'label' => st('Default'),
+    'status' => 0x01,
+    'module' => 'userpoints',
+  ));
+  $insert->execute();
+  variable_set('userpoints_default_bundle', 'userpoints');
+
+  // Add bundle column to transaction table.
+  $type_field = array(
+    'description' => 'Bundle',
+    'type' => 'varchar',
+    'length' => 100,
+    'not null' => TRUE,
+    'initial' => 'userpoints',
+  );
+  db_add_field('userpoints_txn', 'type', $type_field);
+}
+
diff --git a/userpoints.module b/userpoints.module
index b37072c..745b4ef 100644
--- a/userpoints.module
+++ b/userpoints.module
@@ -158,7 +158,6 @@ function userpoints_menu() {
       'type' => MENU_LOCAL_TASK,
       'weight' => 0,
   );
-
   $items['admin/config/people/userpoints/moderate'] = array(
       'title' => 'Moderation',
       'title arguments' => userpoints_translation(),
@@ -176,12 +175,11 @@ function userpoints_menu() {
       'title arguments' => userpoints_translation(),
       'description' => 'Admin add/delete userpoints',
       'page callback' => 'drupal_get_form',
-      'page arguments' => array('userpoints_admin_txn', 4),
+      'page arguments' => array('userpoints_admin_txn', 4, 5),
       'access callback' => 'userpoints_admin_access',
       'access arguments' => array('add'),
       'file' => 'userpoints.admin.inc',
       'type' => MENU_LOCAL_ACTION,
-      'weight' => 0,
   );
 
   $items['admin/config/people/userpoints/settings'] = array(
@@ -322,7 +320,7 @@ function userpoints_menu_local_tasks_alter(&$data, $router_item, $root_path) {
 
     // Don't display the action link on some pages like settings and
     // approve or decline confirmation forms.
-    $blacklist = array('settings', 'approve', 'decline', 'add', 'edit');
+    $blacklist = array('settings', 'approve', 'decline', 'add', 'edit', 'types');
     foreach ($blacklist as $blacklisted_path) {
       if (strpos($root_path, $blacklisted_path) !== FALSE) {
         return;
@@ -657,20 +655,20 @@ function userpoints_get_current_points($uid = NULL, $tid = NULL) {
 function userpoints_get_max_points($uid = NULL, $tid = NULL) {
   $max = drupal_static(__FUNCTION__, array());
 
-  // Check if uid is passed as a parameter.
+  // Checks if uid is passed as a parameter.
   if (!$uid) {
     // It is not, so we use the currently logged in user's uid.
     global $user;
     $uid = $user->uid;
   }
 
-  // Check if a term id is passed as a parameter.
+  // Checks if a term id is passed as a parameter.
   if (!isset($tid)) {
     // It is not, so get the default term id.
     $tid = userpoints_get_default_tid();
   }
 
-  // Check if we have already cached the maximum for the user/term combination on previous calls.
+  // Checks if we have already cached the maximum for the user/term combination on previous calls.
   if (!isset($max[$uid][$tid])) {
     // We did not cache it.
     if ($tid === 'all') {
@@ -689,8 +687,9 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
 /**
  * Grant a user points.
  *
- * The function excpects two required parameters, an operation string
- * and the amount of points. Optionally, a user id can be passed.
+ * The function expects three required parameters, an operation string, the
+ * amount of points, and the transaction bundle. Optionally, a user id may be
+ * passed.
  *
  * The function then returns a UserpointsTransaction object, which provides
  * methods to add further details to the transaction. New transactions are saved
@@ -700,11 +699,13 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
  * Basic usage examples:
  * @code
  * // Adding points to the current user, relying on automatic saving.
- * userpoints_grant_points('mymodule_type_action', $points);
+ * userpoints_grant_points('mymodule_type_action', $points, 
+ *                         'my_userpoints_type');
  *
  * // Grant points to another, add a entity reference to a node and save
  * // explicitly.
- * userpoints_grant_points('mymodule_type_otheraction', $points, $account->uid)
+ * userpoints_grant_points('mymodule_type_otheraction', $points, 
+ *                         'my_userpoints_type', $account->uid)
  *   ->setEntity('node', $node->nid)
  *   ->save();
  * @endcode
@@ -718,6 +719,9 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
  *   transaction listings. See hook_userpoints_info().
  * @param $points
  *   A positive or negative point amount that should be assigned to the user.
+ * @param $type
+ *   The userpoints transaction bundle to create. Optional, defaults to the
+ *   default bundle if it exists.
  * @param $uid
  *   UID of the user that should be granted points. Optional, defaults to the
  *   current user.
@@ -726,15 +730,26 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
  *
  * @ingroup userpoints_api
  */
-function userpoints_grant_points($operation, $points, $uid = NULL) {
+function userpoints_grant_points($operation, $points, $type = NULL, $uid = NULL) {
   global $user;
 
-  // Default to the current user if not set.
+  if (empty($type)) {
+    // Default to the default bundle if not set.
+    $type = variable_get('userpoints_default_bundle', 'userpoints');
+  }
+
   if (empty($uid)) {
+    // Default to the current user if not set.
     $uid = $user->uid;
   }
 
-  $transaction = new UserpointsTransaction();
+  try {
+    $transaction = new UserpointsTransaction(array('type' => $type));
+  }
+  catch (Exception $e) {
+    watchdog_exception('userpoints', $e, 'Unable to create !points transaction.', userpoints_translation());
+  }
+
   return $transaction->setOperation($operation)
     ->setPoints($points)
     ->setUid($uid);
@@ -984,7 +999,7 @@ function userpoints_filter_parse_input($form_state, $tid = NULL) {
  * Filter a query according to the selected filters.
  */
 function userpoints_filter_query(SelectQueryInterface $query, $values) {
-    // Check for filtering. isset() is used because 0 is a valid value
+    // Checks for filtering. isset() is used because 0 is a valid value
   // (Uncategorized).
   if (isset($values['tid']) && $values['tid'] != 'all') {
     // If a category is selected, limit both the default query and the query
@@ -1140,7 +1155,7 @@ function userpoints_expire_transactions() {
     ));
     $description = strtr(variable_get(USERPOINTS_EXPIRY_DESCRIPTION, NULL), $arguments);
 
-    userpoints_grant_points('expiry', -$transaction->points, $transaction->uid)
+    userpoints_grant_points('expiry', -$transaction->points, $transaction->type, $transaction->uid)
       ->setDescription($description)
       ->setParent($transaction->txn_id)
       ->setTid($transaction->tid)
@@ -1296,7 +1311,7 @@ function userpoints_userpoints_info() {
 }
 
 /**
- * Load a userpoints transaction.
+ * Loads a userpoints transaction.
  *
  * @param $txn_id
  *   Userpoints transaction Id.
@@ -1310,11 +1325,66 @@ function userpoints_transaction_load($txn_id, $reset = FALSE) {
   return $temp ? reset($temp) : FALSE;
 }
 
+/**
+ * Loads multiple userpoints transactions.
+ */
 function userpoints_transaction_load_multiple(array $txn_ids, $conditions = array(), $reset = FALSE) {
   return entity_load('userpoints_transaction', $txn_ids, $conditions, $reset);
 }
 
 /**
+ * Loads userpoints transaction type.
+ *
+ * @param $name
+ *   Userpoints transaction bundle name.
+ *
+ * @return UserpointsTransactionType
+ *   A userpoints transaction type entity.
+ */
+function userpoints_transaction_type_load($name) {
+  return userpoints_transaction_get_types($name);
+}
+
+/**
+ * Checks if the userpoints transaction type exists.
+ *
+ * @param $name
+ *   Userpoints transaction bundle name.
+ *
+ * @return bool
+ */
+function userpoints_transaction_type_exists($name) {
+  $type = userpoints_transaction_type_load($name);
+
+  if ($type) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/**
+ * Loads userpoints transaction types.
+ *
+ * @param $name
+ *   An optional userpoints transaction bundle name.
+ *
+ * @return Mixed
+ *   An array of userpoints transaction types or a UserpointsTransactionType.
+ */
+function userpoints_transaction_get_types($name = NULL) {
+  $types = entity_load_multiple_by_name('userpoints_transaction_type', isset($name) ? array($name) : FALSE);
+  return isset($name) ? reset($types) : $types;
+}
+
+/**
+ * Access callback for administration access to transaction type ui.
+ */
+function userpoints_transaction_type_access($op, $type) {
+  return user_access('administer userpoints');
+}
+
+/**
  * Returns a table header for a transaction listing.
  *
  * @param $settings
@@ -1431,6 +1501,7 @@ function userpoints_transaction_get_points_absolute($userpoints_transaction, arr
 function userpoints_entity_info() {
   $return = array(
     'userpoints_transaction' => array(
+      'module' => 'userpoints',
       'label' => t('Userpoints Transaction'),
       'entity class' => 'UserpointsTransaction',
       'controller class' => 'UserpointsTransactionController',
@@ -1441,12 +1512,19 @@ function userpoints_entity_info() {
       'fieldable' => TRUE,
       'entity keys' => array(
         'id' => 'txn_id',
+        'bundle' => 'type',
+      ),
+      'bundle keys' => array(
+        'bundle' => 'name',
       ),
       'bundles' => array(
-        'userpoints_transaction' => array(
-          'label' => t('Default bundle'),
+        'userpoints' => array(
+          'label' => t('Default'),
           'admin' => array(
-            'path' => 'admin/config/people/userpoints',
+            'path' => 'admin/config/people/userpoints/types/%userpoints_transaction_type',
+            'real path' => 'admin/config/people/userpoints/types/userpoints',
+            'bundle argument' => 5,
+            'access callback' => 'userpoints_admin_access',
             'access arguments' => array('administer userpoints'),
           ),
         ),
@@ -1458,6 +1536,49 @@ function userpoints_entity_info() {
         ),
       ),
     ),
+    'userpoints_transaction_type' => array(
+      'module' => 'userpoints',
+      'label' => t('Userpoints Transaction Type'),
+      'entity class' => 'UserpointsTransactionType',
+      'controller class' => 'EntityAPIControllerExportable',
+      'base table' => 'userpoints_txn_type',
+      'entity keys' => array(
+        'id' => 'id',
+        'name' => 'name',
+        'label' => 'label',
+      ),
+      'fieldable' => FALSE,
+      'bundle of' => 'userpoints_transaction',
+      'access callback' => 'userpoints_transaction_type_access',
+      'exportable' => TRUE,
+      'admin ui' => array(
+        'path' => 'admin/config/people/userpoints/types',
+        'file' => 'userpoints.admin.inc',
+        'controller class' => 'UserpointsTransactionTypeUIController',
+      ),   
+    ),
   );
   return $return;
 }
+
+/**
+ * Implements hook_entity_info_alter().
+ */
+function userpoints_entity_info_alter(&$info) {
+  $types = userpoints_transaction_get_types();
+
+  if (!empty($types)) {
+    foreach ($types as $name => $type) {
+      $info['userpoints_transaction']['bundles'][$name] = array(
+        'label' => check_plain($type->label),
+        'admin' => array(
+          'path' => 'admin/config/people/userpoints/types/%userpoints_transaction_type',
+          'real path' => 'admin/config/people/userpoints/types/' . $name,
+          'bundle argument' => 5,
+          'access callback' => 'userpoints_admin_access',
+          'access arguments' => array('administer userpoints'),
+        ),
+      );
+    }
+  }
+}
diff --git a/userpoints.test b/userpoints.test
index 20ea947..1a1e57c 100644
--- a/userpoints.test
+++ b/userpoints.test
@@ -89,7 +89,7 @@ class UserpointsAPITestCase extends UserpointsBaseTestCase {
   /**
    * Implements getInfo().
    */
-  function getInfo() {
+  static public function getInfo() {
     return array(
         'name' => t('Userpoints API'),
         'description' => t('Tests the core API for proper inserts & updates to the database tables,
@@ -183,7 +183,7 @@ class UserpointsAPITestCase extends UserpointsBaseTestCase {
     $bad_time = 'test string';
     // First lets check to make sure it is blocking bad times.
     try {
-      userpoints_grant_points('bad_time', $points, $this->non_admin_user->uid)
+      userpoints_grant_points('bad_time', $points, 'userpoints', $this->non_admin_user->uid)
         ->setExpiryDate($bad_time)
         ->save();
 
@@ -193,7 +193,7 @@ class UserpointsAPITestCase extends UserpointsBaseTestCase {
     }
 
     foreach ($times as $key => $time) {
-      $transaction = userpoints_grant_points($key, $points, $this->non_admin_user->uid)
+      $transaction = userpoints_grant_points($key, $points, 'userpoints', $this->non_admin_user->uid)
         ->setExpiryDate($time['time']);
       $transaction->save();
       $this->assertTrue((bool)$transaction->getTxnId(), t($time['string'] . " API responded with a successful grant of points"));
@@ -204,7 +204,7 @@ class UserpointsAPITestCase extends UserpointsBaseTestCase {
 
       $sum_points += $points;
 
-      // Check update point to 'userpoints' table.
+      // Check update point to userpoints table.
       $this->assertEqual($this->getPoints($this->non_admin_user->uid), $sum_points, t($time['string'] . "Successfully verified that the summary table was updated"));
     }
 
@@ -221,12 +221,12 @@ class UserpointsAPITestCase extends UserpointsBaseTestCase {
     $keep_points = rand(1, 100);
     $expire_points = rand(1, 100);
 
-    $transaction = userpoints_grant_points('must_expire', $expire_points, $this->non_admin_user->uid)
+    $transaction = userpoints_grant_points('must_expire', $expire_points, 'userpoints', $this->non_admin_user->uid)
       ->setExpiryDate(REQUEST_TIME - 100);
     $transaction->save();
     $this->assertTrue((bool)$transaction->getTxnId(), t("API succesfully added points for expiration"));
 
-    $transaction = userpoints_grant_points('must_not_expire', $keep_points, $this->non_admin_user->uid)
+    $transaction = userpoints_grant_points('must_not_expire', $keep_points, 'userpoints', $this->non_admin_user->uid)
       ->setExpiryDate(REQUEST_TIME + 10000);
     $transaction->save();
     $this->assertTrue((bool)$transaction->getTxnId(), t("API succesfully added points for expiration"));
@@ -471,7 +471,7 @@ class UserpointsAdminTestCase extends UserpointsBaseTestCase {
   /**
    * Implements getInfo().
    */
-  function getInfo() {
+  static public function getInfo() {
     return array(
         'name' => t('Userpoints Admin'),
         'description' => t('Test various userpoints administration forms and listings.'),
@@ -570,7 +570,7 @@ class UserpointsGrantPointsTestCase extends UserpointsBaseTestCase {
   /**
    * Implements getInfo().
    */
-  function getInfo() {
+  static public function getInfo() {
     return array(
       'name' => t('Userpoints grant points'),
       'description' => t('Tests the core API for proper inserts & updates to the database tables.'),
@@ -597,16 +597,16 @@ class UserpointsGrantPointsTestCase extends UserpointsBaseTestCase {
    */
   function testGrantPoints() {
     // Most basic usage, with automated saving.
-    userpoints_grant_points('test', 10, $this->non_admin_user->uid)->save();
+    userpoints_grant_points('test', 10, 'userpoints', $this->non_admin_user->uid)->save();
     $this->verifyPoints($this->non_admin_user->uid, 10, 10);
 
     // Negative points, use of save().
-    userpoints_grant_points('test', -5, $this->non_admin_user->uid)
+    userpoints_grant_points('test', -5, 'userpoints', $this->non_admin_user->uid)
       ->save();
     $this->verifyPoints($this->non_admin_user->uid, 5, 10);
 
     // Verify that pending points are not added to the total.
-    $transaction = userpoints_grant_points('test', 7, $this->non_admin_user->uid)
+    $transaction = userpoints_grant_points('test', 7, 'userpoints', $this->non_admin_user->uid)
       ->pending();
     $transaction->save();
     $this->verifyPoints($this->non_admin_user->uid, 5, 10);
@@ -629,7 +629,7 @@ class UserpointsGrantPointsTestCase extends UserpointsBaseTestCase {
       $this->pass(t('Changing a approved transaction was denied.'));
     }
 
-    $transaction = userpoints_grant_points('test', 19, $this->non_admin_user->uid)
+    $transaction = userpoints_grant_points('test', 19, 'userpoints', $this->non_admin_user->uid)
       ->pending();
     $transaction->save();
     $this->verifyPoints($this->non_admin_user->uid, 12, 12);
@@ -687,7 +687,7 @@ class UserpointsFieldsTestCase extends UserpointsBaseTestCase {
       'fields[_add_new_field][type]' => 'text',
       'fields[_add_new_field][widget_type]' => 'text_textfield',
     );
-    $this->drupalPost('admin/config/people/userpoints/fields', $edit, t('Save'));
+    $this->drupalPost('admin/config/people/userpoints/types/userpoints/fields', $edit, t('Save'));
     $this->drupalPost(NULL, array(), t('Save field settings'));
     $this->drupalPost(NULL, array(), t('Save settings'));
 
@@ -706,3 +706,96 @@ class UserpointsFieldsTestCase extends UserpointsBaseTestCase {
     $this->assertText($message['field_' . $name . '[' . LANGUAGE_NONE . '][0][value]'], t('Content of new field is displayed.'));
   }
 }
+
+/**
+ * Tests for update 7200: bundles.
+ */
+class UserpointsUpdate7200TestCase extends UpdatePathTestCase {
+  /**
+   * Implements getInfo().
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Userpoints update 7200',
+      'description' => 'Assert that database update 7200 works',
+      'group' => 'Userpoints',
+    );
+  }
+
+  /** 
+   * Implements setUp().
+   */
+  public function setUp() {
+
+    $this->databaseDumpFiles = array(
+      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.bare.standard_all.database.php.gz',
+      drupal_get_path('module', 'userpoints') . '/tests/userpoints.filled.database.php',
+    );
+
+    parent::setUp();
+
+    // Shamelessly taken from botcha module.
+    spl_autoload_register('drupal_autoload_class');
+    spl_autoload_register('drupal_autoload_interface');
+    registry_rebuild();
+  }
+
+  /** 
+   * Assert successful update.
+   */
+  public function testUpdate() {
+    $update = $this->performUpgrade();
+
+    $this->assertTrue($update);
+
+    $this->drupalGet('admin/config/people/userpoints/types');
+    $this->assertRaw(t('Default'));
+  }
+
+}
+
+/**
+ * Tests for update 7200: bundles. Alternate.
+ */
+class UserpointsUpdate7200AlternateTestCase extends UpdatePathTestCase {
+  /**
+   * Implements getInfo().
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Userpoints update 7200 (alternate)',
+      'description' => 'Assert that database update 7200 works. This uses a different database dump.',
+      'group' => 'Userpoints',
+    );
+  }
+
+  /** 
+   * Implements setUp().
+   */
+  public function setUp() {
+
+    $this->databaseDumpFiles = array(
+      drupal_get_path('module', 'userpoints') . '/tests/userpoints.filled.database.all.php',
+    );
+
+    parent::setUp();
+
+    // Shamelessly taken from botcha module.
+    spl_autoload_register('drupal_autoload_class');
+    spl_autoload_register('drupal_autoload_interface');
+    registry_rebuild();
+  }
+
+  /** 
+   * Assert successful update.
+   */
+  public function testUpdate() {
+    $update = $this->performUpgrade();
+
+    $this->assertTrue($update);
+
+    $this->drupalGet('admin/config/people/userpoints/types');
+    $this->assertRaw(t('Default'));
+  }
+
+}
diff --git a/userpoints.transaction.inc b/userpoints.transaction.inc
index 2818870..8245e79 100644
--- a/userpoints.transaction.inc
+++ b/userpoints.transaction.inc
@@ -32,6 +32,8 @@ class UserpointsTransaction extends Entity {
    */
   public $txn_id = NULL;
 
+  public $type;
+
   public $uid = 0;
 
   public $points;
@@ -465,7 +467,9 @@ class UserpointsTransaction extends Entity {
    */
   function getEntity() {
     if (!empty($this->entity_id) && !empty($this->entity_type) && entity_get_info($this->entity_type)) {
-      return array_shift(entity_load($this->entity_type, array($this->entity_id)));
+      // Create an array because array_shift passes in by reference.
+      $entities = entity_load($this->entity_type, array($this->entity_id));
+      return array_shift($entities);
     }
   }
 
@@ -1309,6 +1313,12 @@ class UserpointsTransactionMetadataController extends EntityDefaultMetadataContr
     $properties['points']['label'] = t('!Points', userpoints_translation());
     $properties['points']['description'] = t('Amount of !points to give or take.', userpoints_translation());
 
+    $properties['type'] = array(
+      'label' => t('!Points transaction type', userpoints_translation()),
+      'description' => t('The bundle entity for !points transactions.', userpoints_translation()),
+      'type' => 'userpoints_transaction_type',
+    );
+
     $properties['points_abs'] = array(
       'label' => t('!Points absolute', userpoints_translation()),
       'description' => t('The absolute (positive) amount of !points of this transaction.', userpoints_translation()),
@@ -1431,3 +1441,135 @@ class UserpointsTransactionMetadataController extends EntityDefaultMetadataContr
     return $info;
   }
 }
+
+/**
+ * Transaction type.
+ *
+ * @ingroup userpoints_api 
+ */
+class UserpointsTransactionType extends Entity {
+
+  function __construct($values = array()) {
+    parent::__construct($values, 'userpoints_transaction_type');
+  }
+
+}
+
+/**
+ * Transaction type UI.
+ *
+ * @ingroup userpoints_api
+ */
+class UserpointsTransactionTypeUIController extends EntityDefaultUIController {
+
+  /**
+   * Implements EntityDefaultUIController::hook_menu().
+   *
+   * Make transaction type UI fit into userpoints menu structure.
+   */
+  public function hook_menu() {
+    $items = parent::hook_menu();
+    $items[$this->path]['title'] = 'Transaction Types';
+    $items[$this->path]['description'] = strtr('Manage !Points transaction types.', userpoints_translation());
+    $items[$this->path]['type'] = MENU_LOCAL_TASK;
+    $items[$this->path]['weight'] = 10;
+
+    foreach ($items as $path => $item) {
+      if (substr($path, strlen($this->path) + 1, 6) == 'manage') {
+        // Field UI doesn't render local tasks well when the main ui is a local
+        // task itself. This places all admin interfaces directly under types
+        // instead.
+        $new_path = preg_replace('/\/manage/', '', $path);
+        $items[$new_path] = $items[$path];
+        $items[$new_path]['page arguments'][1] = 5;
+
+        if (isset($items[$new_path]['page arguments'][0]) &&
+            $items[$new_path]['page arguments'][0] == 'userpoints_transaction_type_operation_form') {
+          // Entity API fails to use the correct bundle argument defined in
+          // entity info.
+          $items[$new_path]['page arguments'] = array('entity_ui_operation_form', 'userpoints_transaction_type', 5, 6);
+        }
+
+        unset($items[$path]);
+      }
+    }
+    return $items;
+  }
+
+  /**
+   * Implements EntityDefaultUIController::overviewTableRow().
+   *
+   * This is pretty much a straight rip from Entity API except the links are
+   * generated without 'manage' in the path.
+   */
+  protected function overviewTableRow($conditions, $id, $entity, $additional_cols = array()) {
+    $entity_uri = entity_uri($this->entityType, $entity);
+
+    $row[] = array(
+      'data' => array(
+        '#theme' => 'entity_ui_overview_item', 
+        '#label' => entity_label($this->entityType, $entity), 
+        '#name' => !empty($this->entityInfo['exportable']) ? entity_id($this->entityType, $entity) : FALSE, 
+        '#url' => $entity_uri ? $entity_uri : FALSE, 
+        '#entity_type' => $this->entityType,
+      ),
+    );
+
+    // Add in any passed additional cols.
+    foreach ($additional_cols as $col) {
+      $row[] = $col;
+    }
+
+    // Add a row for the exportable status.
+    if (!empty($this->entityInfo['exportable'])) {
+      $row[] = array('data' => array(
+          '#theme' => 'entity_status', 
+          '#status' => $entity->{$this->statusKey},
+        ));
+    }
+    // In case this is a bundle, we add links to the field ui tabs.
+    $field_ui = !empty($this->entityInfo['bundle of']) && entity_type_is_fieldable($this->entityInfo['bundle of']) && module_exists('field_ui');
+    // For exportable entities we add an export link.
+    $exportable = !empty($this->entityInfo['exportable']);
+    // If i18n integration is enabled, add a link to the translate tab.
+    $i18n = !empty($this->entityInfo['i18n controller class']);
+
+    // Add operations depending on the status.
+    if (entity_has_status($this->entityType, $entity, ENTITY_FIXED)) {
+      $row[] = array(
+        'data' => l(t('clone'), $this->path . '/' . $id . '/clone'),
+        'colspan' => $this->operationCount(),
+      );
+    }
+    else {
+      $row[] = l(t('edit'), $this->path . '/' . $id);
+
+      if ($field_ui) {
+        $row[] = l(t('manage fields'), $this->path . '/' . $id . '/fields');
+        $row[] = l(t('manage display'), $this->path . '/' . $id . '/display');
+      }
+      if ($i18n) {
+        $row[] = l(t('translate'), $this->path . '/' . $id . '/translate');
+      }
+      if ($exportable) {
+        $row[] = l(t('clone'), $this->path . '/' . $id . '/clone');
+      }
+
+      if (empty($this->entityInfo['exportable']) || !entity_has_status($this->entityType, $entity, ENTITY_IN_CODE)) {
+        $row[] = l(t('delete'), $this->path . '/' . $id . '/delete', array('query' => drupal_get_destination()));
+      }
+      elseif (entity_has_status($this->entityType, $entity, ENTITY_OVERRIDDEN)) {
+        $row[] = l(t('revert'), $this->path . '/' . $id . '/revert', array('query' => drupal_get_destination()));
+      }
+      else {
+        $row[] = '';
+      }
+    }
+    if ($exportable) {
+      $row[] = l(t('export'), $this->path . '/' . $id . '/export');
+    }
+    return $row;
+  }
+
+}
+
diff --git a/userpoints_rules/userpoints_rules.rules.inc b/userpoints_rules/userpoints_rules.rules.inc
index 87ccf1d..ec203c3 100644
--- a/userpoints_rules/userpoints_rules.rules.inc
+++ b/userpoints_rules/userpoints_rules.rules.inc
@@ -14,6 +14,11 @@ function userpoints_rules_rules_action_info() {
       'label' => t('Grant !points to a user', userpoints_translation()),
       'named parameter' => TRUE,
       'parameter' => array(
+        'type' => array(
+          'type' => 'userpoints_transaction_type',
+          'label' => t('Userpoints Transaction Type'),
+          'description' => t('Please choose the userpoints transaction type.'),
+        ),
         'user' => array(
           'type' => 'user',
           'label' => t('User'),
@@ -155,7 +160,7 @@ function userpoints_action_grant_points($params) {
   $state = $params['state'];
   $entity = $state->currentArguments['entity'];
 
-  $transaction = userpoints_grant_points($params['operation'], $params['points'])
+  $transaction = userpoints_grant_points($params['operation'], $params['points'], $params['type']->name)
     // User id might be a int or a EntityValueWrapper.
     ->setUid(is_object($params['user']->uid) ? $params['user']->getIdentifier() : $params['user']->uid)
     ->setTid($params['tid'])
diff --git a/userpoints_rules/userpoints_rules.test b/userpoints_rules/userpoints_rules.test
index 6bdd9ca..aa8fd83 100644
--- a/userpoints_rules/userpoints_rules.test
+++ b/userpoints_rules/userpoints_rules.test
@@ -63,7 +63,7 @@ class UserpointsRulesTestCase extends DrupalWebTestCase {
 
     $this->createEventRules();
 
-    $transaction = userpoints_grant_points('userpoints_rules_trigger_before_rule', 10, $user->uid);
+    $transaction = userpoints_grant_points('userpoints_rules_trigger_before_rule', 10, 'userpoints', $user->uid);
     $transaction->save();
 
     // Verify that the changes defined in the rules have been done.
@@ -75,7 +75,7 @@ class UserpointsRulesTestCase extends DrupalWebTestCase {
     $this->assertTrue($transaction->isDeclined(), t('Transaction has been marked as declined.'));
     $this->assertEqual('Transaction was declined through rules.', $transaction->getDescription(), t('Transaction description has been set.'));
 
-    $transaction = userpoints_grant_points('userpoints_rules_trigger_after_rule', 15, $user->uid)
+    $transaction = userpoints_grant_points('userpoints_rules_trigger_after_rule', 15, 'userpoints', $user->uid)
       ->pending();
     $transaction->save();
 
@@ -89,7 +89,7 @@ class UserpointsRulesTestCase extends DrupalWebTestCase {
    * Set up the rules required for the tests.
    */
   protected function createEventRules() {
-        $before_rule = '{ "rules_userpoints_transaction_before_test_rule" : {
+    $before_rule = '{ "rules_userpoints_transaction_before_test_rule" : {
         "LABEL" : "Userpoints Transaction Before Test rule",
         "PLUGIN" : "reaction rule",
         "REQUIRES" : [ "rules", "userpoints_rules" ],
@@ -153,6 +153,7 @@ class UserpointsRulesTestCase extends DrupalWebTestCase {
         "ON" : [ "user_login" ],
         "DO" : [
           { "userpoints_action_grant_points" : {
+              "type" : "userpoints",
               "user" : [ "account" ],
               "points" : "10",
               "tid" : "0",
