diff --git a/payment/uc_payment/uc_payment.module b/payment/uc_payment/uc_payment.module
index d9b2b9c..8234688 100644
--- a/payment/uc_payment/uc_payment.module
+++ b/payment/uc_payment/uc_payment.module
@@ -74,7 +74,7 @@ function uc_payment_form_uc_cart_view_form_alter(&$form, FormStateInterface $for
   foreach ($definitions as $key => $definition) {
     if (!empty($definition['express'])) {
       $express = \Drupal::formBuilder()->getForm($definition['express']);
-      $form['actions']['checkout'][] = \Drupal::service('renderer')->renderPlain($express);
+//      $form['actions']['checkout'][] = \Drupal::service('renderer')->renderPlain($express);
     }
   }
 }
@@ -87,11 +87,13 @@ function uc_payment_form_uc_cart_view_form_alter(&$form, FormStateInterface $for
  */
 function uc_payment_form_uc_cart_checkout_review_form_alter(&$form, FormStateInterface $form_state) {
   $order = $form_state->get('uc_order');
-  $definition = \Drupal::service('plugin.manager.uc_payment.method')->createFromOrder($order)->getPluginDefinition();
+  /** @var \Drupal\uc_payment\PaymentMethodPluginInterface $plugin */
+  $plugin = \Drupal::service('plugin.manager.uc_payment.method')->createFromOrder($order);
+  $definition = $plugin->getPluginDefinition();
 
   if (!empty($definition['redirect'])) {
     unset($form['actions']['submit']);
-    $suffix = \Drupal::formBuilder()->getForm($definition['redirect'], $order);
+    $suffix = \Drupal::formBuilder()->getForm($definition['redirect'], $order, $plugin);
     $form['#suffix'] = \Drupal::service('renderer')->renderPlain($suffix);
   }
 }
diff --git a/payment/uc_paypal/config/schema/uc_paypal.schema.yml b/payment/uc_paypal/config/schema/uc_paypal.schema.yml
index ef57b2d..d63c3d7 100644
--- a/payment/uc_paypal/config/schema/uc_paypal.schema.yml
+++ b/payment/uc_paypal/config/schema/uc_paypal.schema.yml
@@ -140,7 +140,7 @@ payment_method.settings.paypal_wps:
       type: string
       label: 'Submit method'
     wps_no_shipping:
-      type: boolean
+      type: string
       label: 'Shipping not included flag'
     wps_address_override:
       type: boolean
diff --git a/payment/uc_paypal/src/Controller/PayPalController.php b/payment/uc_paypal/src/Controller/PayPalController.php
index 64daa9c..2b66179 100644
--- a/payment/uc_paypal/src/Controller/PayPalController.php
+++ b/payment/uc_paypal/src/Controller/PayPalController.php
@@ -10,6 +10,7 @@ namespace Drupal\uc_paypal\Controller;
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Link;
+use Drupal\uc_order\Entity\Order;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 
@@ -19,7 +20,7 @@ use Symfony\Component\HttpFoundation\Response;
 class PayPalController extends ControllerBase {
 
   /**
-   * Processes Instant Payment Notifiations from PayPal.
+   * Processes Instant Payment Notifications from PayPal.
    *
    * @param \Symfony\Component\HttpFoundation\Request $request
    *   The request of the page.
diff --git a/payment/uc_paypal/src/Controller/WpsController.php b/payment/uc_paypal/src/Controller/WpsController.php
index 884651b..9b50acd 100644
--- a/payment/uc_paypal/src/Controller/WpsController.php
+++ b/payment/uc_paypal/src/Controller/WpsController.php
@@ -9,6 +9,7 @@ namespace Drupal\uc_paypal\Controller;
 
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\uc_order\OrderInterface;
+use Drupal\uc_paypal\Plugin\Ubercart\PaymentMethod\PayPalWebsitePaymentsStandard;
 
 /**
  * Returns responses for PayPal routes.
@@ -21,32 +22,28 @@ class WpsController extends ControllerBase {
    * @return \Symfony\Component\HttpFoundation\RedirectResponse
    *   A redirect to the cart or checkout complete page.
    */
-  public function wpsComplete(OrderInterface $order) {
+  public function wpsComplete(OrderInterface $uc_order) {
     // If the order ID specified in the return URL is not the same as the one in
     // the user's session, we need to assume this is either a spoof or that the
     // user tried to adjust the order on this side while at PayPal. If it was a
     // legitimate checkout, the IPN will still come in from PayPal so the order
     // gets processed correctly. We'll leave an ambiguous message just in case.
     $session = \Drupal::service('session');
-    if (!$session->has('cart_order') || intval($session->get('cart_order')) != $order->id()) {
+    if (!$session->has('cart_order') || intval($session->get('cart_order')) != $uc_order->id()) {
       drupal_set_message($this->t('Thank you for your order! PayPal will notify us once your payment has been processed.'));
-      $this->redirect('uc_cart.cart');
+      return $this->redirect('uc_cart.cart');
     }
 
     // Ensure the payment method is PayPal WPS.
-    if ($order->getPaymentMethodId() != 'paypal_wps') {
-      $this->redirect('uc_cart.cart');
+    $method = \Drupal::service('plugin.manager.uc_payment.method')->createFromOrder($uc_order);
+    if (!$method instanceof PayPalWebsitePaymentsStandard) {
+      return $this->redirect('uc_cart.cart');
     }
 
-    $complete = array();
-    if ($session->has('uc_checkout')) {
-      $complete = $session->get('uc_checkout');
-    }
     // This lets us know it's a legitimate access of the complete page.
-    $complete[$session->get('cart_order')]['do_complete'] = TRUE;
-    $session->set('uc_checkout', $complete);
+    $_SESSION['uc_checkout'][$uc_order->id()]['do_complete'] = TRUE;
 
-    $this->redirect('uc_cart.checkout_complete');
+    return $this->redirect('uc_cart.checkout_complete');
   }
 
   /**
diff --git a/payment/uc_paypal/src/Form/WpsForm.php b/payment/uc_paypal/src/Form/WpsForm.php
index d321e1c..b12775d 100644
--- a/payment/uc_paypal/src/Form/WpsForm.php
+++ b/payment/uc_paypal/src/Form/WpsForm.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\uc_2checkout\Form\WpsForm.
+ * Contains \Drupal\uc_paypal\Form\WpsForm.
  */
 
 namespace Drupal\uc_paypal\Form;
@@ -11,6 +11,7 @@ use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\uc_order\OrderInterface;
+use Drupal\uc_payment\PaymentMethodPluginInterface;
 
 /**
  * Form to build the submission to PayPal.
@@ -27,8 +28,8 @@ class WpsForm extends FormBase {
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state, OrderInterface $order = NULL) {
-    $paypal_config = $this->config('uc_paypal.settings');
+  public function buildForm(array $form, FormStateInterface $form_state, OrderInterface $order = NULL, PaymentMethodPluginInterface $plugin = NULL) {
+    $configuration = $plugin->getConfiguration();
 
     $shipping = 0;
     foreach ($order->line_items as $item) {
@@ -44,13 +45,13 @@ class WpsForm extends FormBase {
       }
     }
 
-    $address = $paypal_config->get('wps_address_selection');
+    $address = $order->getAddress($configuration['wps_address_selection']);
 
-    $country = $order->{$address . '_country'};
+    $country = $address->country;
     $phone = '';
-    for ($i = 0; $i < strlen($order->{$address . '_phone'}); $i++) {
-      if (is_numeric($order->{$address . '_phone'}[$i])) {
-        $phone .= $order->{$address . '_phone'}[$i];
+    for ($i = 0; $i < strlen($address->phone); $i++) {
+      if (is_numeric($address->phone[$i])) {
+        $phone .= $address->phone[$i];
       }
     }
 
@@ -86,47 +87,47 @@ class WpsForm extends FormBase {
       // Display information.
       'cancel_return' => Url::fromRoute('uc_paypal.wps_cancel', [], ['absolute' => TRUE])->toString(),
       'no_note' => 1,
-      'no_shipping' => $paypal_config->get('wps_no_shipping'),
+      'no_shipping' => $configuration['wps_no_shipping'],
       'return' => Url::fromRoute('uc_paypal.wps_complete', ['uc_order' => $order->id()], ['absolute' => TRUE])->toString(),
       'rm' => 1,
 
       // Transaction information.
-      'currency_code' => $paypal_config->get('wps_currency'),
+      'currency_code' => $configuration['wps_currency'],
       'handling_cart' => uc_currency_format($shipping, FALSE, FALSE, '.'),
-      'invoice' => $order->id() . '-' . uc_cart_get_id(),
+      'invoice' => $order->id() . '-' .  \Drupal::service('uc_cart.manager')->get()->getId(),
       'tax_cart' => uc_currency_format($tax, FALSE, FALSE, '.'),
 
       // Shopping cart specific variables.
-      'business' => trim($paypal_config->get('wps_email')),
+      'business' => trim($configuration['wps_email']),
       'upload' => 1,
 
-      'lc' => $paypal_config->get('wps_language'),
+      'lc' => $configuration['wps_language'],
 
       // Prepopulating forms/address overriding.
-      'address1' => substr($order->{$address . '_street1'}, 0, 100),
-      'address2' => substr($order->{$address . '_street2'}, 0, 100),
-      'city' => substr($order->{$address . '_city'}, 0, 40),
+      'address1' => substr($address->street1, 0, 100),
+      'address2' => substr($address->street2, 0, 100),
+      'city' => substr($address->city, 0, 40),
       'country' => $country,
       'email' => $order->getEmail(),
-      'first_name' => substr($order->{$address . '_first_name'}, 0, 32),
-      'last_name' => substr($order->{$address . '_last_name'}, 0, 64),
-      'state' => $order->{$address . '_zone'},
-      'zip' => $order->{$address . '_postal_code'},
+      'first_name' => substr($address->first_name, 0, 32),
+      'last_name' => substr($address->last_name, 0, 64),
+      'state' => $address->zone,
+      'zip' => $address->postal_code,
       'night_phone_a' => $phone_a,
       'night_phone_b' => $phone_b,
       'night_phone_c' => $phone_c,
     );
 
-    if ($paypal_config->get('wps_address_override')) {
+    if ($configuration['wps_address_override']) {
       $data['address_override'] = 1;
     }
 
     // Account for stores that just want to authorize funds instead of capture.
-    if ($paypal_config->get('wps_payment_action') == 'Authorization') {
+    if ($configuration['wps_payment_action'] == 'Authorization') {
       $data['paymentaction'] = 'authorization';
     }
 
-    if ($paypal_config->get('wps_submit_method') == 'itemized') {
+    if ($configuration['wps_submit_method'] == 'itemized') {
       // List individual items.
       $i = 0;
       foreach ($order->products as $item) {
@@ -170,7 +171,7 @@ class WpsForm extends FormBase {
       $data['os0_1'] = count($order->products);
     }
 
-    $form['#action'] = $paypal_config->get('wps_server');
+    $form['#action'] = $configuration['wps_server'];
 
     foreach ($data as $name => $value) {
       if (!empty($value)) {
@@ -184,6 +185,8 @@ class WpsForm extends FormBase {
       '#value' => $this->t('Submit order'),
     );
 
+    $form_state->disableCache();
+
     return $form;
   }
 
@@ -191,7 +194,6 @@ class WpsForm extends FormBase {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    parent::submitForm($form, $form_state);
   }
 
 }
