diff --git a/core/modules/field/migration_templates/d7_field_instance.yml b/core/modules/field/migration_templates/d7_field_instance.yml
index b6d2497..6f9d074 100644
--- a/core/modules/field/migration_templates/d7_field_instance.yml
+++ b/core/modules/field/migration_templates/d7_field_instance.yml
@@ -21,6 +21,7 @@ process:
     source:
       - instance_settings
       - widget_settings
+      - field_settings
   default_value_function: ''
   default_value:
     plugin: d7_field_instance_defaults
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
index e8d59ad..812da0e 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
@@ -17,9 +17,25 @@ class FieldInstanceSettings extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($instance_settings, $widget_settings) = $value;
+    list($instance_settings, $widget_settings, $field_settings) = $value;
     $widget_type = $widget_settings['type'];
 
+    if ($row->getSourceProperty('type') == 'taxonomy_term_reference') {
+      foreach ($field_settings['allowed_values'] as $allowed_value) {
+        if ($vocabulary = $allowed_value['vocabulary']) {
+          $instance_settings['handler_settings']['sort'] = [
+            'field' => '_none',
+          ];
+          // @todo Handle duplicate vocabulary machine names ($vocabulary). This
+          // current code works for migrations from Drupal 7 (because that uses
+          // proper machine names for vocabularies), but may have problems with
+          // custom migration scenarios if they include vocabulary names that
+          // require de-duping.
+          $instance_settings['handler_settings']['target_bundles'][$vocabulary] = $vocabulary;
+        }
+      }
+    }
+
     switch ($widget_type) {
       case 'image_image':
         $settings = $instance_settings;
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
index 7aa281f..5d3d6cc 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
@@ -28,6 +28,7 @@ public function query() {
       ->fields('fc', array('type'));
 
     $query->innerJoin('field_config', 'fc', 'fci.field_id = fc.id');
+    $query->addField('fc', 'data', 'field_data');
 
     // Optionally filter by entity type and bundle.
     if (isset($this->configuration['entity_type'])) {
@@ -53,6 +54,7 @@ public function fields() {
       'instance_settings' => $this->t('Field instance settings.'),
       'widget_settings' => $this->t('Widget settings.'),
       'display_settings' => $this->t('Display settings.'),
+      'field_settings' => $this->t('Field settings.'),
     );
   }
 
@@ -81,6 +83,9 @@ public function prepareRow(Row $row) {
     // This is for parity with the d6_field_instance plugin.
     $row->setSourceProperty('widget_type', $data['widget']['type']);
 
+    $field_data = unserialize($row->getSourceProperty('field_data'));
+    $row->setSourceProperty('field_settings', $field_data['settings']);
+
     return parent::prepareRow($row);
   }
 
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index 2fa6d5c..ad3d19c 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -110,6 +110,22 @@ protected function assertLinkFields($id, $title_setting) {
   }
 
   /**
+   * Asserts the settings of an entity reference field config entity.
+   *
+   * @param string $id
+   *   The entity ID in the form ENTITY_TYPE.BUNDLE.FIELD_NAME.
+   * @param array $target_bundles
+   *   An array of expected target bundles.
+   */
+  protected function assertEntityReferenceFields($id, $target_bundles) {
+    $field = FieldConfig::load($id);
+    $handler_settings = $field->getSetting('handler_settings');
+    $this->assertArrayHasKey('target_bundles', $handler_settings);
+    $expected_target_bundles = array_combine($target_bundles, $target_bundles);
+    $this->assertSame($expected_target_bundles, $handler_settings['target_bundles']);
+  }
+
+  /**
    * Tests migrating D7 field instances to field_config entities.
    */
   public function testFieldInstances() {
@@ -148,6 +164,10 @@ public function testFieldInstances() {
     $this->assertLinkFields('node.test_content_type.field_link', DRUPAL_OPTIONAL);
     $this->assertLinkFields('node.article.field_link', DRUPAL_DISABLED);
     $this->assertLinkFields('node.blog.field_link', DRUPAL_REQUIRED);
+
+    $this->assertEntityReferenceFields('node.article.field_tags', ['tags']);
+    $this->assertEntityReferenceFields('node.forum.taxonomy_forums', ['forums']);
+    $this->assertEntityReferenceFields('node.test_content_type.field_term_reference', ['test_vocabulary', 'tags']);
   }
 
 }
diff --git a/core/modules/field/tests/src/Unit/Plugin/migrate/process/d7/FieldInstanceSettingsTest.php b/core/modules/field/tests/src/Unit/Plugin/migrate/process/d7/FieldInstanceSettingsTest.php
index 174271a..8c405b0 100644
--- a/core/modules/field/tests/src/Unit/Plugin/migrate/process/d7/FieldInstanceSettingsTest.php
+++ b/core/modules/field/tests/src/Unit/Plugin/migrate/process/d7/FieldInstanceSettingsTest.php
@@ -28,7 +28,7 @@ public function testTransformImageSettings() {
       ->disableOriginalConstructor()
       ->getMock();
 
-    $value = $plugin->transform([[], ['type' => 'image_image']], $executable, $row, 'foo');
+    $value = $plugin->transform([[], ['type' => 'image_image'], []], $executable, $row, 'foo');
     $this->assertInternalType('array', $value['default_image']);
     $this->assertSame('', $value['default_image']['alt']);
     $this->assertSame('', $value['default_image']['title']);
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 98e5638..f2a16a1 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -3361,7 +3361,7 @@
   'storage_module' => 'field_sql_storage',
   'storage_active' => '1',
   'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:1:{s:14:"allowed_values";a:1:{i:0;a:2:{s:10:"vocabulary";s:15:"test_vocabulary";s:6:"parent";s:1:"0";}}}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:31:"field_data_field_term_reference";a:1:{s:3:"tid";s:24:"field_term_reference_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:35:"field_revision_field_term_reference";a:1:{s:3:"tid";s:24:"field_term_reference_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"20";}',
+  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:1:{s:14:"allowed_values";a:2:{i:0;a:2:{s:10:"vocabulary";s:15:"test_vocabulary";s:6:"parent";s:1:"0";}i:1;a:2:{s:10:"vocabulary";s:4:"tags";s:6:"parent";s:1:"0";}}}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:31:"field_data_field_term_reference";a:1:{s:3:"tid";s:24:"field_term_reference_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:35:"field_revision_field_term_reference";a:1:{s:3:"tid";s:24:"field_term_reference_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"20";}',
   'cardinality' => '1',
   'translatable' => '0',
   'deleted' => '0',
