diff --git uc_free_order.js uc_free_order.js
index 0cbb294..a322d77 100644
--- uc_free_order.js
+++ uc_free_order.js
@@ -1,11 +1,18 @@
 
 var free_order_initialized = false;
 var using_free_order = false;
+var last_non_free_method_selected = null;
 
 // Adds a click function to the total so we can check its updated values.
 $(document).ready(
   function() {
-    $('#edit-panes-payment-current-total').click(function() { free_order_check_total(this.value); });
+    $('#edit-panes-payment-current-total').click(function() { 
+        if (!last_non_free_method_selected) {
+          // Set the initial default value
+          last_non_free_method_selected = $(':radio[name="panes[payment][payment_method]"]:enabled:checked').val();
+        }
+        free_order_check_total(this.value);
+    });
   }
 );
 
@@ -24,18 +31,18 @@ function free_order_check_total(total) {
     // Hide the free order radio.
     $("input:radio[value=free_order]").attr('disabled', 'disabled').parent().hide(0);
 
-    // Find the first available payment method.
-    var uc_free_order_next_method = $(':radio[name="panes[payment][payment_method]"]:enabled:first').val();
-
-    // Select the first payment method.
-    $("input:radio[value=" + uc_free_order_next_method + "]").attr('checked', 'checked');
+    // Select the previously selected payment method.
+    $("input:radio[value=" + last_non_free_method_selected + "]").attr('checked', 'checked');
 
     // Refresh the payment details section.
-    get_payment_details(Drupal.settings.ucURL.checkoutPaymentDetails + uc_free_order_next_method);
+    get_payment_details(Drupal.settings.ucURL.checkoutPaymentDetails + last_non_free_method_selected);
 
     using_free_order = false;
   }
   else if (total < .005 && using_free_order != true) {
+    // Remember their last selection
+    last_non_free_method_selected = $(':radio[name="panes[payment][payment_method]"]:enabled:checked').val();
+
     // Hide the fallback payment method radio.
     $("#payment-pane .form-radios input:radio").attr('disabled', 'disabled').parent().hide(0);
 
