diff --git a/sites/all/modules/userpoints/userpoints.module b/sites/all/modules/userpoints/userpoints.module
index c39331b..d2de0f2 100644
--- a/sites/all/modules/userpoints/userpoints.module
+++ b/sites/all/modules/userpoints/userpoints.module
@@ -128,6 +128,15 @@ function userpoints_menu() {
     'type'             => MENU_LOCAL_TASK,
     'weight'           => 0,
   );
+  $items['admin/user/userpoints/expiration'] = array(
+    'title'            => 'Expiration',
+    'description'      => 'Admin expiration behaviour',
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('userpoints_admin_expiration'),
+    'access arguments' => array(USERPOINTS_PERM_ADMIN),
+    'type'             => MENU_LOCAL_TASK,
+    'weight'           => 1,
+  );
   $items['admin/user/userpoints/edit'] = array(
     'title'            => 'Edit',
     'page callback'    => 'drupal_get_form',
@@ -1267,6 +1276,26 @@ function userpoints_admin_txn($form_state) {
   return $form;
 }
 
+function userpoints_admin_expiration() {
+  $form['userpoints_expiration_mode'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Expiration mode \'Reset\''),
+    '#description' => t('If checked, the points defined with an expiration date will simply reset to 0. If not checked, the original amount of points defined will be subtracted.'),
+    '#default_value' => variable_get('userpoints_expiration_mode', 0),
+  );  
+  
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+  );
+
+  return $form;
+}
+
+function userpoints_admin_expiration_submit($form, &$form_state) {
+    variable_set('userpoints_expiration_mode', $form['userpoints_expiration_mode']['#value']);
+}
+
 function userpoints_admin_txn_submit($form, &$form_state) {
   if ($form_state['values']['form_id'] != 'userpoints_admin_txn') {
     return;
@@ -1635,7 +1664,7 @@ function userpoints_date_to_timestamp($date) {
  *          opposite transactions (sum of 0)
  */
 function userpoints_expire_transactions() {
-  $sql = "SELECT txn_id, uid, points, time_stamp, operation, description
+  $sql = "SELECT txn_id, uid, points, time_stamp, operation, description, tid 
           FROM {userpoints_txn}
           WHERE status = 0 AND expired = 0
           AND (expirydate < %d AND expirydate != 0)";
@@ -1651,10 +1680,20 @@ function userpoints_expire_transactions() {
         )
       )
     ); //$description
-
+    
+    $expiration_mode = variable_get('userpoints_expiration_mode', 0); // flag: reset points to 0 instead of substracting the total original amount
+    if ($expiration_mode == 0) {
+      $category = USERPOINTS_CATEGORY_DEFAULT_TID;
+      $points = $line['points'];      
+    }
+    else {
+      $category = $line['tid'];
+      $points = userpoints_get_current_points($line['uid'], $category);
+    }
     $params = array(
-      'points' => -$line['points'],
+      'points' => -$points,
       'uid' => $line['uid'],
+      'tid' => $category,
       'operation' => 'expiry',
       'description' => $description,
       'parent_txn_id' => $line['txn_id'],
