diff --git a/modules/ubercart/commerce_migrate_ubercart.info.yml b/modules/ubercart/commerce_migrate_ubercart.info.yml
index 61b8d04..b6b333a 100644
--- a/modules/ubercart/commerce_migrate_ubercart.info.yml
+++ b/modules/ubercart/commerce_migrate_ubercart.info.yml
@@ -8,4 +8,3 @@ dependencies:
   - drupal:migrate_drupal
   - profile:profile
   - commerce_migrate:commerce_migrate
-
diff --git a/modules/ubercart/migration_templates/d6_ubercart_order.yml b/modules/ubercart/migration_templates/d6_ubercart_order.yml
index 902c2f4..7bc7f59 100644
--- a/modules/ubercart/migration_templates/d6_ubercart_order.yml
+++ b/modules/ubercart/migration_templates/d6_ubercart_order.yml
@@ -39,8 +39,11 @@ process:
   created: created
   changed: modified
   placed: modified
+  adjustments:
+    plugin: d6_ubercart_line_item
+    source: adjustments
 destination:
-  plugin: 'entity:commerce_order'
+  plugin: entity:commerce_order
 migration_dependencies:
   required:
     - d6_ubercart_store
diff --git a/modules/ubercart/commerce_migrate_ubercart.info.yml b/modules/ubercart/modules/ubercart_shipping/commerce_migrate_ubercart_shipping.info.yml
similarity index 59%
copy from modules/ubercart/commerce_migrate_ubercart.info.yml
copy to modules/ubercart/modules/ubercart_shipping/commerce_migrate_ubercart_shipping.info.yml
index 61b8d04..8358fb2 100644
--- a/modules/ubercart/commerce_migrate_ubercart.info.yml
+++ b/modules/ubercart/modules/ubercart_shipping/commerce_migrate_ubercart_shipping.info.yml
@@ -1,4 +1,4 @@
-name: Commerce Migrate Ubercart
+name: Commerce Migrate Ubercart Shipping
 type: module
 description: Provides migrations for Ubercart.
 core: 8.x
@@ -8,4 +8,6 @@ dependencies:
   - drupal:migrate_drupal
   - profile:profile
   - commerce_migrate:commerce_migrate
-
+  - commerce_migrate:commerce_migrate_ubercart
+  - commerce_shipping:commerce_shipping
+  - physical:physical
diff --git a/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php b/modules/ubercart/modules/ubercart_shipping/tests/src/Kernel/Migrate/d6/OrderShippingTest.php
similarity index 54%
copy from modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php
copy to modules/ubercart/modules/ubercart_shipping/tests/src/Kernel/Migrate/d6/OrderShippingTest.php
index 0aaf552..ddee812 100644
--- a/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php
+++ b/modules/ubercart/modules/ubercart_shipping/tests/src/Kernel/Migrate/d6/OrderShippingTest.php
@@ -1,17 +1,19 @@
 <?php
 
-namespace Drupal\Tests\commerce_migrate_ubercart\Kernel\Migrate\d6;
+namespace Drupal\Tests\commerce_migrate_ubercart_shipping\Kernel\Migrate\d6;
 
+use Drupal\commerce_order\Adjustment;
+use Drupal\commerce_price\Price;
 use Drupal\commerce_order\Entity\Order;
 use Drupal\Tests\commerce_migrate\Kernel\CommerceMigrateTestTrait;
+use Drupal\Tests\commerce_migrate_ubercart\Kernel\Migrate\d6\Ubercart6TestBase;
 
 /**
  * Tests order migration.
  *
  * @group commerce_migrate
- * @group commerce_migrate_ubercart6
  */
-class OrderTest extends Ubercart6TestBase {
+class OrderShippingTest extends Ubercart6TestBase {
 
   use CommerceMigrateTestTrait;
 
@@ -23,6 +25,9 @@ class OrderTest extends Ubercart6TestBase {
   public static $modules = [
     'path',
     'commerce_product',
+    'commerce_migrate_ubercart',
+    'commerce_shipping',
+    'physical',
   ];
 
   /**
@@ -46,17 +51,41 @@ class OrderTest extends Ubercart6TestBase {
 
   /**
    * Test order migration from Drupal 6 to 8.
+   *
+   * @requires module commerce_shipping
+   * @requires module physical
    */
-  public function testOrder() {
+  public function testShippingOrder() {
     $this->assertOrder(1, '1', '1', '1492868907', '1493078815', 'fordprefect@example.com', 'validation', '10.1.1.2', '3', '1493078815');
     $this->assertOrder(2, '2', '1', '1492989920', '1493081092', 'trintragula@example.com', 'validation', '10.1.1.2', '5', '1493081092');
 
     /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
     $order = Order::load(1);
     $this->assertNotNull($order->getBillingProfile());
-    $this->assertNull($order->getData('cc_data'));  $order = Order::load(2);
+    $this->assertNull($order->getData('cc_data'));
+    $adjustments[] = new Adjustment([
+      'type' => 'shipping',
+      'label' => 'Shipping',
+      'amount' => new Price('2.99', 'NZD'),
+      'sourceId' => NULL,
+      'included' => FALSE,
+    ]);
+    $this->assertCount(1, $order->getAdjustments());
+    $this->assertEquals($adjustments, $order->getAdjustments());
+
+    $order = Order::load(2);
     $this->assertNotNull($order->getBillingProfile());
     $this->assertNull($order->getData('cc_data'));
+    $adjustments = [];
+    $adjustments[] = new Adjustment([
+      'type' => 'shipping',
+      'label' => 'Shipping',
+      'amount' => new Price('1000.00', 'NZD'),
+      'sourceId' => NULL,
+      'included' => FALSE,
+    ]);
+    $this->assertCount(1, $order->getAdjustments());
+    $this->assertEquals($adjustments, $order->getAdjustments());
   }
 
 }
diff --git a/modules/ubercart/src/Plugin/migrate/process/d6/UbercartLineItem.php b/modules/ubercart/src/Plugin/migrate/process/d6/UbercartLineItem.php
new file mode 100644
index 0000000..317cc1e
--- /dev/null
+++ b/modules/ubercart/src/Plugin/migrate/process/d6/UbercartLineItem.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Drupal\commerce_migrate_ubercart\Plugin\migrate\process\d6;
+
+use Drupal\commerce_order\Adjustment;
+use Drupal\commerce_price\Price;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * Transforms an array of data into an Commerce Adjustment.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "d6_ubercart_line_item",
+ *   handle_multiples = TRUE
+ * )
+ */
+class UbercartLineItem extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    if (is_array($value)) {
+      $adjustments = [];
+      $i = 0;
+      foreach ($value as $adjustment) {
+        $adjust = [];
+        $adjust['delta'] = $i++;
+        $adjust['type'] = $row->getSourceProperty('commerce_shipping') ? 'shipping' : 'custom';
+        $adjust['label'] = $adjustment['title'];
+        $adjust['amount'] =
+          [
+            'number' => $adjustment['amount'],
+            'currency_code' => $adjustment['currency_code'],
+          ];
+        $adjust['amount'] = new Price($adjust['amount']['number'], $adjust['amount']['currency_code']);
+        $adjustments[] = new Adjustment($adjust);
+      }
+      return $adjustments;
+    }
+    return $value;
+  }
+
+}
diff --git a/modules/ubercart/src/Plugin/migrate/source/d6/Order.php b/modules/ubercart/src/Plugin/migrate/source/d6/Order.php
index d3864af..6385d23 100644
--- a/modules/ubercart/src/Plugin/migrate/source/d6/Order.php
+++ b/modules/ubercart/src/Plugin/migrate/source/d6/Order.php
@@ -2,8 +2,13 @@
 
 namespace Drupal\commerce_migrate_ubercart\Plugin\migrate\source\d6;
 
-use Drupal\migrate\Plugin\migrate\source\SqlBase;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 use Drupal\migrate\Row;
+use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides migration source for orders.
@@ -13,14 +18,46 @@ use Drupal\migrate\Row;
  *   source_provider = "uc_order"
  * )
  */
-class Order extends SqlBase {
+class Order extends DrupalSqlBase {
+
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
+    $this->state = $state;
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('state'),
+      $container->get('entity.manager'),
+      $container->get('module_handler')
+    );
+  }
 
   /**
    * {@inheritdoc}
    */
   public function query() {
-    return $this->select('uc_orders', 'uo')
-      ->fields('uo', array_keys($this->fields()));
+    $query = $this->select('uc_orders', 'uo')
+      ->fields('uo');
+    return $query;
   }
 
   /**
@@ -45,20 +82,45 @@ class Order extends SqlBase {
    * {@inheritdoc}
    */
   public function prepareRow(Row $row) {
-
-    // The Migrate API automatically serializes arrays for storage in longblob
-    // fields so we unserialize them here.
     $data = unserialize($row->getSourceProperty('data'));
     // Ubercart 6 stores credit card information in a hash. Since this probably
     // isn't necessary so I removed it here.
     unset($data['cc_data']);
 
-    $row->setSourceProperty('data', serialize($data));
-
+    // The line item type depends on whether commerce_shipping is installed.
+    // Save the state here for the UbercartLineItem process plugin.
+    $row->setSourceProperty('commerce_shipping', $this->moduleHandler->moduleExists('commerce_shipping'));
+    $row->setSourceProperty('adjustments', $this->getAdjustmentData($row));
     return parent::prepareRow($row);
   }
 
   /**
+   * Retrieves adjustment data for an order.
+   *
+   * @param \Drupal\migrate\Row $row
+   *   The row.
+   *
+   * @return array
+   *   The field values, keyed by delta.
+   */
+  protected function getAdjustmentData(Row $row) {
+    $order_id = $row->getSourceProperty('order_id');
+    $query = $this->select('uc_order_line_items', 'uol')
+      ->fields('uol')
+      ->fields('uo', ['order_id'])
+      ->orderBy('weight', 'ASC')
+      ->condition('uol.order_id', $order_id);
+    $query->innerJoin('uc_orders', 'uo', 'uol.order_id = uo.order_id');
+    $adjustments = $query->execute()->fetchAll();
+
+    $currency_code = $this->variableGet('uc_currency_code', 'USD');
+    foreach ($adjustments as &$adjustment) {
+      $adjustment['currency_code'] = $currency_code;
+    }
+    return $adjustments;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getIds() {
diff --git a/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php b/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php
index 0aaf552..d6a0769 100644
--- a/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php
+++ b/modules/ubercart/tests/src/Kernel/Migrate/d6/OrderTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\commerce_migrate_ubercart\Kernel\Migrate\d6;
 
+use Drupal\commerce_order\Adjustment;
+use Drupal\commerce_price\Price;
 use Drupal\commerce_order\Entity\Order;
 use Drupal\Tests\commerce_migrate\Kernel\CommerceMigrateTestTrait;
 
@@ -54,9 +56,30 @@ class OrderTest extends Ubercart6TestBase {
     /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
     $order = Order::load(1);
     $this->assertNotNull($order->getBillingProfile());
-    $this->assertNull($order->getData('cc_data'));  $order = Order::load(2);
+    $this->assertNull($order->getData('cc_data'));
+    $adjustments[] = new Adjustment([
+      'type' => 'custom',
+      'label' => 'Shipping',
+      'amount' => new Price('2.99', 'NZD'),
+      'sourceId' => NULL,
+      'included' => FALSE,
+    ]);
+    $this->assertCount(1, $order->getAdjustments());
+    $this->assertEquals($adjustments, $order->getAdjustments());
+
+    $order = Order::load(2);
     $this->assertNotNull($order->getBillingProfile());
     $this->assertNull($order->getData('cc_data'));
+    $adjustments = [];
+    $adjustments[] = new Adjustment([
+      'type' => 'custom',
+      'label' => 'Shipping',
+      'amount' => new Price('1000.00', 'NZD'),
+      'sourceId' => NULL,
+      'included' => FALSE,
+    ]);
+    $this->assertCount(1, $order->getAdjustments());
+    $this->assertEquals($adjustments, $order->getAdjustments());
   }
 
 }
