diff --git a/modules/ubercart/commerce_migrate_ubercart.info.yml b/modules/ubercart/commerce_migrate_ubercart.info.yml
new file mode 100644
index 0000000..53bd623
--- /dev/null
+++ b/modules/ubercart/commerce_migrate_ubercart.info.yml
@@ -0,0 +1,9 @@
+name: Commerce Migrate Ubercart
+type: module
+description: Provides migrations for Ubercart.
+core: 8.x
+package: Commerce (contrib)
+dependencies:
+  - commerce
+  - migrate_drupal
+  - profile
diff --git a/modules/ubercart/config/optional/field.field.profile.customer.phone.yml b/modules/ubercart/config/optional/field.field.profile.customer.phone.yml
new file mode 100644
index 0000000..af2d08f
--- /dev/null
+++ b/modules/ubercart/config/optional/field.field.profile.customer.phone.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.storage.profile.phone
+    - profile.type.customer
+  module:
+    - telephone
+id: profile.customer.phone
+field_name: phone
+entity_type: profile
+bundle: customer
+label: Phone
+description: ''
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings: {  }
+field_type: telephone
diff --git a/modules/ubercart/config/optional/field.storage.profile.phone.yml b/modules/ubercart/config/optional/field.storage.profile.phone.yml
new file mode 100644
index 0000000..b6fd213
--- /dev/null
+++ b/modules/ubercart/config/optional/field.storage.profile.phone.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies:
+  enforced:
+    module:
+      - commerce_order
+  module:
+    - profile
+    - telephone
+id: profile.phone
+field_name: phone
+entity_type: profile
+type: telephone
+settings: {  }
+module: telephone
+locked: true
+cardinality: 1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/migration_templates/d6_ubercart_billing_profile.yml b/modules/ubercart/migration_templates/d6_ubercart_billing_profile.yml
similarity index 98%
rename from migration_templates/d6_ubercart_billing_profile.yml
rename to modules/ubercart/migration_templates/d6_ubercart_billing_profile.yml
index a8c601f..4ff0974 100644
--- a/migration_templates/d6_ubercart_billing_profile.yml
+++ b/modules/ubercart/migration_templates/d6_ubercart_billing_profile.yml
@@ -28,6 +28,7 @@ process:
   'address/administrative_area': billing_zone
   'address/postal_code': billing_postal_code
   'address/country_code': billing_country
+  phone: billing_phone
   created: created
   changed: modified
 destination:
diff --git a/src/Plugin/migrate/source/ubercart/d6/BillingProfile.php b/modules/ubercart/src/Plugin/migrate/source/d6/BillingProfile.php
similarity index 81%
rename from src/Plugin/migrate/source/ubercart/d6/BillingProfile.php
rename to modules/ubercart/src/Plugin/migrate/source/d6/BillingProfile.php
index f1f18b8..43c021a 100644
--- a/src/Plugin/migrate/source/ubercart/d6/BillingProfile.php
+++ b/modules/ubercart/src/Plugin/migrate/source/d6/BillingProfile.php
@@ -1,11 +1,13 @@
 <?php
 
-namespace Drupal\commerce_migrate\Plugin\migrate\source\ubercart\d6;
+namespace Drupal\commerce_migrate_ubercart\Plugin\migrate\source\d6;
 
 use Drupal\migrate\Plugin\migrate\source\SqlBase;
 use Drupal\migrate\Row;
 
 /**
+ * Drupal 6 ubercart billing profile source.
+ *
  * @MigrateSource(
  *   id = "d6_ubercart_billing_profile"
  * )
@@ -16,15 +18,9 @@ class BillingProfile extends SqlBase {
    * {@inheritdoc}
    */
   public function query() {
-
     $order_ids = $this->getOrderIds();
-
-    $query = $this->select('uc_orders', 'uo')->fields('uo', [
-      'order_id', 'uid', 'billing_first_name', 'billing_last_name',
-      'billing_company', 'billing_street1', 'billing_street2', 'billing_city',
-      'billing_zone', 'billing_postal_code', 'billing_country', 'created',
-      'modified',
-    ]);
+    $field_names = array_keys($this->fields());
+    $query = $this->select('uc_orders', 'uo')->fields('uo', $field_names);
     $query->condition('order_id', $order_ids, 'IN');
 
     return $query;
@@ -37,8 +33,9 @@ class BillingProfile extends SqlBase {
     $fields = [
       'order_id' => $this->t('Unique Order ID'),
       'uid' => $this->t('Unique User ID'),
-      'billing_first_name' => $this->t('Driver first name'),
-      'billing_last_name' => $this->t('Driver last name'),
+      'billing_first_name' => $this->t('Billing first name'),
+      'billing_last_name' => $this->t('Billing last name'),
+      'billing_phone' => $this->t('Billing phone name'),
       'billing_company' => $this->t('Billing company name'),
       'billing_street1' => $this->t('Billing street address line 1'),
       'billing_street2' => $this->t('Billing street address line 2'),
@@ -66,9 +63,10 @@ class BillingProfile extends SqlBase {
   }
 
   /**
-   * Queries database for the order ids of the most recently modified billing
-   * addresses. It assumes the billing address on the most recent order are
-   * the most current.
+   * Gets order ids for the most recently modified billing addresses.
+   *
+   * This assumes the billing information on the most recent order is the most
+   * current.
    */
   public function getOrderIds() {
     $query = $this->select('uc_orders', 'uo')
diff --git a/modules/ubercart/tests/src/Kernel/Migrate/d6/MigrateProfileBillingTest.php b/modules/ubercart/tests/src/Kernel/Migrate/d6/MigrateProfileBillingTest.php
new file mode 100644
index 0000000..114a14d
--- /dev/null
+++ b/modules/ubercart/tests/src/Kernel/Migrate/d6/MigrateProfileBillingTest.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Drupal\Tests\commerce_migrate_ubercart\Kernel\Migrate\d6;
+
+use Drupal\profile\Entity\Profile;
+use Drupal\Tests\commerce_migrate\Kernel\CommerceMigrateTestTrait;
+use Drupal\Tests\commerce_migrate\Kernel\d6\Ubercart\Ubercart6TestBase;
+
+/**
+ * Tests billing profile migration.
+ *
+ * @group commerce_migrate_ubercart
+ */
+class MigrateProfileBillingTest extends Ubercart6TestBase {
+
+  use CommerceMigrateTestTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'commerce_migrate_ubercart',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('profile');
+    $this->installConfig('commerce_order');
+    $this->installConfig('commerce_migrate_ubercart');
+    $this->executeMigrations([
+      'd6_filter_format',
+      'd6_user_role',
+      'd6_user',
+      'd6_ubercart_billing_profile',
+    ]);
+  }
+
+  /**
+   * Test profile migration from Drupal 6 to 8.
+   */
+  public function testProfileBilling() {
+    $this->assertBillingProfile(1, TRUE, '1492868907', '1493078815');
+    $profile = Profile::load(1);
+    $address = $profile->get('address')->first()->getValue();
+    $this->assertAddressField($address, 'US', '', '', NULL, '', NULL, '', NULL, '', NULL, '', '');
+    $phone = $profile->get('phone')->getValue();
+    $this->assertSame([], $phone);
+
+    $this->assertBillingProfile(2, TRUE, '1492989920', '1493081092');
+    $profile = Profile::load(2);
+    $address = $profile->get('address')->first()->getValue();
+    $this->assertAddressField($address, 'US', 'US-WY', 'World B', NULL, '7654', NULL, '42 View lane', NULL, 'Trin', NULL, 'Tragula', 'Perspective Ltd.');
+    $phone = $profile->get('phone')->getValue()[0]['value'];
+    $this->assertSame('111-9876', $phone);
+  }
+
+  /**
+   * Asserts an address field.
+   *
+   * @param array $address
+   *   The address id.
+   * @param string $expected_country_code
+   *   The country code.
+   * @param string $expected_administrative_area
+   *   The administrative area.
+   * @param string $expected_locality
+   *   The locality.
+   * @param string $expected_dependent_locality
+   *   The dependent locality.
+   * @param string $expected_postal_code
+   *   The postal code.
+   * @param string $expected_sorting_code
+   *   The sorting code.
+   * @param string $expected_address_line_1
+   *   Address line 1.
+   * @param string $expected_address_line_2
+   *   Address line 2.
+   * @param string $expected_given_name
+   *   The given name.
+   * @param string $expected_additional_name
+   *   Any additional names.
+   * @param string $expected_family_name
+   *   The family name.
+   * @param string $expected_organization
+   *   The organization string.
+   */
+  public function assertAddressField(array $address, $expected_country_code, $expected_administrative_area, $expected_locality, $expected_dependent_locality, $expected_postal_code, $expected_sorting_code, $expected_address_line_1, $expected_address_line_2, $expected_given_name, $expected_additional_name, $expected_family_name, $expected_organization) {
+    $this->assertSame($expected_country_code, $address['country_code']);
+    $this->assertSame($expected_administrative_area, $address['administrative_area']);
+    $this->assertSame($expected_locality, $address['locality']);
+    $this->assertSame($expected_dependent_locality, $address['dependent_locality']);
+    $this->assertSame($expected_postal_code, $address['postal_code']);
+    $this->assertSame($expected_sorting_code, $address['sorting_code']);
+    $this->assertSame($expected_address_line_1, $address['address_line1']);
+    $this->assertSame($expected_address_line_2, $address['address_line2']);
+    $this->assertSame($expected_given_name, $address['given_name']);
+    $this->assertSame($expected_additional_name, $address['additional_name']);
+    $this->assertSame($expected_family_name, $address['family_name']);
+    $this->assertSame($expected_organization, $address['organization']);
+  }
+
+}
diff --git a/modules/ubercart/tests/src/Kernel/Plugin/migrate/source/d6/BillingProfileTest.php b/modules/ubercart/tests/src/Kernel/Plugin/migrate/source/d6/BillingProfileTest.php
new file mode 100644
index 0000000..1b41413
--- /dev/null
+++ b/modules/ubercart/tests/src/Kernel/Plugin/migrate/source/d6/BillingProfileTest.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace Drupal\Tests\commerce_migrate_ubercart\Kernel\Plugin\migrate\source\d6;
+
+use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
+
+/**
+ * Tests the d6 ubercart billing profile source plugin.
+ *
+ * @covers \Drupal\commerce_migrate_ubercart\Plugin\migrate\source\d6\BillingProfile
+ * @group commerce_migrate_ubercart
+ */
+class BillingProfileTest extends MigrateSqlSourceTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['commerce_migrate_ubercart'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function providerSource() {
+    $tests = [];
+    $tests[0]['source_data']['uc_orders'] =
+      [
+        [
+          'order_id' => '1',
+          'uid' => '2',
+          'order_status' => 'payment_received',
+          'order_total' => '22.99000',
+          'product_count' => '2',
+          'primary_email' => 'f.bar@example.com',
+          'delivery_first_name' => '',
+          'delivery_last_name' => '',
+          'delivery_phone' => '',
+          'delivery_company' => '',
+          'delivery_street1' => '',
+          'delivery_street2' => '',
+          'delivery_city' => '',
+          'delivery_zone' => '',
+          'delivery_postal_code' => '',
+          'delivery_country' => '',
+          'billing_first_name' => 'Foo',
+          'billing_last_name' => 'Bar',
+          'billing_phone' => '123-4567',
+          'billing_company' => 'Acme',
+          'billing_street1' => '1 Coyote Way',
+          'billing_street2' => 'Utah',
+          'billing_city' => 'Salt Lake',
+          'billing_zone' => '58',
+          'billing_postal_code' => '11111',
+          'billing_country' => '840',
+          'payment_method' => 'cod',
+          'data' => 'a:0{}',
+          'created' => '1492868907',
+          'modified' => '1498620003',
+          'host' => '192.168.0.2',
+          'currency' => 'USD',
+        ],
+      ];
+    $tests[0]['source_data']['uc_countries'] =
+      [
+        [
+          'country_id' => '124',
+          'country_name' => 'Canada',
+          'country_iso_code_2' => 'CA',
+          'country_iso_code_3' => 'CAN',
+          'version' => 2,
+          'weight' => 0,
+        ],
+        [
+          'country_id' => '840',
+          'country_name' => 'United States',
+          'country_iso_code_2' => 'US',
+          'country_iso_code_3' => 'USA',
+          'version' => 1,
+          'weight' => 0,
+        ],
+      ];
+    $tests[0]['source_data']['uc_zones'] =
+      [
+        [
+          'zone_id' => '58',
+          'zone_country_country_id' => '840',
+          'zone_code' => 'UT',
+          'zone_name' => 'Utah',
+        ],
+      ];
+
+    // The expected results.
+    $tests[0]['expected_data'] = [
+      [
+        'order_id' => '1',
+        'uid' => '2',
+        'billing_first_name' => 'Foo',
+        'billing_last_name' => 'Bar',
+        'billing_phone' => '123-4567',
+        'billing_company' => 'Acme',
+        'billing_street1' => '1 Coyote Way',
+        'billing_street2' => 'Utah',
+        'billing_city' => 'Salt Lake',
+        'billing_zone' => 'US-UT',
+        'billing_postal_code' => '11111',
+        'billing_country' => 'US',
+        'created' => '1492868907',
+        'modified' => '1498620003',
+      ],
+    ];
+
+    return $tests;
+  }
+
+}
diff --git a/tests/src/Kernel/d6/Ubercart/OrderTest.php b/tests/src/Kernel/d6/Ubercart/OrderTest.php
index a93d1ef..124b9e1 100644
--- a/tests/src/Kernel/d6/Ubercart/OrderTest.php
+++ b/tests/src/Kernel/d6/Ubercart/OrderTest.php
@@ -22,6 +22,7 @@ class OrderTest extends Ubercart6TestBase {
   public static $modules = [
     'path',
     'commerce_product',
+    'commerce_migrate_ubercart',
   ];
 
   /**
diff --git a/tests/src/Kernel/d6/Ubercart/ProfileBillingTest.php b/tests/src/Kernel/d6/Ubercart/ProfileBillingTest.php
deleted file mode 100644
index 2c4d00f..0000000
--- a/tests/src/Kernel/d6/Ubercart/ProfileBillingTest.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace Drupal\Tests\commerce_migrate\Kernel\d6\Ubercart;
-
-use Drupal\Tests\commerce_migrate\Kernel\CommerceMigrateTestTrait;
-
-/**
- * Tests billing profile migration.
- *
- * @group commerce_migrate
- */
-class ProfileBillingTest extends Ubercart6TestBase {
-
-  use CommerceMigrateTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-    $this->installEntitySchema('profile');
-    $this->installConfig('commerce_order');
-    $this->executeMigrations([
-      'd6_filter_format',
-      'd6_user_role',
-      'd6_user',
-      'd6_ubercart_billing_profile',
-    ]);
-  }
-
-  /**
-   * Test profile migration from Drupal 7 to 8.
-   */
-  public function testProfile() {
-    $this->assertBillingProfile(1, TRUE, '1492868907', '1493078815');
-  }
-
-}
