--- a/payment_commerce.module
+++ b/payment_commerce.module
@@ -155,7 +155,6 @@
  * Implements Payment::finish_callback.
  */
 function payment_commerce_payment_finish(Payment $payment) {
-  payment_commerce_redirect_pane($payment);
   $order = commerce_order_load($payment->context_data['order_id']);
   if (payment_status_is_or_has_ancestor($payment->getStatus()->status, PAYMENT_STATUS_FAILED)) {
     $view = '';
@@ -409,10 +409,16 @@
   $pids = payment_commerce_pids_load($payment->context_data['order_id']);
   if (is_array($pids) && $payment->pid == reset($pids)) {
     $order = commerce_order_load($payment->context_data['order_id']);
-    if (payment_status_is_or_has_ancestor($payment->getStatus()->status, PAYMENT_STATUS_FAILED)) {
-      commerce_payment_redirect_pane_previous_page($order);
+    $controller = $payment->method->controller;
+    $payment_status = $payment->getStatus()->status;
+    if (!($controller instanceof PaymentMethodBasicController) && !payment_status_is_or_has_ancestor($payment_status, PAYMENT_STATUS_NEW) && !payment_status_is_or_has_ancestor($payment_status, PAYMENT_STATUS_SUCCESS)) {
+      commerce_order_status_update($order, 'checkout_checkout');
     }
     else {
+      if (payment_status_is_or_has_ancestor($payment_status, PAYMENT_STATUS_SUCCESS)) {
+        commerce_order_status_update($order, 'checkout_payment');
+      }
+
       commerce_payment_redirect_pane_next_page($order);
     }
   }
