Index: payment/uc_payment/uc_payment.ca.inc
===================================================================
--- payment/uc_payment/uc_payment.ca.inc	(revision 4894)
+++ payment/uc_payment/uc_payment.ca.inc	(working copy)
@@ -21,7 +21,7 @@ function uc_payment_ca_predicate() {
   // Set the order status to "Payment Received" when a payment is received
   // and the balance is less than or equal to 0.
   $predicates['uc_payment_received'] = array(
-    '#title' => t('Update order status on full payment'),
+    '#title' => t('Update order status on full payment before checkout'),
     '#description' => t('Only happens when a payment is entered and the balance is <= $0.00.'),
     '#class' => 'payment',
     '#trigger' => 'uc_payment_entered',
@@ -51,6 +51,28 @@ function uc_payment_ca_predicate() {
             'order_status' => 'payment_received',
           ),
         ),
+        array(
+          '#name' => 'uc_order_status_condition',
+          '#title' => t('And if the order status is not Pending.'),
+          '#argument_map' => array(
+            'order' => 'order',
+          ),
+          '#settings' => array(
+            'negate' => TRUE,
+            'order_status' => 'pending',
+          ),
+        ),
+        array(
+          '#name' => 'uc_order_status_condition',
+          '#title' => t('And if the order status is not Processing.'),
+          '#argument_map' => array(
+            'order' => 'order',
+          ),
+          '#settings' => array(
+            'negate' => TRUE,
+            'order_status' => 'processing',
+          ),
+        ),
       ),
     ),
     '#actions' => array(
@@ -65,6 +87,69 @@ function uc_payment_ca_predicate() {
         ),
       ),
     ),
+  );
+
+  // Set the order status to "Payment Received" when a payment is received
+  // and the balance is less than or equal to 0.
+  $predicates['uc_payment_received_after_checkout'] = array(
+    '#title' => t('Update order status on full payment after checkout'),
+    '#description' => t('Only happens when a payment is entered after checkout and the balance is <= $0.00.'),
+    '#class' => 'payment',
+    '#trigger' => 'uc_payment_entered',
+    '#status' => 1,
+    '#conditions' => array(
+      '#operator' => 'AND',
+      '#conditions' => array(
+        array(
+          '#name' => 'uc_payment_condition_order_balance',
+          '#title' => t('If the balance is less than or equal to $0.00.'),
+          '#argument_map' => array(
+            'order' => 'order',
+          ),
+          '#settings' => array(
+            'negate' => FALSE,
+            'balance_comparison' => 'less_equal',
+          ),
+        ),
+        array(
+          '#operator' => 'OR',
+          '#conditions' => array(
+            array(
+              '#name' => 'uc_order_status_condition',
+              '#title' => t('If the order status is Pending.'),
+              '#argument_map' => array(
+                'order' => 'order',
+              ),
+              '#settings' => array(
+                'order_status' => 'pending',
+              ),
+            ),
+            array(
+              '#name' => 'uc_order_status_condition',
+              '#title' => t('Or if the order status is Processing.'),
+              '#argument_map' => array(
+                'order' => 'order',
+              ),
+              '#settings' => array(
+                'order_status' => 'processing',
+              ),
+            ),
+          ),
+        ),
+      ),
+    ),
+    '#actions' => array(
+      array(
+        '#name' => 'uc_order_update_status',
+        '#title' => t('Update the order status to Completed.'),
+        '#argument_map' => array(
+          'order' => 'order',
+        ),
+        '#settings' => array(
+          'order_status' => 'completed',
+        ),
+      ),
+    ),
   );
 
   // Set the order status to "Completed" when checkout is complete, none
Index: payment/uc_paypal/uc_paypal.pages.inc
===================================================================
--- payment/uc_paypal/uc_paypal.pages.inc	(revision 4894)
+++ payment/uc_paypal/uc_paypal.pages.inc	(working copy)
@@ -104,7 +104,6 @@ function uc_paypal_ipn($order_id = 0) {
         }
         $comment = t('PayPal transaction ID: @txn_id', array('@txn_id' => $txn_id));
         uc_payment_enter($order_id, 'paypal_wps', $payment_amount, $order->uid, NULL, $comment);
-        uc_cart_complete_sale($order);
         uc_order_comment_save($order_id, 0, t('Payment of @amount @currency submitted through PayPal.', array('@amount' => uc_price($payment_amount, $context, $options), '@currency' => $payment_currency)), 'order', 'payment_received');
         uc_order_comment_save($order_id, 0, t('PayPal IPN reported a payment of @amount @currency.', array('@amount' => uc_price($payment_amount, $context, $options), '@currency' => $payment_currency)));
         break;
