diff --git a/config/install/commerce_qb_webconnect.quickbooks_admin.yml b/config/install/commerce_qb_webconnect.quickbooks_admin.yml
index d745ec7..ae6c517 100644
--- a/config/install/commerce_qb_webconnect.quickbooks_admin.yml
+++ b/config/install/commerce_qb_webconnect.quickbooks_admin.yml
@@ -7,11 +7,6 @@ accounts:
   assets_account: 'Inventory Asset'
 adjustments:
   discount_service: 'Discount'
-shipping:
-  shipping_service: 'Shipping'
-  shipping_service_description: 'Shipping fees'
-tax:
-  tax_name: 'Taxes'
 id_prefixes:
   po_number_prefix: ''
   payment_prefix: ''
diff --git a/config/schema/commerce_qb_webconnect.schema.yml b/config/schema/commerce_qb_webconnect.schema.yml
index 0078f91..e3dbd87 100644
--- a/config/schema/commerce_qb_webconnect.schema.yml
+++ b/config/schema/commerce_qb_webconnect.schema.yml
@@ -32,23 +32,6 @@ commerce_qb_webconnect.quickbooks_admin:
             discount_service:
               type: string
               label: 'Main discount / promotion service'
-    shipping:
-      type: mapping
-      label: 'Shipping'
-      mapping:
-        shipping_service:
-          type: string
-          label: 'Main drupal shipping service'
-        shipping_service_description:
-          type: string
-          label: 'Shipping service description'
-    tax:
-      type: mapping
-      label: 'Taxes'
-      mapping:
-        tax_name:
-          type: string
-          label: 'Main drupal taxes'
     id_prefixes:
       type: mapping
       label: 'ID prefixes'
diff --git a/src/Form/QuickbooksAdminForm.php b/src/Form/QuickbooksAdminForm.php
index 57629d0..e50d805 100644
--- a/src/Form/QuickbooksAdminForm.php
+++ b/src/Form/QuickbooksAdminForm.php
@@ -108,40 +108,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#default_value' => $config->get('adjustments')['discount_service'],
     ];
 
-    $form['shipping'] = [
-      '#type' => 'fieldset',
-      '#title' => $this->t('Shipping settings'),
-    ];
-    $form['shipping']['shipping_service'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Drupal shipping service'),
-      '#description' => $this->t('Provide the name of default shipping service-item so that Quickbooks can keep track of shipping charges.'),
-      '#maxlength' => 64,
-      '#size' => 64,
-      '#default_value' => $config->get('shipping')['shipping_service'],
-    ];
-    $form['shipping']['shipping_service_description'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Shipping service description'),
-      '#description' => $this->t('Provide a description for the shipping charge. This will show up on the Quickbooks invoice.'),
-      '#maxlength' => 64,
-      '#size' => 64,
-      '#default_value' => $config->get('shipping')['shipping_service_description'],
-    ];
-
-    $form['tax'] = [
-      '#type' => 'fieldset',
-      '#title' => $this->t('Tax settings'),
-    ];
-    $form['tax']['tax_name'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Drupal tax name'),
-      '#description' => $this->t('Provide the name of default tax name so that Quickbooks can keep track of tax charges.'),
-      '#maxlength' => 64,
-      '#size' => 64,
-      '#default_value' => $config->get('tax')['tax_name'],
-    ];
-
     $form['id_prefixes'] = [
       '#type' => 'fieldset',
       '#title' => $this->t('Custom ID prefixes'),
diff --git a/src/SoapBundle/Services/SoapService.php b/src/SoapBundle/Services/SoapService.php
index e88de5b..a157a48 100644
--- a/src/SoapBundle/Services/SoapService.php
+++ b/src/SoapBundle/Services/SoapService.php
@@ -297,7 +297,7 @@ public function callSendRequestXML(\stdClass $request) {
     foreach ($this->migrationPluginManager->buildDependencyMigration($migrations, []) as $migration) {
       // Proceed to next migration if there are no remaining items to import.
       $remaining = $migration->getSourcePlugin()->count() - $migration->getIdMapPlugin()->processedCount();
-      if (!$remaining) {
+      if (!$remaining && !$migration->getIdMap()->updateCount()) {
         continue;
       }
       // Our MigrateSubscriber stops this migration after a single row.
@@ -391,7 +391,7 @@ protected function updateIdentifier(\stdClass $request) {
 
         // The given object ID in the field "list" is invalid.
         case 3000:
-          // Occurs if payment method does not match an existing QB entry.
+          // Occurs if a reference does not match an existing QB entry.
         case 3140:
           // The specified reference was not found.
         case 3120:
@@ -514,6 +514,7 @@ protected function prepareOrderExport() {
     }
 
     if ($order->hasField('shipments')) {
+      /** @var \Drupal\commerce_shipping\Entity\ShipmentInterface $shipment */
       foreach ($order->shipments->referencedEntities() as $shipment) {
         /** @var \Drupal\profile\Entity\Profile $shipping_profile */
         if ($shippingProfile = $shipment->getShippingProfile()) {
@@ -578,24 +579,24 @@ protected function prepareOrderExport() {
     foreach ($order->getAdjustments() as $adjustment) {
       switch ($adjustment->getType()) {
         case 'tax':
-          $taxName = $this->config->get('tax')['tax_name'];
-          $invoice->setSalesTaxItemFullName($taxName);
+          $invoice->setSalesTaxItemFullName($adjustment->getLabel());
           break;
 
         case 'shipping':
           $line = $isInvoice ? new \QuickBooks_QBXML_Object_Invoice_InvoiceLine() : new \QuickBooks_QBXML_Object_SalesReceipt_SalesReceiptLine();
-          $shippingName = $this->config->get('shipping')['shipping_service'];
-          $shippingDescription = $this->config->get('shipping')['shipping_service_description'];
-          $line->setItemName($shippingName);
-          $line->setDescription($shippingDescription);
-          $line->setQuantity(1);
-          $line->setAmount($adjustment->getAmount()->getNumber());
-          if ($isInvoice) {
-            $invoice->addInvoiceLine($line);
-          }
-          else {
-            $invoice->addSalesReceiptLine($line);
+          if (!empty($shipment)) {
+            $line->setItemName($shipment->getShippingService());
+            $line->setDescription($shipment->getTitle());
+            $line->setQuantity(1);
+            $line->setAmount($adjustment->getAmount()->getNumber());
+            if ($isInvoice) {
+              $invoice->addInvoiceLine($line);
+            }
+            else {
+              $invoice->addSalesReceiptLine($line);
+            }
           }
+
           break;
 
         case 'promotion':
diff --git a/tests/src/Kernel/SoapServiceTest.php b/tests/src/Kernel/SoapServiceTest.php
index f69e66b..0f9cac2 100755
--- a/tests/src/Kernel/SoapServiceTest.php
+++ b/tests/src/Kernel/SoapServiceTest.php
@@ -2,8 +2,11 @@
 
 namespace Drupal\Tests\commerce_qb_webconnect\Kernel;
 
+use Drupal\commerce\Context;
 use Drupal\commerce_order\Adjustment;
 use Drupal\commerce_order\Entity\Order;
+use Drupal\commerce_order\Entity\OrderType;
+use Drupal\commerce_order\PriceCalculator;
 use Drupal\commerce_payment\Entity\Payment;
 use Drupal\commerce_payment\Entity\PaymentGateway;
 use Drupal\commerce_payment\Entity\PaymentMethod;
@@ -11,7 +14,10 @@
 use Drupal\commerce_product\Entity\Product;
 use Drupal\commerce_product\Entity\ProductVariation;
 use Drupal\commerce_product\Entity\ProductVariationType;
+use Drupal\commerce_shipping\Entity\Shipment;
+use Drupal\commerce_shipping\ShipmentItem;
 use Drupal\Core\Database\Database;
+use Drupal\physical\Weight;
 use Drupal\profile\Entity\Profile;
 use Drupal\Tests\commerce\Kernel\CommerceKernelTestBase;
 
@@ -119,9 +125,24 @@ protected function setUp() {
     $this->installEntitySchema('commerce_payment_gateway');
     $this->installEntitySchema('commerce_product');
     $this->installEntitySchema('commerce_product_variation');
+    $this->installEntitySchema('commerce_shipment');
+    $this->installEntitySchema('commerce_shipping_method');
     $this->installSchema('user', ['users_data']);
     $this->installConfig(self::$modules);
 
+    // Install the variation trait.
+    $trait_manager = \Drupal::service('plugin.manager.commerce_entity_trait');
+    $trait = $trait_manager->createInstance('purchasable_entity_shippable');
+    $trait_manager->installTrait($trait, 'commerce_product_variation', 'default');
+
+    /** @var \Drupal\commerce_order\Entity\OrderTypeInterface $order_type */
+    $order_type = OrderType::load('default');
+    $order_type->setThirdPartySetting('commerce_shipping', 'shipment_type', 'default');
+    $order_type->save();
+    // Create the order field.
+    $field_definition = commerce_shipping_build_shipment_field_definition($order_type->id());
+    \Drupal::service('commerce.configurable_field_manager')->createField($field_definition);
+
     $user = $this->createUser(['mail' => 'example@example.com', 'pass' => 'abc123'], ['access quickbooks soap service']);
     $this->user = $this->reloadEntity($user);
 
@@ -216,7 +237,7 @@ protected function setUp() {
     ]);
     $order->addAdjustment(new Adjustment([
       'type' => 'tax',
-      'label' => 'Tax',
+      'label' => 'State Tax %5',
       'amount' => new Price('0.50', 'USD'),
     ]));
     $order->addAdjustment(new Adjustment([
@@ -231,6 +252,29 @@ protected function setUp() {
     ]));
     $order->save();
 
+    $shipment = Shipment::create([
+      'type' => 'default',
+      'order_id' => $order->id(),
+      'items' => [
+        new ShipmentItem([
+          'order_item_id' => $order_item1->id(),
+          'title' => $order_item1->label(),
+          'quantity' => $order_item1->getQuantity(),
+          'weight' => new Weight('1', 'kg'),
+          'declared_value' => $this->container->get('commerce_order.price_calculator')->calculate($order_item1->getPurchasedEntity(), $order_item1->getQuantity(), new Context($this->user, $this->store)),
+        ]),
+      ],
+      'amount' => new Price('5', 'USD'),
+      'state' => 'draft',
+      'shipping_service' => 'Acme Corporation',
+      'shipping_profile' => $profile,
+      'title' => 'Shipment #1',
+    ]);
+    $shipment->save();
+    $this->reloadEntity($shipment);
+    $order->set('shipments', [$shipment]);
+    $order->save();
+
     // Add a payment.
     $payment_gateway = PaymentGateway::create([
       'id' => 'example',
@@ -280,7 +324,7 @@ public function testSalesReceiptExport() {
     $response = $soapService->sendRequestXML($response);
     $result = str_replace(["\n", "\t"], '', $response->sendRequestXMLResult);
     $date = \Drupal::service('date.formatter')->format(\Drupal::time()->getRequestTime(), 'custom', 'Y-m-d');
-    $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?><?qbxml version=\"13.0\"?><QBXML><QBXMLMsgsRq onError=\"stopOnError\"><SalesReceiptAddRq><SalesReceiptAdd><CustomerRef><ListID>80000001-1431947192</ListID><FullName>John Smith</FullName></CustomerRef><TxnDate>$date</TxnDate><RefNumber>1</RefNumber><BillAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></BillAddress><PaymentMethodRef><FullName>Example</FullName></PaymentMethodRef><ItemSalesTaxRef><FullName>Taxes</FullName></ItemSalesTaxRef><SalesReceiptLineAdd><ItemRef><ListID>{$this->productVariationListId}</ListID></ItemRef><Desc>Variation1</Desc><Quantity>1</Quantity><Rate>12.00</Rate></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><ListID>{$this->productVariationListId2}</ListID></ItemRef><Desc>Variation2</Desc><Quantity>1</Quantity><Rate>13.00</Rate></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><FullName>Shipping</FullName></ItemRef><Desc>Shipping fees</Desc><Quantity>1</Quantity><Amount>5.00</Amount></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><FullName>Discount</FullName></ItemRef><Desc>Order Discount</Desc><Quantity>1</Quantity><Amount>-2.00</Amount></SalesReceiptLineAdd></SalesReceiptAdd></SalesReceiptAddRq></QBXMLMsgsRq></QBXML>", $result);
+    $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?><?qbxml version=\"13.0\"?><QBXML><QBXMLMsgsRq onError=\"stopOnError\"><SalesReceiptAddRq><SalesReceiptAdd><CustomerRef><ListID>80000001-1431947192</ListID><FullName>John Smith</FullName></CustomerRef><TxnDate>$date</TxnDate><RefNumber>1</RefNumber><BillAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></BillAddress><ShipAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></ShipAddress><PaymentMethodRef><FullName>Example</FullName></PaymentMethodRef><ItemSalesTaxRef><FullName>State Tax %5</FullName></ItemSalesTaxRef><SalesReceiptLineAdd><ItemRef><ListID>{$this->productVariationListId}</ListID></ItemRef><Desc>Variation1</Desc><Quantity>1</Quantity><Rate>12.00</Rate></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><ListID>{$this->productVariationListId2}</ListID></ItemRef><Desc>Variation2</Desc><Quantity>1</Quantity><Rate>13.00</Rate></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><FullName>Acme Corporation</FullName></ItemRef><Desc>Shipment #1</Desc><Quantity>1</Quantity><Amount>5.00</Amount></SalesReceiptLineAdd><SalesReceiptLineAdd><ItemRef><FullName>Discount</FullName></ItemRef><Desc>Order Discount</Desc><Quantity>1</Quantity><Amount>-2.00</Amount></SalesReceiptLineAdd></SalesReceiptAdd></SalesReceiptAddRq></QBXMLMsgsRq></QBXML>", $result);
     $response->response = "<TxnID>{$this->orderListId}</TxnID>";
     $response = $soapService->receiveResponseXML($response);
     // We should be 100% done.
@@ -310,7 +354,7 @@ public function testInvoiceExport() {
     $response = $soapService->sendRequestXML($response);
     $result = str_replace(["\n", "\t"], '', $response->sendRequestXMLResult);
     $date = \Drupal::service('date.formatter')->format(\Drupal::time()->getRequestTime(), 'custom', 'Y-m-d');
-    $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?><?qbxml version=\"13.0\"?><QBXML><QBXMLMsgsRq onError=\"stopOnError\"><InvoiceAddRq><InvoiceAdd><CustomerRef><ListID>80000001-1431947192</ListID><FullName>John Smith</FullName></CustomerRef><TxnDate>$date</TxnDate><RefNumber>1</RefNumber><BillAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></BillAddress><ItemSalesTaxRef><FullName>Taxes</FullName></ItemSalesTaxRef><InvoiceLineAdd><ItemRef><ListID>{$this->productVariationListId}</ListID></ItemRef><Desc>Variation1</Desc><Quantity>1</Quantity><Rate>12</Rate></InvoiceLineAdd><InvoiceLineAdd><ItemRef><ListID>{$this->productVariationListId2}</ListID></ItemRef><Desc>Variation2</Desc><Quantity>1</Quantity><Rate>13</Rate></InvoiceLineAdd><InvoiceLineAdd><ItemRef><FullName>Shipping</FullName></ItemRef><Desc>Shipping fees</Desc><Quantity>1</Quantity><Amount>5.00</Amount></InvoiceLineAdd><InvoiceLineAdd><ItemRef><FullName>Discount</FullName></ItemRef><Desc>Order Discount</Desc><Quantity>1</Quantity><Amount>-2.00</Amount></InvoiceLineAdd></InvoiceAdd></InvoiceAddRq></QBXMLMsgsRq></QBXML>", $result);
+    $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?><?qbxml version=\"13.0\"?><QBXML><QBXMLMsgsRq onError=\"stopOnError\"><InvoiceAddRq><InvoiceAdd><CustomerRef><ListID>80000001-1431947192</ListID><FullName>John Smith</FullName></CustomerRef><TxnDate>$date</TxnDate><RefNumber>1</RefNumber><BillAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></BillAddress><ShipAddress><Addr1>C. Prat de la Creu, 62-64</Addr1><City>Canillo</City><PostalCode>AD500</PostalCode><Country>AD</Country></ShipAddress><ItemSalesTaxRef><FullName>State Tax %5</FullName></ItemSalesTaxRef><InvoiceLineAdd><ItemRef><ListID>{$this->productVariationListId}</ListID></ItemRef><Desc>Variation1</Desc><Quantity>1</Quantity><Rate>12</Rate></InvoiceLineAdd><InvoiceLineAdd><ItemRef><ListID>{$this->productVariationListId2}</ListID></ItemRef><Desc>Variation2</Desc><Quantity>1</Quantity><Rate>13</Rate></InvoiceLineAdd><InvoiceLineAdd><ItemRef><FullName>Acme Corporation</FullName></ItemRef><Desc>Shipment #1</Desc><Quantity>1</Quantity><Amount>5.00</Amount></InvoiceLineAdd><InvoiceLineAdd><ItemRef><FullName>Discount</FullName></ItemRef><Desc>Order Discount</Desc><Quantity>1</Quantity><Amount>-2.00</Amount></InvoiceLineAdd></InvoiceAdd></InvoiceAddRq></QBXMLMsgsRq></QBXML>", $result);
     $response->response = "<TxnID>{$this->orderListId}</TxnID>";
     $response = $soapService->receiveResponseXML($response);
     // We should be 85% done.
