diff -urp uc_roles/uc_roles.ca.inc uc_roles-new/uc_roles.ca.inc
--- uc_roles/uc_roles.ca.inc	2009-09-08 11:26:23.000000000 -0400
+++ uc_roles-new/uc_roles.ca.inc	2009-09-08 13:39:12.000000000 -0400
@@ -469,20 +469,23 @@ function uc_roles_action_order_renew($or
         continue;
       }
 
+      // Get the new expiration (if applicable)
+      $new_expiration = db_fetch_object(db_query("SELECT * FROM {uc_roles_expirations} WHERE uid = %d AND rid = %d", $account->uid, $role->rid));
+
+      // Get existing role
+      $existing_role = db_fetch_object(db_query("SELECT * FROM {uc_roles_expirations} WHERE uid = %d AND rid = %d", $account->uid, $role->rid));
+
       // Determine the expiration timestamp for the role.
       $expiration = _uc_roles_product_get_expiration($role, $product->qty, $existing_role->expiration);
 
       // Grant the role to the user.
       uc_roles_grant($account, $role->rid, $expiration, TRUE, !$settings['message']);
 
-      // Get the new expiration (if applicable)
-      $new_expiration = db_fetch_object(db_query("SELECT * FROM {uc_roles_expirations} WHERE uid = %d AND rid = %d", $account->uid, $role->rid));
 
       // Trigger role email.
       ca_pull_trigger('uc_roles_notify_'. $op, $order, $new_expiration);
 
       // Leave an order comment.
-      $existing_role = db_fetch_object(db_query("SELECT * FROM {uc_roles_expirations} WHERE uid = %d AND rid = %d", $account->uid, $role->rid));
       if (!is_null($existing_role->expiration)) {
         $op = 'renew';
         $comment = t('Customer user role %role renewed.', array('%role' => _uc_roles_get_name($role->rid)));
diff -urp uc_roles/uc_roles.module uc_roles-new/uc_roles.module
--- uc_roles/uc_roles.module	2009-07-29 15:54:17.000000000 -0400
+++ uc_roles-new/uc_roles.module	2009-09-08 13:47:38.000000000 -0400
@@ -624,6 +624,7 @@ function uc_roles_feature_form($form_sta
     $default_shippable = $product_role->shippable;
     $default_by_quantity = $product_role->by_quantity;
     $end_time = $product_role->end_time;
+    $default_end_type = $end_time ? 'abs' : 'rel';
     $form['pfid'] = array(
       '#type' => 'value',
       '#value' => $feature['pfid'],
@@ -641,6 +642,13 @@ function uc_roles_feature_form($form_sta
     $default_granularity = variable_get('uc_roles_default_granularity', 'never');
     $default_shippable = $node->shippable;
     $default_by_quantity = variable_get('uc_roles_default_by_quantity', FALSE);
+    $end_time = variable_get('uc_roles_default_end_time', array(
+      'day' => date('d'),
+      'month' => date('m'),
+      'year' => date('Y'),
+    ));
+    $default_end_type = variable_get('uc_roles_default_end_expiration', 'rel');
+    $default_end_override = FALSE;
   }
 
   $roles = _uc_roles_get_choices();
@@ -696,7 +704,7 @@ function uc_roles_feature_form($form_sta
       'rel' => t('Relative from activation time'),
       'abs' => t('Absolute role ending'),
     ),
-    '#default_value' => $end_time ? 'abs' : 'rel',
+    '#default_value' => $default_end_type,
   );
   $form['role_lifetime']['uc_roles_expire_relative_duration'] = array(
     '#type' => 'textfield',
@@ -725,11 +733,16 @@ function uc_roles_feature_form($form_sta
     '#description' => t('When this expiration period will end.'),
   );
   if ($end_time) {
-    $form['role_lifetime']['uc_roles_expire_absolute']['#default_value'] = array(
-      'month' => date('m', $end_time),
-      'day' => date('d', $end_time),
-      'year' => date('Y', $end_time),
-    );
+    if (!empty($feature)) {
+      $form['role_lifetime']['uc_roles_expire_absolute']['#default_value'] = array(
+        'month' => date('m', $end_time),
+        'day' => date('d', $end_time),
+        'year' => date('Y', $end_time),
+      );
+    }
+    else {
+      $form['role_lifetime']['uc_roles_expire_absolute']['#default_value'] = $end_time;
+    }
   }
   $form['role_lifetime']['uc_roles_by_quantity'] = array(
     '#type' => 'checkbox',
@@ -915,7 +928,7 @@ function uc_roles_feature_settings() {
       'rel' => t('Relative from activation time'),
       'abs' => t('Absolute role ending'),
     ),
-    '#default_value' => $end_time ? 'abs' : 'rel',
+    '#default_value' => variable_get('uc_roles_default_end_expiration', 'rel'),
   );
   $form['role_lifetime']['uc_roles_default_length'] = array(
     '#type' => 'textfield',
@@ -1300,7 +1313,11 @@ function _uc_roles_product_get_expiratio
     }
 
     // Absolute...
-    return variable_get('uc_roles_default_end_time', NULL);
+    $end_time = variable_get('uc_roles_default_end_time', NULL);
+    if ($end_time) {
+      $end_time = mktime(0, 0, 0, $end_time['month'], $end_time['day'], $end_time['year']);
+    }
+    return $end_time;
   }
 }
 
