diff --git a/payment/uc_paypal/uc_paypal.module b/payment/uc_paypal/uc_paypal.module
index 97ce264..e5e67ba 100644
--- a/payment/uc_paypal/uc_paypal.module
+++ b/payment/uc_paypal/uc_paypal.module
@@ -686,7 +686,8 @@ function uc_paypal_ec_form_submit($form, &$form_state) {
 
   list($desc, $subtotal) = _uc_paypal_product_details($items);
 
-  $order = uc_order_new($user->id());
+  $order = \Drupal\uc_order\Entity\Order::create(['uid' => $user->id()]);
+  $order->save();
 
   $nvp_request = array(
     'METHOD' => 'SetExpressCheckout',
diff --git a/uc_cart/src/Controller/Cart.php b/uc_cart/src/Controller/Cart.php
index 2da52bc..4055f60 100644
--- a/uc_cart/src/Controller/Cart.php
+++ b/uc_cart/src/Controller/Cart.php
@@ -42,9 +42,11 @@ class Cart extends ControllerBase implements CartInterface {
     // Empty that cart...
     $this->emptyCart();
 
-    // Ensure we have the latest order data.
-    // @todo Remove this once uc_payment_enter() can modify order objects.
-    $order->data = unserialize(db_query('SELECT data FROM {uc_orders} WHERE order_id = :order_id', [':order_id' => $order->id()])->fetchField());
+    // Force the order to load from the DB instead of the entity cache.
+    // @todo Remove this once uc_payment_enter() can modify order objects?
+    // @todo Should we be overwriting $order with this newly-loaded db_order?
+    $db_order = \Drupal::entityManager()->getStorage('uc_order')->loadUnchanged($order->id());
+    $order->data = $db_order->data;
 
     // Ensure that user creation and triggers are only run once.
     if (empty($order->data->complete_sale)) {
diff --git a/uc_cart/src/Controller/CheckoutController.php b/uc_cart/src/Controller/CheckoutController.php
index ddef740..b7d28c0 100644
--- a/uc_cart/src/Controller/CheckoutController.php
+++ b/uc_cart/src/Controller/CheckoutController.php
@@ -115,7 +115,10 @@ class CheckoutController extends ControllerBase implements ContainerInjectionInt
       $rebuild = FALSE;
       if (!isset($order)) {
         // Create a new order if necessary.
-        $order = uc_order_new($this->currentUser()->id());
+        $order = \Drupal\uc_order\Entity\Order::create(array(
+          'uid' => $this->currentUser()->id(),
+        ));
+        $order->save();
         $session->set('cart_order', $order->id());
         $rebuild = TRUE;
       }
diff --git a/uc_order/src/Entity/Order.php b/uc_order/src/Entity/Order.php
index af7bca1..e5ddc7b 100644
--- a/uc_order/src/Entity/Order.php
+++ b/uc_order/src/Entity/Order.php
@@ -75,7 +75,7 @@ class Order extends ContentEntityBase implements OrderInterface {
     parent::postLoad($storage, $orders);
 
     foreach ($orders as $id => $order) {
-      $order->products = entity_load_multiple_by_properties('uc_order_product', ['order_id' => $id]);
+      $order->products = \Drupal::entityManager()->getStorage('uc_order_product')->loadByProperties(['order_id' => $id]);
 
       // Load line items... has to be last after everything has been loaded.
       $order->line_items = $order->getLineItems();
diff --git a/uc_order/src/Form/OrderCreateForm.php b/uc_order/src/Form/OrderCreateForm.php
index ec59cb5..b78a557 100644
--- a/uc_order/src/Form/OrderCreateForm.php
+++ b/uc_order/src/Form/OrderCreateForm.php
@@ -260,7 +260,11 @@ class OrderCreateForm extends FormBase {
         $uid = 0;
     }
 
-    $order = uc_order_new($uid, 'post_checkout');
+    $order = \Drupal\uc_order\Entity\Order::create(array(
+      'uid' => $uid,
+      'order_status' => uc_order_state_default('post_checkout'),
+    ));
+    $order->save();
     uc_order_comment_save($order->id(), \Drupal::currentUser()->id(), t('Order created by the administration.'), 'admin');
 
     $form_state->setRedirect('entity.uc_order.edit_form', ['uc_order' => $order->id()]);
diff --git a/uc_order/src/Tests/OrderTest.php b/uc_order/src/Tests/OrderTest.php
index 4fc3632..f9b1e92 100644
--- a/uc_order/src/Tests/OrderTest.php
+++ b/uc_order/src/Tests/OrderTest.php
@@ -30,11 +30,16 @@ class OrderTest extends UbercartTestBase {
 
   public function testOrderAPI() {
     // Test defaults.
-    $order = uc_order_new();
+    $order = \Drupal\uc_order\Entity\Order::create();
+    $order->save();
     $this->assertEqual($order->getUserId(), 0, 'New order is anonymous.');
     $this->assertEqual($order->getStatusId(), 'in_checkout', 'New order is in checkout.');
 
-    $order = uc_order_new($this->customer->id(), 'completed');
+    $order = \Drupal\uc_order\Entity\Order::create(array(
+      'uid' => $this->customer->id(),
+      'order_status' => uc_order_state_default('completed'),
+    ));
+    $order->save();
     $this->assertEqual($order->getUserId(), $this->customer->id(), 'New order has correct uid.');
     $this->assertEqual($order->getStatusId(), 'completed', 'New order is marked completed.');
 
@@ -45,7 +50,7 @@ class OrderTest extends UbercartTestBase {
   }
 
   public function testOrderEntity() {
-    $order = \Drupal\uc_order\Entity\Order::create(array());
+    $order = \Drupal\uc_order\Entity\Order::create();
     $this->assertEqual($order->getUserId(), 0, 'New order is anonymous.');
     $this->assertEqual($order->getStatusId(), 'in_checkout', 'New order is in checkout.');
 
@@ -76,7 +81,8 @@ class OrderTest extends UbercartTestBase {
     \Drupal::service('module_installer')->install(array('entity_crud_hook_test'));
 
     $GLOBALS['entity_crud_hook_test'] = [];
-    $order = uc_order_new();
+    $order = \Drupal\uc_order\Entity\Order::create();
+    $order->save();
 
     $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type uc_order');
     $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type uc_order');
@@ -220,7 +226,10 @@ class OrderTest extends UbercartTestBase {
   }
 
   protected function ucCreateOrder($customer) {
-    $order = uc_order_new($customer->id());
+    $order = \Drupal\uc_order\Entity\Order::create(array(
+      'uid' => $customer->id(),
+    ));
+    $order->save();
     uc_order_comment_save($order->id(), 0, t('Order created programmatically.'), 'admin');
 
     $order_ids = \Drupal::entityQuery('uc_order')
diff --git a/uc_order/uc_order.module b/uc_order/uc_order.module
index 50681e6..0b1643a 100644
--- a/uc_order/uc_order.module
+++ b/uc_order/uc_order.module
@@ -504,7 +504,10 @@ function uc_order_product_revive($products, $published = TRUE) {
  *   A fully-populated order entity, or FALSE if the order is not found.
  */
 function uc_order_load($order_id, $reset = FALSE) {
-  return entity_load('uc_order', $order_id, $reset);
+  if ($reset) {
+    \Drupal::entityManager()->getStorage('uc_order')->resetCache([$order_id]);
+  }
+  return \Drupal\uc_order\Entity\Order::load($order_id);
 }
 
 /**
diff --git a/uc_product/src/Controller/ProductController.php b/uc_product/src/Controller/ProductController.php
index d7241f5..37f4ad7 100644
--- a/uc_product/src/Controller/ProductController.php
+++ b/uc_product/src/Controller/ProductController.php
@@ -21,7 +21,7 @@ class ProductController extends ControllerBase {
    * Displays a list of product classes.
    */
   public function classOverview() {
-    $classes = entity_load_multiple_by_properties('node_type', array(
+    $classes = \Drupal::entityManager()->getStorage('node_type')->loadByProperties(array(
       'third_party_settings.uc_product.product' => TRUE,
     ));
     $header = array($this->t('Class ID'), $this->t('Name'), $this->t('Description'), $this->t('Operations'));
