diff -urp uc_recurring/uc_recurring.module uc_recurring_retry/uc_recurring.module
--- uc_recurring/uc_recurring.module	2011-02-24 18:10:46.000000000 -0800
+++ uc_recurring_retry/uc_recurring.module	2011-02-25 23:51:29.818662000 -0800
@@ -400,7 +400,22 @@ function uc_recurring_uc_message() {
  *   The new order ID or FALSE if unable to renew fee.
  */
 function uc_recurring_renew($fee) {
-  $order = uc_recurring_create_renewal_order($fee);
+  if ($fee->attempts==0) {
+    // create a new order for the renewal
+    $order = uc_recurring_create_renewal_order($fee);
+  } else {
+    // renewal order already created on first charge attempt
+    $order = FALSE;
+    if (isset($fee->data['retry_order_id']) && is_numeric($fee->data['retry_order_id'])) {
+      $order = uc_order_load($fee->data['retry_order_id']);
+    }
+    if ($order==FALSE) {
+      // could not find the last renewal order so create a new one
+      $order = uc_recurring_create_renewal_order($fee);
+    }
+  }
 
   if (uc_recurring_charge_profile($fee, $order) !== FALSE) {
     $order = uc_order_load($order->order_id);
@@ -416,6 +431,13 @@ function uc_recurring_renew($fee) {
     $recurring_order->original_order_id = $fee->order_id;
     $recurring_order->renewal_order_id = $order->order_id;
     drupal_write_record('uc_recurring_orders', $recurring_order);
+    
+    if (isset($fee->data['retry_order_id'])) {
+      unset($fee->data['retry_order_id']);
+    }
+    
     // Save the fee object.
     uc_recurring_fee_user_save($fee);
 
@@ -438,6 +460,16 @@ function uc_recurring_renew($fee) {
     ca_pull_trigger('uc_recurring_renewal_failed', $order, $fee);
 
     uc_order_comment_save($fee->order_id, $user->uid, t('New recurring fee failed on order <a href="@store-orders">@order_id</a>.', array('@store-orders' => url('admin/store/orders/'. $order->order_id), '@order_id' => $order->order_id)));
+    
+    // check if there will be a retry
+    $extension = uc_recurring_get_extension($fee->pfid, $fee->attempts);
+    if ($extension) {
+      $fee->data['retry_order_id'] = $order->order_id;
+      uc_recurring_fee_user_save($fee);
+    }
+    
   }
   return FALSE;
 }
