diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
index 591e3d0..86587ee 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
@@ -40,6 +40,14 @@ process:
           optionwidgets_onoff: boolean
           text_textfield: text
           text_textarea: text_long
+        nodereference:
+          nodereference_select: entity_reference
+          nodereference_buttons: entity_reference
+          nodereference_autocomplete: entity_reference
+        userreference:
+          userreference_select: entity_reference
+          userreference_buttons: entity_reference
+          userreference_autocomplete: entity_reference
         email:
           email_textfield: email
         link:
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
index 20d2364..9253e8f 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
@@ -85,6 +85,14 @@ process:
             fr_1: number_decimal
             fr_2: number_decimal
             unformatted: number_unformatted
+          nodereference:
+            default: entity_reference_label
+            plain: entity_reference_label
+            full: entity_reference_label
+            teaser: entity_reference_label
+          userreference:
+            default: entity_reference_label
+            plain: entity_reference_label
           email:
             default: email_mailto
             spamspan: email_mailto
@@ -248,6 +256,20 @@ process:
             format_type: medium
           short:
             format_type: short
+        nodereference:
+          default:
+            link: true
+          plain:
+            link: false
+          full:
+            link: true
+          teaser:
+            link: true
+        userreference:
+          default:
+            link: true
+          plain:
+            link: false
         text:
           trimmed:
             trim_length: 600
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
index de74309..9a24a23 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
@@ -47,6 +47,13 @@ process:
         optionwidgets_onoff: boolean_checkbox
         optionwidgets_buttons: options_buttons
         optionwidgets_select: options_select
+        nodereference_select: options_select
+        nodereference_buttons: options_buttons
+        nodereference_autocomplete: entity_reference_autocomplete
+        userreference_select: options_select
+        userreference_buttons: options_buttons
+        userreference_autocomplete: entity_reference_autocomplete
+
   'options/settings':
     -
       plugin: field_instance_widget_settings
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php b/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
index 22fec2f..386b357 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
@@ -97,6 +97,10 @@ public function loadMultiple(EntityStorageInterface $storage, array $sub_ids = N
               case 'text':
                 $this->processTextField($field_name, $data, $migration);
                 break;
+              case 'nodereference':
+              case 'userreference':
+                $migration->setProcessOfProperty("$field_name/target_id", $field_name);
+                break;
               default:
                 $migration->setProcessOfProperty($field_name, $field_name);
             }
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
index 0003a04..42d267d 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
@@ -33,6 +33,41 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
         $settings['suffix'] = $field_settings['suffix'];
         break;
 
+      case 'nodereference_select':
+      case 'nodereference_buttons':
+      case 'nodereference_autocomplete':
+        // @todo Handle the case when node reference list is build from a view.
+        $target_bundles = !empty($field_settings['referenceable_types']) && is_array($field_settings['referenceable_types']) ? $field_settings['referenceable_types'] : array();
+        $settings = array(
+          'handler' => 'default:node',
+          'handler_settings' => array(
+            'target_bundles' => array_filter($target_bundles),
+          ),
+        );
+        break;
+
+      case 'userreference_select':
+      case 'userreference_buttons':
+      case 'userreference_autocomplete':
+        // @todo Handle the case when user reference list is build from a view.
+        // This cannot be imported due to the nature of UserSelection filters.
+        // $target_status = isset($field_settings['referenceable_status']) ? $field_settings['referenceable_status'] : '';
+        $handler_settings = array(
+          'filter' => array('type' => '_none'),
+          'include_anonymous' => TRUE,
+        );
+        $roles = !empty($field_settings['referenceable_roles']) && is_array($field_settings['referenceable_roles']) ? $field_settings['referenceable_roles'] : array();
+        if ($roles) {
+          $handler_settings['filter']['type'] = 'role';
+          $handler_settings['filter']['role'] = $roles;
+        }
+
+        $settings = array(
+          'handler' => 'default:user',
+          'handler_settings' => $handler_settings,
+        );
+        break;
+
       case 'link':
         // $settings['url'] = $widget_settings['default_value'][0]['url'];
         // D6 has optional, required, value and none. D8 only has disabled (0)
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
index fa6daa1..645044c 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\process\d6;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
@@ -41,10 +42,11 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
    * @return array
    *   A valid array of settings.
    */
-  public function getSettings($widget_type, $widget_settings) {
+  protected function getSettings($widget_type, $widget_settings) {
     $progress = isset($widget_settings['progress_indicator']) ? $widget_settings['progress_indicator'] : 'throbber';
     $size = isset($widget_settings['size']) ? $widget_settings['size'] : 60;
     $rows = isset($widget_settings['rows']) ? $widget_settings['rows'] : 5;
+    $match_operator = isset($widget_settings['autocomplete_match']) ? Unicode::strtoupper($widget_settings['autocomplete_match']) : 'CONTAINS';
 
     $settings = array(
       'text_textfield' => array(
@@ -78,6 +80,16 @@ public function getSettings($widget_type, $widget_settings) {
       'phone_textfield' => array(
         'placeholder' => '',
       ),
+      'nodereference_autocomplete' => array(
+        'match_operator' => $match_operator,
+        'size' => $size,
+        'placeholder' => '',
+      ),
+      'userreference_autocomplete' => array(
+        'match_operator' => $match_operator,
+        'size' => $size,
+        'placeholder' => '',
+      ),
     );
 
     return isset($settings[$widget_type]) ? $settings[$widget_type] : array();
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
index 9abd53b..c7efa13 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -27,7 +27,7 @@ class FieldSettings extends ProcessPluginBase {
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     list($field_type, $global_settings, $widget_settings) = $value;
-    return $this->getSettings($field_type, $global_settings, $widget_settings);
+    return $this->getSettings($field_type, $global_settings, $widget_settings, $row->getSourceProperty('type'));
   }
 
   /**
@@ -39,11 +39,13 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
    *   The field settings.
    * @param array $widget_settings
    *   The widget settings needed for some settings.
+   * @param string $source_type
+   *   The filed type of source.
    *
    * @return array
    *   A valid array of settings.
    */
-  public function getSettings($field_type, $global_settings, $widget_settings) {
+  protected function getSettings($field_type, $global_settings, $widget_settings, $source_type) {
     $max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
     $max_length = empty($max_length) ? 255 : $max_length;
     if (isset($global_settings['allowed_values'])) {
@@ -85,6 +87,9 @@ public function getSettings($field_type, $global_settings, $widget_settings) {
       'boolean' => array(
         'allowed_values' => $allowed_values,
       ),
+      'entity_reference' => array(
+        'target_type' => substr($source_type, 0, 4),
+      ),
     );
 
     return isset($settings[$field_type]) ? $settings[$field_type] : array();
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/FieldInstance.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/FieldInstance.php
index 5b42504..2f4ed31 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/FieldInstance.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/FieldInstance.php
@@ -77,6 +77,17 @@ public function prepareRow(Row $row) {
     $widget_settings = unserialize($row->getSourceProperty('widget_settings'));
     $display_settings = unserialize($row->getSourceProperty('display_settings'));
     $global_settings = unserialize($row->getSourceProperty('global_settings'));
+
+    // We convert here RIDs in role names.
+    if (isset($global_settings['referenceable_roles']) && is_array($global_settings['referenceable_roles']) && $global_settings['referenceable_roles']) {
+      $roles = $this->select('role')
+        ->fields('role', ['name'])
+        ->condition('rid', array_filter($global_settings['referenceable_roles']), 'IN')
+        ->execute()
+        ->fetchCol();
+      $global_settings['referenceable_roles'] = array_combine($roles, $roles);
+    }
+
     $row->setSourceProperty('widget_settings', $widget_settings);
     $row->setSourceProperty('display_settings', $display_settings);
     $row->setSourceProperty('global_settings', $global_settings);
diff --git a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeField.php b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeField.php
index ea76345..d1a2104 100644
--- a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeField.php
+++ b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeField.php
@@ -96,8 +96,29 @@ public function load() {
       'db_columns',
       'active',
       'locked',
-    ))
-    ->values(array(
+    ))->values(array(
+      'field_name' => 'field_test_nodereference',
+      'type' => 'nodereference',
+      'global_settings' => 'a:1:{s:19:"referenceable_types";a:3:{s:4:"page";s:4:"page";s:9:"test_page";s:9:"test_page";s:5:"story";i:0;}}',
+      'required' => '0',
+      'multiple' => '0',
+      'db_storage' => '1',
+      'module' => 'nodereference',
+      'db_columns' => 'a:1:{s:3:"nid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}',
+      'active' => '1',
+      'locked' => '0',
+    ))->values(array(
+      'field_name' => 'field_test_userreference',
+      'type' => 'userreference',
+      'global_settings' => 'a:4:{s:19:"referenceable_roles";a:5:{i:1;i:0;i:2;i:0;i:3;i:3;i:4;i:4;i:5;i:0;}s:20:"referenceable_status";i:1;s:13:"advanced_view";s:0:"";s:18:"advanced_view_args";s:0:"";}',
+      'required' => '0',
+      'multiple' => '0',
+      'db_storage' => '1',
+      'module' => 'userreference',
+      'db_columns' => 'a:1:{s:3:"uid";a:4:{s:4:"type";s:3:"int";s:8:"unsigned";b:1;s:8:"not null";b:0;s:5:"index";b:1;}}',
+      'active' => '1',
+      'locked' => '0',
+    ))->values(array(
       'field_name' => 'field_multivalue',
       'type' => 'number_decimal',
       'global_settings' => 'a:9:{s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:3:"min";s:0:"";s:3:"max";s:0:"";s:14:"allowed_values";s:0:"";s:18:"allowed_values_php";s:0:"";s:9:"precision";s:2:"10";s:5:"scale";s:1:"2";s:7:"decimal";s:1:".";}',
diff --git a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeFieldInstance.php b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeFieldInstance.php
index 1c0e592..a81d6f7 100644
--- a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeFieldInstance.php
+++ b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentNodeFieldInstance.php
@@ -96,8 +96,29 @@ public function load() {
       'description',
       'widget_module',
       'widget_active',
-    ))
-    ->values(array(
+    ))->values(array(
+      'field_name' => 'field_test_nodereference',
+      'type_name' => 'story',
+      'weight' => '5',
+      'label' => 'Node Reference Field',
+      'widget_type' => 'nodereference_autocomplete',
+      'widget_settings' => 'a:4:{s:13:"default_value";a:1:{i:0;a:1:{s:3:"nid";s:0:"";}}s:17:"default_value_php";s:0:"";s:18:"autocomplete_match";s:11:"starts_with";s:4:"size";d:80;}',
+      'display_settings' => 'a:8:{s:6:"weight";s:1:"3";s:6:"parent";s:0:"";s:5:"label";a:1:{s:6:"format";s:5:"above";}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:2;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:3;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}',
+      'description' => 'An example of node reference field.',
+      'widget_module' => 'nodereference',
+      'widget_active' => '1',
+    ))->values(array(
+      'field_name' => 'field_test_userreference',
+      'type_name' => 'story',
+      'weight' => '7',
+      'label' => 'User Reference Field',
+      'widget_type' => 'userreference_autocomplete',
+      'widget_settings' => 'a:4:{s:13:"default_value";a:1:{i:0;a:1:{s:3:"nid";s:0:"";}}s:17:"default_value_php";s:0:"";s:18:"autocomplete_match";s:11:"starts_with";s:4:"size";d:70;}',
+      'display_settings' => 'a:8:{s:6:"weight";s:1:"3";s:6:"parent";s:0:"";s:5:"label";a:1:{s:6:"format";s:5:"above";}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:2;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:3;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}',
+      'description' => 'An example of user reference field.',
+      'widget_module' => 'userreference',
+      'widget_active' => '1',
+    ))->values(array(
       'field_name' => 'field_multivalue',
       'type_name' => 'test_planet',
       'weight' => '2',
diff --git a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentTypeStory.php b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentTypeStory.php
index 74c784c..71dc71b 100644
--- a/core/modules/migrate_drupal/src/Tests/Table/d6/ContentTypeStory.php
+++ b/core/modules/migrate_drupal/src/Tests/Table/d6/ContentTypeStory.php
@@ -166,6 +166,16 @@ public function load() {
           'not null' => FALSE,
           'length' => 100,
         ),
+        'field_test_nodereference_nid' => array(
+          'type' => 'int',
+          'not null' => FALSE,
+          'unsigned' => TRUE,
+        ),
+        'field_test_userreference_uid' => array(
+          'type' => 'int',
+          'not null' => FALSE,
+          'unsigned' => TRUE,
+        ),
       ),
       'primary key' => array(
         'vid',
@@ -199,6 +209,8 @@ public function load() {
       'field_test_imagefield_fid',
       'field_test_imagefield_list',
       'field_test_imagefield_data',
+      'field_test_nodereference_nid',
+      'field_test_userreference_uid',
     ))
     ->values(array(
       'nid' => '1',
@@ -228,6 +240,8 @@ public function load() {
       'field_test_imagefield_fid' => NULL,
       'field_test_imagefield_list' => NULL,
       'field_test_imagefield_data' => NULL,
+      'field_test_nodereference_nid' => 55,
+      'field_test_userreference_uid' => 101,
     ))->values(array(
       'nid' => '1',
       'vid' => '2',
@@ -256,6 +270,8 @@ public function load() {
       'field_test_imagefield_fid' => NULL,
       'field_test_imagefield_list' => NULL,
       'field_test_imagefield_data' => NULL,
+      'field_test_nodereference_nid' => 2,
+      'field_test_userreference_uid' => 1,
     ))->values(array(
       'nid' => '2',
       'vid' => '3',
@@ -284,6 +300,8 @@ public function load() {
       'field_test_imagefield_fid' => NULL,
       'field_test_imagefield_list' => NULL,
       'field_test_imagefield_data' => NULL,
+      'field_test_nodereference_nid' => 1,
+      'field_test_userreference_uid' => 0,
     ))->values(array(
       'nid' => '2',
       'vid' => '5',
@@ -312,6 +330,8 @@ public function load() {
       'field_test_imagefield_fid' => NULL,
       'field_test_imagefield_list' => NULL,
       'field_test_imagefield_data' => NULL,
+      'field_test_nodereference_nid' => 1,
+      'field_test_userreference_uid' => 1,
     ))->execute();
   }
 
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
index 2df2499..bf259eb 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
@@ -22,7 +22,7 @@ class MigrateCckFieldValuesTest extends MigrateNodeTestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'text', 'link', 'file');
+  public static $modules = ['node', 'text', 'link', 'file', 'entity_reference'];
 
   /**
    * {@inheritdoc}
@@ -80,6 +80,26 @@ protected function setUp() {
       'field_name' => 'field_test_exclude_unset',
       'bundle' => 'story',
     ))->save();
+    entity_create('field_storage_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_nodereference',
+      'type' => 'entity_reference',
+    ))->setSettings(array('target_type' => 'node'))->save();
+    entity_create('field_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_nodereference',
+      'bundle' => 'story',
+    ))->save();
+    entity_create('field_storage_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_userreference',
+      'type' => 'entity_reference',
+    ))->setSettings(array('target_type' => 'user'))->save();
+    entity_create('field_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_userreference',
+      'bundle' => 'story',
+    ))->save();
 
     entity_create('field_storage_config', array(
       'entity_type' => 'node',
@@ -189,6 +209,12 @@ public function testCckFields() {
     $this->assertIdentical('desc', $node->field_test_filefield->description);
     $this->assertIdentical('5', $node->field_test_filefield->target_id);
 
+    // Test node reference field.
+    $this->assertIdentical('55', $node->field_test_nodereference->target_id);
+
+    // Test user reference field.
+    $this->assertIdentical('101', $node->field_test_userreference->target_id);
+
     $planet_node = Node::load(3);
     $this->assertIdentical('33.00', $planet_node->field_multivalue->value);
     $this->assertIdentical('44.00', $planet_node->field_multivalue[1]->value);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldFormatterSettingsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldFormatterSettingsTest.php
index 2175cb0..01eca3a 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldFormatterSettingsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldFormatterSettingsTest.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Entity\Entity\EntityViewMode;
 use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
 
 /**
  * Upgrade field formatter settings to entity.display.*.*.yml.
@@ -23,7 +22,7 @@ class MigrateFieldFormatterSettingsTest extends MigrateDrupal6TestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'field', 'datetime', 'image', 'text', 'link', 'file', 'telephone');
+  public static $modules = ['node', 'field', 'datetime', 'image', 'text', 'link', 'file', 'telephone', 'entity_reference'];
 
   /**
    * {@inheritdoc}
@@ -60,6 +59,8 @@ protected function setUp() {
         array(array('field_test_datestamp'), array('node', 'field_test_datestamp')),
         array(array('field_test_datetime'), array('node', 'field_test_datetime')),
         array(array('field_test_exclude_unset'), array('node', 'field_test_exclude_unset')),
+        array(array('field_test_nodereference'), array('node', 'field_test_nodereference')),
+        array(array('field_test_userreference'), array('node', 'field_test_userreference')),
       ),
     );
     $this->prepareMigrations($id_mappings);
@@ -71,6 +72,7 @@ protected function setUp() {
       $this->getDumpDirectory() . '/ContentFieldTest.php',
       $this->getDumpDirectory() . '/ContentFieldTestTwo.php',
       $this->getDumpDirectory() . '/ContentFieldMultivalue.php',
+      $this->getDumpDirectory() . '/Role.php',
     );
     $this->prepare($migration, $dumps);
     $executable = new MigrateExecutable($migration, $this);
@@ -232,6 +234,22 @@ public function testEntityDisplaySettings() {
     $this->assertIdentical($expected, $component);
     // Test that our Id map has the correct data.
     $this->assertIdentical(array('node', 'story', 'teaser', 'field_test'), entity_load('migration', 'd6_field_formatter_settings')->getIdMap()->lookupDestinationID(array('story', 'teaser', 'node', 'field_test')));
+
+    // Test node reference field.
+    $expected['weight'] = 5;
+    $expected['type'] = 'entity_reference_label';
+    $expected['settings'] = array('link' => TRUE);
+    $display = entity_load('entity_view_display', 'node.story.default');
+    $component = $display->getComponent('field_test_nodereference');
+    $this->assertIdentical($expected, $component);
+
+    // Test user reference field.
+    $expected['weight'] = 7;
+    $expected['type'] = 'entity_reference_label';
+    $expected['settings'] = array('link' => TRUE);
+    $display = entity_load('entity_view_display', 'node.story.default');
+    $component = $display->getComponent('field_test_userreference');
+    $this->assertIdentical($expected, $component);
   }
 
 }
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldInstanceTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldInstanceTest.php
index a57307e..e592604 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldInstanceTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldInstanceTest.php
@@ -8,8 +8,8 @@
 namespace Drupal\migrate_drupal\Tests\d6;
 
 use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
 use Drupal\link\LinkItemInterface;
 
 /**
@@ -32,6 +32,7 @@ class MigrateFieldInstanceTest extends MigrateDrupal6TestBase {
     'datetime',
     'node',
     'field',
+    'entity_reference',
   );
 
   /**
@@ -54,6 +55,8 @@ protected function setUp() {
         array(array('field_test_date'), array('node', 'field_test_date')),
         array(array('field_test_datestamp'), array('node', 'field_test_datestamp')),
         array(array('field_test_datetime'), array('node', 'field_test_datetime')),
+        array(array('field_test_nodereference'), array('node', 'field_test_nodereference')),
+        array(array('field_test_userreference'), array('node', 'field_test_userreference')),
       ),
       'd6_node_type' => array(
         array(array('page'), array('page')),
@@ -73,6 +76,7 @@ protected function setUp() {
       $this->getDumpDirectory() . '/ContentFieldTest.php',
       $this->getDumpDirectory() . '/ContentFieldTestTwo.php',
       $this->getDumpDirectory() . '/ContentFieldMultivalue.php',
+      $this->getDumpDirectory() . '/Role.php',
     );
     $this->createFields();
 
@@ -154,13 +158,47 @@ public function testFieldInstanceSettings() {
     $this->assertIdentical('default link title', $entity->field_test_link->title, 'Field field_test_link default title is correct.');
     $this->assertIdentical('http://drupal.org', $entity->field_test_link->url, 'Field field_test_link default title is correct.');
     $this->assertIdentical([], $entity->field_test_link->options['attributes']);
+
+    // Test a node reference field.
+    $field = FieldConfig::load('node.story.field_test_nodereference');
+    $this->assertIdentical('Node Reference Field', $field->label());
+    $expected = array(
+      'handler' => 'default:node',
+      'handler_settings' => array(
+        'target_bundles' => array(
+          'page' => 'page',
+          'test_page' => 'test_page',
+        ),
+      ),
+      'target_type' => 'node',
+    );
+    $this->assertIdentical($expected, $field->getSettings());
+
+    // Test a user reference field.
+    $field = FieldConfig::load('node.story.field_test_userreference');
+    $this->assertIdentical('User Reference Field', $field->label());
+    $expected = array(
+      'handler' => 'default:user',
+      'handler_settings' => array(
+        'filter' => array(
+          'type' => 'role',
+          'role' => array(
+            'migrate test role 1' => 'migrate test role 1',
+            'migrate test role 2' => 'migrate test role 2',
+          ),
+        ),
+        'include_anonymous' => TRUE,
+      ),
+      'target_type' => 'user',
+    );
+    $this->assertIdentical($expected, $field->getSettings());
   }
 
   /**
    * Helper to create fields.
    */
   protected function createFields() {
-    $fields = array(
+    $fields = [
       'field_test' => 'text',
       'field_test_two' => 'integer',
       'field_test_three' => 'decimal',
@@ -173,15 +211,18 @@ protected function createFields() {
       'field_test_date' => 'datetime',
       'field_test_datestamp' => 'datetime',
       'field_test_datetime' => 'datetime',
-    );
+      'field_test_nodereference' => ['entity_reference', ['target_type' => 'node']],
+      'field_test_userreference' => ['entity_reference', ['target_type' => 'user']],
+    ];
     foreach ($fields as $name => $type) {
-      entity_create('field_storage_config', array(
+      $settings = is_array($type) ? $type[1] : [];
+      $type = is_array($type) ? $type[0] : $type;
+      FieldStorageConfig::create([
         'field_name' => $name,
         'entity_type' => 'node',
         'type' => $type,
-      ))->save();
+      ])->setSettings($settings)->save();
     }
-
   }
 
 }
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
index 36051b0..5a611ea 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
@@ -9,7 +9,6 @@
 
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
 
 /**
  * Migrate fields.
@@ -23,7 +22,7 @@ class MigrateFieldTest extends MigrateDrupal6TestBase {
    *
    * @var array
    */
-  public static $modules = array('field', 'telephone', 'link', 'file', 'image', 'datetime', 'node', 'options');
+  public static $modules = ['field', 'telephone', 'link', 'file', 'image', 'datetime', 'node', 'options', 'entity_reference'];
 
   /**
    * {@inheritdoc}
@@ -114,6 +113,15 @@ public function testFields() {
     $field_storage = FieldStorageConfig::load('node.field_test_text_single_checkbox');
     $this->assertIdentical("boolean", $field_storage->getType(),  t('Field type is @fieldtype. It should be boolean.', array('@fieldtype' => $field_storage->getType())));
 
+    // Node reference field.
+    $field_storage = FieldStorageConfig::load('node.field_test_nodereference');
+    $this->assertIdentical('entity_reference', $field_storage->getType());
+    $this->assertIdentical('node', $field_storage->getSetting('target_type'));
+
+    // User reference field.
+    $field_storage = FieldStorageConfig::load('node.field_test_userreference');
+    $this->assertIdentical('entity_reference', $field_storage->getType());
+    $this->assertIdentical('user', $field_storage->getSetting('target_type'));
   }
 
 }
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
index f52b3bf..2d31752 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldWidgetSettingsTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\migrate_drupal\Tests\d6;
 
 use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
 
 /**
  * Migrate field widget settings.
@@ -30,6 +29,7 @@ class MigrateFieldWidgetSettingsTest extends MigrateDrupal6TestBase {
     'image',
     'datetime',
     'node',
+    'entity_reference',
   );
 
   /**
@@ -58,6 +58,8 @@ protected function setUp() {
         array(array('field_test_date'), array('node', 'field_test_date')),
         array(array('field_test_datestamp'), array('node', 'field_test_datestamp')),
         array(array('field_test_datetime'), array('node', 'field_test_datetime')),
+        array(array('field_test_nodereference'), array('node', 'field_test_nodereference')),
+        array(array('field_test_userreference'), array('node', 'field_test_userreference')),
       ),
     );
     $this->prepareMigrations($id_mappings);
@@ -68,6 +70,7 @@ protected function setUp() {
       $this->getDumpDirectory() . '/ContentFieldTest.php',
       $this->getDumpDirectory() . '/ContentFieldTestTwo.php',
       $this->getDumpDirectory() . '/ContentFieldMultivalue.php',
+      $this->getDumpDirectory() . '/Role.php',
     );
     $this->prepare($migration, $dumps);
     $executable = new MigrateExecutable($migration, $this);
@@ -150,6 +153,19 @@ public function testWidgetSettings() {
     $expected['weight'] = 12;
     $this->assertIdentical($expected, $component);
 
+    // Node reference fields.
+    $component = $form_display->getComponent('field_test_nodereference');
+    $expected['type'] = 'entity_reference_autocomplete';
+    $expected['weight'] = 5;
+    $expected['settings'] = array('match_operator' => 'STARTS_WITH', 'size' => 80, 'placeholder' => '');
+    $this->assertIdentical($expected, $component);
+
+    // User reference fields.
+    $component = $form_display->getComponent('field_test_userreference');
+    $expected['type'] = 'entity_reference_autocomplete';
+    $expected['weight'] = 7;
+    $expected['settings'] = array('match_operator' => 'STARTS_WITH', 'size' => 70, 'placeholder' => '');
+    $this->assertIdentical($expected, $component);
   }
 
 }
