diff --git a/commerce_pos.routing.yml b/commerce_pos.routing.yml
index e620630..efad0a4 100644
--- a/commerce_pos.routing.yml
+++ b/commerce_pos.routing.yml
@@ -32,10 +32,15 @@ commerce_pos.base:
     _permission: 'access commerce pos pages'
 
 commerce_pos.main:
-  path: '/admin/commerce/pos/main'
+  path: '/admin/commerce/pos/main/{commerce_order}'
   defaults:
     _controller: '\Drupal\commerce_pos\POS::content'
     _title: 'Point of Sale Interface'
+    commerce_order: null
+  options:
+    parameters:
+      commerce_order:
+        type: 'entity:commerce_order'
   requirements:
     _permission: 'access commerce pos pages'
 
@@ -89,15 +94,3 @@ commerce_pos.close_register:
     _title: 'Point of Sale Close Register'
   requirements:
     _permission: 'access commerce pos pages'
-
-commerce_pos.edit:
-  path: '/admin/commerce/pos/order/{commerce_order}/edit'
-  defaults:
-    _controller: '\Drupal\commerce_pos\POS::content'
-    _title: 'Point of Sale Edit Order'
-  options:
-    parameters:
-      commerce_order:
-        type: 'entity:commerce_order'
-  requirements:
-    _permission: 'access commerce pos pages'
diff --git a/commerce_pos.services.yml b/commerce_pos.services.yml
index 0938846..3cfecdc 100755
--- a/commerce_pos.services.yml
+++ b/commerce_pos.services.yml
@@ -10,10 +10,6 @@ services:
     class: Drupal\commerce_pos\UPC
     arguments: ['@entity_type.manager']
 
-  commerce_pos.current_order:
-    class: Drupal\commerce_pos\CurrentOrder
-    arguments: ['@user.private_tempstore']
-
   commerce_pos.current_register:
     class: Drupal\commerce_pos\CurrentRegister
 
diff --git a/src/Controller/ParkedOrders.php b/src/Controller/ParkedOrders.php
index 94bebc3..02a49b9 100644
--- a/src/Controller/ParkedOrders.php
+++ b/src/Controller/ParkedOrders.php
@@ -35,10 +35,7 @@ class ParkedOrders extends OrderLookup {
     $commerce_order->set('state', 'draft');
     $commerce_order->save();
 
-    \Drupal::service('commerce_pos.current_order')->clear();
-    \Drupal::service('commerce_pos.current_order')->set($commerce_order);
-
-    $pos_url = Url::fromRoute('commerce_pos.main');
+    $pos_url = Url::fromRoute('commerce_pos.main', ['commerce_order' => $commerce_order->id()]);
 
     $response = new RedirectResponse($pos_url->toString());
     $response->send();
diff --git a/src/CurrentOrder.php b/src/CurrentOrder.php
deleted file mode 100644
index e1cc750..0000000
--- a/src/CurrentOrder.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-namespace Drupal\commerce_pos;
-
-use Drupal\commerce_order\Entity\Order;
-use Drupal\user\PrivateTempStoreFactory;
-
-/**
- * Get the current order for the POS.
- */
-class CurrentOrder {
-
-  /**
-   * The tempstore object.
-   *
-   * @var \Drupal\user\SharedTempStore
-   */
-  protected $tempStore;
-
-  /**
-   * Constructs a new CurrentOrder object.
-   *
-   * @param \Drupal\user\PrivateTempStoreFactory $temp_store_factory
-   *   The tempstore factory.
-   */
-  public function __construct(PrivateTempStoreFactory $temp_store_factory) {
-    $this->tempStore = $temp_store_factory->get('commerce_pos');
-  }
-
-  /**
-   * Takes a provided order and sets its ID as the current one.
-   *
-   * @param \Drupal\commerce_order\Entity\Order $order
-   *   The order object you wish to save the ID from.
-   */
-  public function set(Order $order) {
-    $this->tempStore->set('order', $order->id());
-  }
-
-  /**
-   * Clear out the current order, like if we want to switch registers.
-   */
-  public function clear() {
-    $this->tempStore->delete('order');
-  }
-
-  /**
-   * Gets the active order_id stored in the session and loads it.
-   *
-   * @return \Drupal\commerce_order\Entity\Order|null
-   *   An entity object. NULL if no matching entity is found.
-   */
-  public function get() {
-    $order_id = $this->tempStore->get('order');
-
-    return $order_id ? Order::load($order_id) : NULL;
-  }
-
-}
diff --git a/src/Form/OrderLookupForm.php b/src/Form/OrderLookupForm.php
index 689f7fb..df4296c 100644
--- a/src/Form/OrderLookupForm.php
+++ b/src/Form/OrderLookupForm.php
@@ -217,7 +217,7 @@ class OrderLookupForm extends FormBase {
           'target' => '_blank',
         ],
       ]);
-      $edit_url = Url::fromRoute('commerce_pos.edit', ['commerce_order' => $order->id()]);
+      $edit_url = Url::fromRoute('commerce_pos.main', ['commerce_order' => $order->id()]);
 
       $cashier = User::load($order->get('field_cashier')->getValue()[0]['target_id']);
 
diff --git a/src/Form/POSForm.php b/src/Form/POSForm.php
index e73d8c1..e5f8118 100644
--- a/src/Form/POSForm.php
+++ b/src/Form/POSForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\commerce_pos\Form;
 
+use Drupal\commerce_order\Entity\Order;
 use Drupal\commerce_price\Price;
 use Drupal\commerce_store\CurrentStore;
 use Drupal\Component\Datetime\TimeInterface;
@@ -11,6 +12,7 @@ use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\commerce_price\Entity\Currency;
+use Drupal\user\Entity\User;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -52,8 +54,7 @@ class POSForm extends ContentEntityForm {
       $container->get('entity.manager'),
       $container->get('entity_type.bundle.info'),
       $container->get('datetime.time'),
-      $container->get('commerce_store.current_store'),
-      $container->get('commerce_pos.current_order')
+      $container->get('commerce_store.current_store')
     );
   }
 
@@ -555,7 +556,7 @@ class POSForm extends ContentEntityForm {
     $order->getState()->applyTransition($transition);
     $order->save();
 
-    $this->clearOrder();
+    $this->clearOrder($form_state);
   }
 
   /**
@@ -761,8 +762,18 @@ class POSForm extends ContentEntityForm {
   /**
    * Clear the existing order, so a new one can be created.
    */
-  protected function clearOrder() {
-    \Drupal::service('commerce_pos.current_order')->clear();
+  protected function clearOrder(FormStateInterface $form_state) {
+    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
+    $order = $this->entity;
+    // Create a new order.
+    $order = Order::create([
+      'type' => 'pos',
+      'store_id' => $order->getStoreId(),
+      'uid' => User::getAnonymousUser()->id(),
+      'field_cashier' => $order->field_cashier->value,
+      'field_register' => $order->field_register->value,
+    ]);
+    $form_state->getFormObject()->setEntity($order);
   }
 
   /**
@@ -775,7 +786,7 @@ class POSForm extends ContentEntityForm {
     $order->set('state', 'parked')
       ->save();
 
-    $this->clearOrder();
+    $this->clearOrder($form_state);
 
     drupal_set_message($this->t('Order @order_id has been parked', ['@order_id' => $order->id()]));
   }
diff --git a/src/POS.php b/src/POS.php
index 1f144ce..c1ca6b8 100644
--- a/src/POS.php
+++ b/src/POS.php
@@ -29,13 +29,6 @@ class POS extends ControllerBase {
    */
   protected $tempStore;
 
-  /**
-   * The currentOrder object.
-   *
-   * @var \Drupal\commerce_pos\CurrentOrder
-   */
-  protected $currentOrder;
-
   /**
    * Constructs a new POS object.
    *
@@ -43,13 +36,10 @@ class POS extends ControllerBase {
    *   The service container.
    * @param \Drupal\user\PrivateTempStoreFactory $temp_store_factory
    *   The tempstore factory.
-   * @param \Drupal\commerce_pos\CurrentOrder $current_order
-   *   The current order service.
    */
-  public function __construct(ContainerInterface $container, PrivateTempStoreFactory $temp_store_factory, CurrentOrder $current_order) {
+  public function __construct(ContainerInterface $container, PrivateTempStoreFactory $temp_store_factory) {
     $this->container = $container;
     $this->tempStore = $temp_store_factory->get('commerce_pos');
-    $this->currentOrder = $current_order;
   }
 
   /**
@@ -58,8 +48,7 @@ class POS extends ControllerBase {
   public static function create(ContainerInterface $container) {
     return new static(
       $container,
-      $container->get('user.private_tempstore'),
-      $container->get('commerce_pos.current_order')
+      $container->get('user.private_tempstore')
     );
   }
 
@@ -84,15 +73,10 @@ class POS extends ControllerBase {
     // If an order has been passed through, set that as the current order.
     if ($commerce_order) {
       $order = $commerce_order;
-      $this->currentOrder->set($commerce_order);
-    }
-    // If we don't have an order, try to load the current order.
-    else {
-      $order = $this->currentOrder->get();
     }
 
     // If we still don't have an order.
-    if (!$order) {
+    if (!isset($order)) {
       $order = Order::create([
         'type' => 'pos',
         'store_id' => $store_id,
@@ -100,10 +84,6 @@ class POS extends ControllerBase {
         'field_cashier' => \Drupal::currentUser()->id(),
         'field_register' => $register->id(),
       ]);
-
-      $order->save();
-
-      $this->currentOrder->set($order);
     }
 
     $form_object = POSForm::create($this->container);
diff --git a/src/Plugin/Field/FieldWidget/PosOrderItemWidget.php b/src/Plugin/Field/FieldWidget/PosOrderItemWidget.php
index 6958b28..32fa659 100644
--- a/src/Plugin/Field/FieldWidget/PosOrderItemWidget.php
+++ b/src/Plugin/Field/FieldWidget/PosOrderItemWidget.php
@@ -383,6 +383,8 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
       $order = $this->updateQuantity($items, $form, $form_state);
     }
     if ($order) {
+      \Drupal::service('commerce_order.order_refresh')->refresh($order);
+      $order->recalculateTotalPrice();
       // Update the order on the form.
       $form_object = $form_state->getFormObject();
       $form_object->setEntity($order);
@@ -414,7 +416,7 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     $new_quantity = $form_state->getValue($value_key);
 
     /** @var \Drupal\commerce_order\Entity\Order $order */
-    $order = $order_item->getOrder();
+    $order = $form_state->getFormObject()->getEntity();
     if ($new_quantity > 0) {
       $order_item->setQuantity($new_quantity);
       $order_item->save();
@@ -423,8 +425,6 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
       $order->removeItem($order_item);
       $order_item->delete();
     }
-    $order->recalculateTotalPrice()->save();
-
     return $order;
   }
 
@@ -446,11 +446,9 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     $order_item = OrderItem::load($trigger_element['#order_item_id']);
 
     /** @var \Drupal\commerce_order\Entity\Order $order */
-    $order = $order_item->getOrder();
+    $order = $form_state->getFormObject()->getEntity();
     $order->removeItem($order_item);
     $order_item->delete();
-    $order->recalculateTotalPrice()->save();
-
     return $order;
   }
 
@@ -474,7 +472,7 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     $order_item = OrderItem::load($trigger_element['#order_item_id']);
 
     /** @var \Drupal\commerce_order\Entity\Order $order */
-    $order = $order_item->getOrder();
+    $order = $form_state->getFormObject()->getEntity();
 
     // Loading the product variation object.
     $product_variation = ProductVariation::load($order_item->getPurchasedEntityId());
@@ -491,20 +489,15 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
       'title' => $product_variation->label(),
       'purchased_entity' => $product_variation,
       'quantity' => 1,
-      'unit_price' => [
-        'number' => '-' . $product_variation->get('price')->number,
-        'currency_code' => $order_item->getUnitPrice()->getCurrencyCode(),
-      ],
       'data' => [
         'return_for_order_item' => $order_item->id(),
       ],
     ]);
-    $new_order_item->save();
+    $price = new Price('-' . $product_variation->get('price')->number, $order_item->getUnitPrice()->getCurrencyCode());
+    $new_order_item->setUnitPrice($price, TRUE)->save();
 
     // Add the new item into the order.
-    $order->addItem($new_order_item)->recalculateTotalPrice()->save();
-    $items->appendItem($new_order_item);
-
+    $order->addItem($new_order_item);
     return $order;
   }
 
@@ -528,7 +521,7 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     $order_item = OrderItem::load($trigger_element['#order_item_id']);
 
     /** @var \Drupal\commerce_order\Entity\Order $order */
-    $order = $order_item->getOrder();
+    $order = $form_state->getFormObject()->getEntity();
 
     // Toggles the order item as a return item and change the unit price to a
     // negative price.
@@ -546,10 +539,6 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
         ->getNumber(), $order_item->getUnitPrice()->getCurrencyCode()), TRUE)
         ->save();
     }
-
-    // Recalculate the order total price and save.
-    $order->recalculateTotalPrice()->save();
-
     return $order;
   }
 
@@ -575,11 +564,11 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     $order_item = OrderItem::load($items->get($value_key[3])
       ->getValue()['target_id']);
     /** @var \Drupal\commerce_order\Entity\Order $order */
-    $order = $order_item->getOrder();
+    $order = $form_state->getFormObject()->getEntity();
 
-    $order_item->setUnitPrice(new Price($value['number'], $value['currency_code']), TRUE)
+    $order_item
+      ->setUnitPrice(new Price($value['number'], $value['currency_code']), TRUE)
       ->save();
-    $order->recalculateTotalPrice()->save();
 
     return $order;
   }
@@ -613,9 +602,8 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
     // If there is already an order item for this variation add to the quantity.
     $create_new_order_item = TRUE;
     // @todo For some reason the following doesn't work.
-    // $order = $form_state->getFormObject()->getEntity();
+    $order = $form_state->getFormObject()->getEntity();
     // $order = Order::load($order->id());
-    $order = \Drupal::getContainer()->get('commerce_pos.current_order')->get();
     /** @var \Drupal\commerce_order\Entity\OrderItem $order_item */
     foreach ($order->getItems() as $order_item) {
       if ($order_item->getPurchasedEntity()
@@ -625,8 +613,6 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
         $order_item
           ->setQuantity($order_item->getQuantity() + 1)
           ->save();
-        $order->recalculateTotalPrice();
-        $order->save();
         break;
       }
     }
@@ -642,8 +628,7 @@ class PosOrderItemWidget extends WidgetBase implements WidgetInterface, Containe
       $order_item->save();
 
       // Adding the item into the Order.
-      $order->addItem($order_item)->recalculateTotalPrice()->save();
-      $items->appendItem($order_item);
+      $order->addItem($order_item);
     }
 
     return $order;
diff --git a/tests/src/Functional/CurrentOrderTest.php b/tests/src/Functional/CurrentOrderTest.php
deleted file mode 100644
index 185e479..0000000
--- a/tests/src/Functional/CurrentOrderTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace Drupal\Tests\commerce_pos\Functional;
-
-use Drupal\Tests\commerce\Functional\CommerceBrowserTestBase;
-use Drupal\commerce_order\Entity\Order;
-
-/**
- * Tests the CurrentOrder get and set.
- *
- * @coversDefaultClass \Drupal\commerce_pos\CurrentOrder
- * @group commerce_pos
- */
-class CurrentOrderTest extends CommerceBrowserTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = [
-    'commerce_pos',
-  ];
-
-  /**
-   * Test an order can get set and retrieved correctly.
-   */
-  public function testSetGet() {
-    // Ensure that before an order is set the current order is null.
-    $this->assertNull($this->container->get('commerce_pos.current_order')->get());
-
-    $order = Order::create([
-      'type' => 'pos',
-    ]);
-
-    $order->save();
-
-    $this->container->get('commerce_pos.current_order')->set($order);
-
-    $retrieved_order = $this->container->get('commerce_pos.current_order')->get();
-
-    $this->assertEquals($order->id(), $retrieved_order->id());
-  }
-
-}
diff --git a/tests/src/FunctionalJavascript/ParkOrderTest.php b/tests/src/FunctionalJavascript/ParkOrderTest.php
index d99aa75..c8c6c7f 100644
--- a/tests/src/FunctionalJavascript/ParkOrderTest.php
+++ b/tests/src/FunctionalJavascript/ParkOrderTest.php
@@ -75,12 +75,13 @@ class ParkOrderTest extends JavascriptTestBase {
     $this->assertEquals('disabled', $button->getAttribute('disabled'));
 
     // Check whether an order cannot be retrieved if current order is not empty.
-    $autocomplete_field = $this->getSession()->getPage()->findField('order_items[target_id][product_selector]');
-    $autocomplete_field->setValue('Jum');
-    $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), 'p');
+    // Add a T-Shirt.
+    $autocomplete_field->setValue('T');
+    $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), '-');
     $web_assert->waitOnAutocomplete();
     $results = $this->getSession()->getPage()->findAll('css', '.ui-autocomplete li');
     $this->assertCount(3, $results);
+    // Click on of the auto-complete.
     $results[0]->click();
     $web_assert->assertWaitOnAjaxRequest();
 
@@ -100,9 +101,21 @@ class ParkOrderTest extends JavascriptTestBase {
     $retrieve_link_href = $retrieve_link->getAttribute('href');
     $retrieve_link->click();
 
+    $out = $this->getSession()->getPage()->getContent();
+    $html_output = 'GET request to: ' . $this->getSession()->getCurrentUrl();
+    $html_output .= '<hr />' . $out;
+    $html_output .= $this->getHtmlOutputHeaders();
+    $this->htmlOutput($html_output);
+
     // Confirm we are redirected back to the POS.
-    $url = Url::fromRoute('commerce_pos.main');
+    $url = Url::fromRoute('commerce_pos.main', ['commerce_order' => 1]);
     $this->assertEquals($this->getAbsoluteUrl($url->toString()), $this->getUrl());
+    // Assert that the product is listed as expected.
+    $web_assert->pageTextContains('Jumper');
+    $web_assert->fieldValueEquals('order_items[target_id][order_items][0][quantity]', '1.00');
+    $web_assert->fieldValueEquals('order_items[target_id][order_items][0][unit_price][number]', '50.00');
+    $web_assert->pageTextContains('Total $50.00');
+    $web_assert->pageTextContains('To Pay $50.00');
 
     // Now check if order 2 is still parked.
     $this->clickLink('Parked Orders');
@@ -116,11 +129,6 @@ class ParkOrderTest extends JavascriptTestBase {
     // Order 1 has indeed been set back to 'draft'.
     $order = Order::load(1);
     $this->assertEquals($order->getState()->value, 'draft');
-
-    // And confirm our current order is Order 1 again.
-    $order = \Drupal::service('commerce_pos.current_order')->get();
-    $this->assertEquals($order->id(), 1);
-
   }
 
   /**
diff --git a/tests/src/FunctionalJavascript/PosFormTest.php b/tests/src/FunctionalJavascript/PosFormTest.php
index 13c8821..42b27ff 100644
--- a/tests/src/FunctionalJavascript/PosFormTest.php
+++ b/tests/src/FunctionalJavascript/PosFormTest.php
@@ -229,7 +229,6 @@ class PosFormTest extends JavascriptTestBase {
     // Clicking finish will bring us back to the order item screen - processing
     // a new order.
     $this->click('input[name="commerce-pos-finish"]');
-    $this->waitForAjaxToFinish();
     $web_assert->pageTextContains('Total $0.00');
     $web_assert->pageTextNotContains('Cash');
     $web_assert->pageTextContains('To Pay $0.00');
diff --git a/tests/src/FunctionalJavascript/PosReturnFormTest.php b/tests/src/FunctionalJavascript/PosReturnFormTest.php
index 1e389ab..055118e 100644
--- a/tests/src/FunctionalJavascript/PosReturnFormTest.php
+++ b/tests/src/FunctionalJavascript/PosReturnFormTest.php
@@ -4,6 +4,7 @@ namespace Drupal\Tests\commerce_pos\FunctionalJavascript;
 
 use Drupal\commerce_tax\Entity\TaxType;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Url;
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 use Drupal\Tests\commerce_pos\Functional\CommercePosCreateStoreTrait;
 
@@ -116,7 +117,8 @@ class PosReturnFormTest extends JavascriptTestBase {
     // Click on our newly created order's edit button so we can do a return.
     $web_assert->pageTextContains('edit');
     $this->getSession()->getPage()->clickLink('edit');
-    $web_assert->addressEquals('admin/commerce/pos/order/1/edit');
+    $url = Url::fromRoute('commerce_pos.main', ['commerce_order' => 1]);
+    $web_assert->addressEquals($url->toString());
 
     // Ensure the totals are correct.
     $web_assert->pageTextContains('Total $100.00');
