diff --git a/migration_templates/d6_ubercart_product.yml b/migration_templates/d6_ubercart_product.yml
index 22b6bf6..dcf9b28 100644
--- a/migration_templates/d6_ubercart_product.yml
+++ b/migration_templates/d6_ubercart_product.yml
@@ -26,9 +26,10 @@ process:
   changed: changed
   # Fills in variation id from stubs created in product variation migration.
   'variations/target_id':
-    plugin: migration
+    plugin: migration_lookup
     migration: d6_ubercart_product_variation
     source: nid
+  stores/target_id: stores
 destination:
   plugin: entity:commerce_product
 migration_dependencies:
diff --git a/migration_templates/d6_ubercart_product_variation.yml b/migration_templates/d6_ubercart_product_variation.yml
index 9b94e8e..4308395 100644
--- a/migration_templates/d6_ubercart_product_variation.yml
+++ b/migration_templates/d6_ubercart_product_variation.yml
@@ -25,3 +25,6 @@ process:
   changed: changed
 destination:
   plugin: entity:commerce_product_variation
+migration_dependencies:
+  required:
+    - d6_ubercart_store
diff --git a/migration_templates/d6_ubercart_store.yml b/migration_templates/d6_ubercart_store.yml
new file mode 100644
index 0000000..d110a36
--- /dev/null
+++ b/migration_templates/d6_ubercart_store.yml
@@ -0,0 +1,52 @@
+# Ubercart Store information.
+id: d6_ubercart_store
+label: Migrate store from Ubercart
+migration_group: ubercart
+migration_tags:
+  - Drupal 6
+  - Drupal 6 Ubercart
+source:
+  plugin: ubercart_store
+  variables:
+    - uc_store_name
+    - uc_store_owner
+    - uc_currency_code
+    - uc_store_street1
+    - uc_store_street2
+    - uc_store_zone
+    - uc_store_city
+    - uc_store_postal_code
+    - uc_store_country
+    - uc_store_phone
+    - uc_store_fax
+    - uc_store_email
+    - uc_store_email_include_name
+  constants:
+    type: 'online'
+  provider: ubercart
+process:
+  # Bundle
+  type: 'constants/type'
+  name: uc_store_name
+  uid:
+    -
+      plugin: default_value
+      default_value: 1
+    -
+      plugin: migration_lookup
+      migration: d6_user
+
+  default_currency: uc_currency_code
+  mail: uc_store_email
+  # Country code is required. If is it null none of the address fields are saved.
+  'address/country_code': country_iso_code_2
+  'address/address_line1': uc_store_street1
+  'address/address_line2': uc_store_street2
+  'address/locality': uc_store_city
+  'address/postal_code': uc_store_postal_code
+destination:
+  plugin: entity:commerce_store
+migration_dependencies:
+  required:
+    - d6_user
+    - ubercart_currency
diff --git a/migration_templates/d7_ubercart_store.yml b/migration_templates/d7_ubercart_store.yml
new file mode 100644
index 0000000..801123e
--- /dev/null
+++ b/migration_templates/d7_ubercart_store.yml
@@ -0,0 +1,44 @@
+# Ubercart Store information.
+id: d7_ubercart_store
+label: Migrate store from Ubercart
+migration_group: ubercart
+migration_tags:
+  - Drupal 7
+  - Drupal 7 Ubercart
+source:
+  plugin: ubercart_store
+  variables:
+    - uc_store_name
+    - uc_store_owner
+    - uc_currency_code
+    - uc_store_street1
+    - uc_store_street2
+    - uc_store_zone
+    - uc_store_city
+    - uc_store_postal_code
+    - uc_store_country
+    - uc_store_phone
+    - uc_store_fax
+    - uc_store_email
+    - uc_store_email_include_name
+  constants:
+    type: 'online'
+  provider: ubercart
+process:
+  # Bundle
+  type: 'constants/type'
+  name: uc_store_name
+  default_currency: uc_currency_code
+  mail: uc_store_email
+  # Country code is required. If is it null none of the address fields are saved.
+  'address/country_code': country_iso_code_2
+  'address/address_line1': uc_store_street1
+  'address/address_line2': uc_store_street2
+  'address/locality': uc_store_city
+  'address/postal_code': uc_store_postal_code
+destination:
+  plugin: entity:commerce_store
+migration_dependencies:
+  required:
+    - d7_user
+    - ubercart_currency
diff --git a/src/Plugin/migrate/source/ubercart/Store.php b/src/Plugin/migrate/source/ubercart/Store.php
new file mode 100644
index 0000000..49f1a1a
--- /dev/null
+++ b/src/Plugin/migrate/source/ubercart/Store.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\commerce_migrate\Plugin\migrate\source\ubercart;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\Variable;
+
+/**
+ * Gets the ubercart store data.
+ *
+ * @MigrateSource(
+ *   id = "ubercart_store"
+ * )
+ */
+class Store extends Variable {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $store_owner = $row->getSourceProperty('uc_store_owner');
+    $query = $this->select('users', 'u')
+      ->fields('u', ['uid'])
+      ->condition('name', $store_owner);
+    $uid = $query->execute()->fetchField();
+    $row->setSourceProperty('uid', $uid);
+    $country = $row->getSourceProperty('uc_store_country');
+    // Get the country iso code 2 for this country.
+    $query = $this->select('uc_countries', 'ucc')
+      ->fields('ucc', ['country_iso_code_2'])
+      ->condition('country_id', $country);
+    $country_iso_code_2 = $query->execute()->fetchField();
+    $row->setSourceProperty('country_iso_code_2', $country_iso_code_2);
+    return parent::prepareRow($row);
+  }
+
+}
diff --git a/src/Plugin/migrate/source/ubercart/d6/Product.php b/src/Plugin/migrate/source/ubercart/d6/Product.php
index 7eefcb0..f94da24 100644
--- a/src/Plugin/migrate/source/ubercart/d6/Product.php
+++ b/src/Plugin/migrate/source/ubercart/d6/Product.php
@@ -16,25 +16,6 @@ use Drupal\migrate\Row;
 class Product extends SqlBase {
 
   /**
-   * The default store.
-   *
-   * @var \Drupal\commerce_store\Entity\StoreInterface
-   */
-  protected $defaultStore;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state);
-
-    $this->defaultStore = \Drupal::service('commerce_store.default_store_resolver')->resolve();
-    if (!$this->defaultStore) {
-      throw new MigrateException('You must have a store saved in order to import products.');
-    }
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function query() {
@@ -88,9 +69,9 @@ class Product extends SqlBase {
     //  ->fetchCol();
     // $row->setSourceProperty('images', $image_ids);
     // @codingStandardsIgnoreEnd
-    $row->setDestinationProperty('stores', [
-      'target_id' => $this->defaultStore->id(),
-    ]);
+
+    // Assume an id of 1 because there is only store in Ubercart by default.
+    $row->setSourceProperty('stores', 1);
     $row->setSourceProperty('name', str_replace(' ', '_', strtolower($row->getSourceProperty('name'))));
 
     return parent::prepareRow($row);
diff --git a/tests/src/Kernel/d6/Ubercart/OrderItemTest.php b/tests/src/Kernel/d6/Ubercart/OrderItemTest.php
index f0334f8..b5a200a 100644
--- a/tests/src/Kernel/d6/Ubercart/OrderItemTest.php
+++ b/tests/src/Kernel/d6/Ubercart/OrderItemTest.php
@@ -34,12 +34,9 @@ class OrderItemTest extends Ubercart6TestBase {
     $this->installEntitySchema('commerce_order_item');
     $this->installConfig(['commerce_order']);
     $this->installConfig(['commerce_product']);
-    $this->createDefaultStore();
+    $this->migrateStore();
     $this->startCollectingMessages();
     $this->executeMigrations([
-      'd6_filter_format',
-      'd6_user_role',
-      'd6_user',
       'ubercart_currency',
       'd6_ubercart_billing_profile',
       'd6_ubercart_order',
diff --git a/tests/src/Kernel/d6/Ubercart/OrderTest.php b/tests/src/Kernel/d6/Ubercart/OrderTest.php
index 38cbe89..ef92953 100644
--- a/tests/src/Kernel/d6/Ubercart/OrderTest.php
+++ b/tests/src/Kernel/d6/Ubercart/OrderTest.php
@@ -32,7 +32,6 @@ class OrderTest extends Ubercart6TestBase {
     $this->installEntitySchema('commerce_order');
     $this->installEntitySchema('commerce_order_item');
     $this->installConfig(['commerce_order']);
-    $this->createDefaultStore();
     $this->startCollectingMessages();
     $this->executeMigrations([
       'd6_filter_format',
diff --git a/tests/src/Kernel/d6/Ubercart/ProductTest.php b/tests/src/Kernel/d6/Ubercart/ProductTest.php
index 4867e57..6fbdbb4 100644
--- a/tests/src/Kernel/d6/Ubercart/ProductTest.php
+++ b/tests/src/Kernel/d6/Ubercart/ProductTest.php
@@ -30,7 +30,7 @@ class ProductTest extends Ubercart6TestBase {
     $this->installEntitySchema('commerce_product_variation');
     $this->installEntitySchema('commerce_product');
     $this->installConfig(['commerce_product']);
-    $this->createDefaultStore();
+    $this->migrateStore();
     $this->executeMigrations([
       'ubercart_currency',
       'd6_ubercart_product_variation',
diff --git a/tests/src/Kernel/d6/Ubercart/ProductVariationTest.php b/tests/src/Kernel/d6/Ubercart/ProductVariationTest.php
index eedc209..7e0abae 100644
--- a/tests/src/Kernel/d6/Ubercart/ProductVariationTest.php
+++ b/tests/src/Kernel/d6/Ubercart/ProductVariationTest.php
@@ -30,7 +30,7 @@ class ProductVariationTest extends Ubercart6TestBase {
     $this->installEntitySchema('commerce_product_variation');
     $this->installEntitySchema('commerce_product');
     $this->installConfig(['commerce_product']);
-    $this->createDefaultStore();
+    $this->migrateStore();
     $this->executeMigrations([
       'ubercart_currency',
       'd6_ubercart_product_variation',
diff --git a/tests/src/Kernel/d6/Ubercart/StoreTest.php b/tests/src/Kernel/d6/Ubercart/StoreTest.php
new file mode 100644
index 0000000..bef9662
--- /dev/null
+++ b/tests/src/Kernel/d6/Ubercart/StoreTest.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Drupal\Tests\commerce_migrate\Kernel\d6\Ubercart;
+
+use Drupal\address\Plugin\Field\FieldType\AddressItem;
+use Drupal\commerce_store\Entity\Store;
+
+/**
+ * Tests billing profile migration.
+ *
+ * @group commerce_migrate
+ */
+class StoreTest extends Ubercart6TestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['commerce_store'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('commerce_store');
+    $this->migrateStore();
+  }
+
+  /**
+   * Test store migration from Drupal 6 to 8.
+   */
+  public function testStore() {
+    /** @var \Drupal\commerce_store\Entity\storeInterface $store */
+    $store = Store::load(1);
+    $this->assertNotNull($store);
+    $this->assertInstanceOf(Store::class, $store);
+    $this->assertSame('Awesome Stuff', $store->getName());
+    $this->assertSame('awesome_stuff@example.com', $store->getEmail());
+    $this->assertSame('NZD', $store->getDefaultCurrencyCode());
+    $this->assertSame('online', $store->bundle());
+    $this->assertSame('1', $store->getOwnerId());
+
+    $address = $store->getAddress();
+    $this->assertInstanceOf(AddressItem::class, $address);
+    $this->assertSame('US', $address->getCountryCode());
+    $this->assertNull($address->getAdministrativeArea());
+    $this->assertSame('Betelgeuse', $address->getLocality());
+    $this->assertNull($address->getDependentLocality());
+    $this->assertSame('4242', $address->getPostalCode());
+    $this->assertNull($address->getSortingCode());
+    $this->assertSame('123 First Street', $address->getAddressLine1());
+    $this->assertSame('456 Second Street', $address->getAddressLine2());
+    // These fields are disabled on the store address.
+    $this->assertNull($address->getGivenName());
+    $this->assertNull($address->getAdditionalName());
+    $this->assertNull($address->getFamilyName());
+    $this->assertNull($address->getOrganization());
+  }
+
+}
diff --git a/tests/src/Kernel/d6/Ubercart/Ubercart6TestBase.php b/tests/src/Kernel/d6/Ubercart/Ubercart6TestBase.php
index bb209ec..e6d1206 100644
--- a/tests/src/Kernel/d6/Ubercart/Ubercart6TestBase.php
+++ b/tests/src/Kernel/d6/Ubercart/Ubercart6TestBase.php
@@ -37,33 +37,21 @@ abstract class Ubercart6TestBase extends MigrateDrupal6TestBase {
   }
 
   /**
-   * Gets the path to the fixture file.
+   * Executes store migrations.
    */
-  protected function getFixtureFilePath() {
-    return __DIR__ . '/../../../../fixtures/uc6.php';
+  protected function migrateStore() {
+    $this->migrateUsers(FALSE);
+    $this->executeMigrations([
+      'ubercart_currency',
+      'd6_ubercart_store',
+    ]);
   }
 
   /**
-   * Creates a default store.
+   * Gets the path to the fixture file.
    */
-  protected function createDefaultStore() {
-    /** @var \Drupal\commerce_store\StoreStorage $store_storage */
-    $store_storage = \Drupal::service('entity_type.manager')->getStorage('commerce_store');
-
-    $store_values = [
-      'type' => 'default',
-      'uid' => 1,
-      'name' => 'Demo store',
-      'mail' => 'admin@example.com',
-      'address' => [
-        'country_code' => 'US',
-      ],
-      'default_currency' => 'USD',
-    ];
-    /** @var \Drupal\commerce_store\Entity\StoreInterface $store */
-    $store = $store_storage->create($store_values);
-    $store->save();
-    $store_storage->markAsDefault($store);
+  protected function getFixtureFilePath() {
+    return __DIR__ . '/../../../../fixtures/uc6.php';
   }
 
 }
diff --git a/tests/src/Kernel/d7/Ubercart/StoreTest.php b/tests/src/Kernel/d7/Ubercart/StoreTest.php
new file mode 100644
index 0000000..674e5e4
--- /dev/null
+++ b/tests/src/Kernel/d7/Ubercart/StoreTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Tests\commerce_migrate\Kernel\d7\Ubercart;
+
+use Drupal\address\Plugin\Field\FieldType\AddressItem;
+use Drupal\commerce_store\Entity\Store;
+
+/**
+ * Tests billing profile migration.
+ *
+ * @group commerce_migrate
+ */
+class StoreTest extends Ubercart7TestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['commerce_store'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('commerce_store');
+    $this->executeMigrations([
+      'd7_filter_format',
+      'd7_user_role',
+      'd7_user',
+      'd7_ubercart_store'
+    ]);
+  }
+
+  /**
+   * Test store migration from Drupal 7 to 8.
+   */
+  public function testStore() {
+    /** @var \Drupal\commerce_store\Entity\storeInterface $store */
+    $store = Store::load(1);
+    $this->assertNotNull($store);
+    $this->assertInstanceOf(Store::class, $store);
+    $this->assertSame("Quark's", $store->getName());
+    $this->assertSame('quark@example.com', $store->getEmail());
+    $this->assertSame('USD', $store->getDefaultCurrencyCode());
+    $this->assertSame('online', $store->bundle());
+
+    $address = $store->getAddress();
+    $this->assertInstanceOf(AddressItem::class, $address);
+    $this->assertSame('CA', $address->getCountryCode());
+    $this->assertNull($address->getAdministrativeArea());
+    $this->assertSame('Deep Space 9', $address->getLocality());
+    $this->assertNull($address->getDependentLocality());
+    $this->assertSame('9999', $address->getPostalCode());
+    $this->assertNull($address->getSortingCode());
+    $this->assertSame('47 The Promenade', $address->getAddressLine1());
+    $this->assertSame('Lower Level', $address->getAddressLine2());
+    // These fields are disabled on the store address.
+    $this->assertNull($address->getGivenName());
+    $this->assertNull($address->getAdditionalName());
+    $this->assertNull($address->getFamilyName());
+    $this->assertNull($address->getOrganization());
+  }
+
+}
