diff --git a/uc_optional_checkout_review.module b/uc_optional_checkout_review.module
index 3e71f4a..5953f1a 100644
--- a/uc_optional_checkout_review.module
+++ b/uc_optional_checkout_review.module
@@ -25,17 +25,34 @@ function uc_optional_checkout_review_form_submit($form, &$form_state) {
     uc_cart_checkout_review();
 
     $order = uc_order_load($_SESSION['cart_order']);
-    if ($order->payment_method == 'paypal_wps') {
-      $wps_form = drupal_retrieve_form('uc_paypal_wps_form', $form_state, $order);
-      drupal_prepare_form('uc_paypal_wps_form', $wps_form, $form_state, $order);
-      $wps_url = $wps_form['#action'] . '?';
+    // generic payment method redirect form
+    $form_id = 'uc_'.$order->payment_method.'_form';
+    if (function_exists($form_id)) {
+      $payment_form = drupal_retrieve_form($form_id, $form_state, $order);
+      //watchdog('uc_cart', '@form', array('@form' => serialize($payment_form)), WATCHDOG_ERROR);
+      drupal_prepare_form('uc_'.$order->payment_method.'_form', $payment_form, $form_state, $order);
 
-      foreach (element_children($wps_form) as $key) {
-        $wps_url .= urlencode($key) . '=' . urlencode($wps_form[$key]['#value']) . '&';
+      $payment_url = $payment_form['#action'];
+      //watchdog('uc_cart', '@url', array('@url' => $payment_url), WATCHDOG_ERROR);
+      
+      // rebuild the form data
+      $data = array();
+      foreach($payment_form as $name => $value) {
+        //watchdog('uc_cart', '@name', array('@name' => $name), WATCHDOG_ERROR);
+        if((strpos($name, '#') === false) && ($name != 'form_token') && ($name != 'form_id') && ($name != 'submit')) {
+          if(is_array($value)) {
+            $data[] = $name.'='.urlencode($value['#value']);
+          }
+          else {
+            $data[] = $name.'='.urlencode($value);
+          }
+        }
       }
+      $payment_data = implode('&', $data);
+      //watchdog('uc_cart', '@data', array('@data' => $payment_data), WATCHDOG_ERROR);
 
-      $wps_url = trim($wps_url, '&');
-      drupal_goto($wps_url);
+      drupal_goto($payment_url.'?'.$payment_data);
+      //drupal_http_request($payment_url, array(), 'POST', $payment_data);
     }
     else {
       // Now submit the form.  Obviously the $form_state isn't actually
