diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/NodeReference.php b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/NodeReference.php
new file mode 100644
index 0000000..190531a
--- /dev/null
+++ b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/NodeReference.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Field\Plugin\migrate\cckfield\NodeReference.
+ */
+
+namespace Drupal\Core\Field\Plugin\migrate\cckfield;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+
+/**
+ * @MigrateCckField(
+ *   id = "nodereference",
+ *   type_map = {
+ *     "nodereference" = "entity_reference"
+ *   }
+ * )
+ */
+class NodeReference extends CckFieldPluginBase {
+
+  use ReferenceTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function entityId() {
+    return 'nid';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldWidgetMap() {
+    return [
+      'nodereference_select' => 'options_select',
+      'nodereference_buttons' => 'options_buttons',
+      'nodereference_autocomplete' => 'entity_reference_autocomplete'
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transformFieldStorageSettings(Row $row) {
+    $settings['target_type'] = 'node';
+    return $settings;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/ReferenceTrait.php b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/ReferenceTrait.php
new file mode 100644
index 0000000..0b03f20
--- /dev/null
+++ b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/ReferenceTrait.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\Core\Field\Plugin\migrate\cckfield;
+
+use Drupal\migrate\Entity\MigrationInterface;
+
+trait ReferenceTrait {
+
+  /**
+   * Gets the name of the field property which holds the entity ID.
+   *
+   * @return string
+   */
+  abstract protected function entityId();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {
+    $process = array(
+      'plugin' => 'iterator',
+      'source' => $field_name,
+      'process' => array(
+        'target_id' => $this->entityId(),
+      ),
+    );
+    $migration->setProcessOfProperty($field_name, $process);
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/TaxonomyTermReference.php b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/TaxonomyTermReference.php
new file mode 100644
index 0000000..e4e064d
--- /dev/null
+++ b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/TaxonomyTermReference.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Field\Plugin\migrate\cckfield\TaxonomyTermReference.
+ */
+
+namespace Drupal\Core\Field\Plugin\migrate\cckfield;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+
+/**
+ * @MigrateCckField(
+ *   id = "taxonomy_term_reference",
+ *   type_map = {
+ *     "taxonomy_term_reference" = "entity_reference"
+ *   }
+ * )
+ */
+class TaxonomyTermReference extends CckFieldPluginBase {
+
+  use ReferenceTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function entityId() {
+    return 'tid';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldWidgetMap() {
+    return [
+      'taxonomy_term_reference_select' => 'options_select',
+      'taxonomy_term_reference_buttons' => 'options_buttons',
+      'taxonomy_term_reference_autocomplete' => 'entity_reference_autocomplete'
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transformFieldStorageSettings(Row $row) {
+    $settings['target_type'] = 'taxonomy_term';
+    return $settings;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php
new file mode 100644
index 0000000..5a70db5
--- /dev/null
+++ b/core/lib/Drupal/Core/Field/Plugin/migrate/cckfield/UserReference.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Field\Plugin\migrate\cckfield\UserReference.
+ */
+
+namespace Drupal\Core\Field\Plugin\migrate\cckfield;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+
+/**
+ * @MigrateCckField(
+ *   id = "userreference",
+ *   type_map = {
+ *     "userreference" = "entity_reference"
+ *   }
+ * )
+ */
+class UserReference extends CckFieldPluginBase {
+
+  use ReferenceTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function entityId() {
+    return 'uid';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldWidgetMap() {
+    return [
+      'userreference_select' => 'options_select',
+      'userreference_buttons' => 'options_buttons',
+      'userreference_autocomplete' => 'entity_reference_autocomplete'
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transformFieldStorageSettings(Row $row) {
+    $settings['target_type'] = 'user';
+    return $settings;
+  }
+
+}
diff --git a/core/modules/field/migration_templates/d6_field.yml b/core/modules/field/migration_templates/d6_field.yml
index ec29aad..02c4261 100644
--- a/core/modules/field/migration_templates/d6_field.yml
+++ b/core/modules/field/migration_templates/d6_field.yml
@@ -127,6 +127,6 @@ process:
     source:
       - '@type'
       - global_settings
-
+      - type
 destination:
   plugin: md_entity:field_storage_config
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
index 96be489..ed9563c 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -7,9 +7,13 @@
 
 namespace Drupal\field\Plugin\migrate\process\d6;
 
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Get the field settings.
@@ -18,16 +22,57 @@
  *   id = "field_settings"
  * )
  */
-class FieldSettings extends ProcessPluginBase {
+class FieldSettings extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
-   * {@inheritdoc}
+   * The cckfield plugin manager.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $cckPluginManager;
+
+  /**
+   * Constructs a FieldSettings plugin.
    *
-   * Get the field default/mapped settings.
+   * @param array $configuration
+   *   The plugin configuration.
+   * @param string $plugin_id
+   *   The plugin ID.
+   * @param mixed $plugin_definition
+   *   The plugin definition.
+   * @param \Drupal\Component\Plugin\PluginManagerInterface $cck_plugin_manager
+   *   The cckfield plugin manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, PluginManagerInterface $cck_plugin_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->cckPluginManager = $cck_plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('plugin.manager.migrate.cckfield')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($field_type, $global_settings) = $value;
-    return $this->getSettings($field_type, $global_settings);
+    list($field_type, $global_settings, $source_field_type) = $value;
+
+    try {
+      return $this->cckPluginManager->createInstance($source_field_type)
+        ->transformFieldStorageSettings($row);
+    }
+    catch (PluginNotFoundException $e) {
+      return $this->getSettings($field_type, $global_settings);
+    }
   }
 
   /**
@@ -42,8 +87,6 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
    *   A valid array of settings.
    */
   public function getSettings($field_type, $global_settings) {
-    $max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
-    $max_length = empty($max_length) ? 255 : $max_length;
     $allowed_values = [];
     if (isset($global_settings['allowed_values'])) {
       $list = explode("\n", $global_settings['allowed_values']);
@@ -65,9 +108,6 @@ public function getSettings($field_type, $global_settings) {
     }
 
     $settings = array(
-      'text' => array(
-        'max_length' => $max_length,
-      ),
       'datetime' => array('datetime_type' => 'datetime'),
       'list_string' => array(
         'allowed_values' => $allowed_values,
diff --git a/core/modules/field/src/Tests/Migrate/d6/MigrateFieldTest.php b/core/modules/field/src/Tests/Migrate/d6/MigrateFieldTest.php
index 1eb5ad6..e663f74 100644
--- a/core/modules/field/src/Tests/Migrate/d6/MigrateFieldTest.php
+++ b/core/modules/field/src/Tests/Migrate/d6/MigrateFieldTest.php
@@ -96,6 +96,16 @@ 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 to entity reference migration.
+    $field_storage = FieldStorageConfig::load('node.field_node_reference');
+    $this->assertIdentical('entity_reference', $field_storage->getType());
+    $this->assertIdentical('node', $field_storage->getSetting('target_type'));
+
+    // User reference to entity reference migration.
+    $field_storage = FieldStorageConfig::load('node.field_user_reference');
+    $this->assertIdentical('entity_reference', $field_storage->getType());
+    $this->assertIdentical('user', $field_storage->getSetting('target_type'));
+
     // Validate that the source count and processed count match up.
     /** @var \Drupal\migrate\Entity\MigrationInterface $migration */
     $migration = Migration::load('d6_field');
diff --git a/core/modules/field/tests/src/Unit/Plugin/migrate/process/d6/FieldSettingsTest.php b/core/modules/field/tests/src/Unit/Plugin/migrate/process/d6/FieldSettingsTest.php
index c0a12dd..4365b48 100644
--- a/core/modules/field/tests/src/Unit/Plugin/migrate/process/d6/FieldSettingsTest.php
+++ b/core/modules/field/tests/src/Unit/Plugin/migrate/process/d6/FieldSettingsTest.php
@@ -7,9 +7,10 @@
 
 namespace Drupal\Tests\field\Unit\Plugin\migrate\process\d6;
 
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use Drupal\field\Plugin\migrate\process\d6\FieldSettings;
-use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Plugin\MigratePluginManager;
 use Drupal\migrate\Row;
 use Drupal\Tests\UnitTestCase;
 
@@ -24,16 +25,22 @@ class FieldSettingsTest extends UnitTestCase {
    *
    * @dataProvider getSettingsProvider
    */
-  public function testGetSettings($field_type, $field_settings, $allowed_values) {
-    $migration = $this->getMock(MigrationInterface::class);
-    $plugin = new FieldSettings([], 'd6_field_settings', [], $migration);
+  public function testGetSettings($field_type, $field_settings, $source_field_type, $allowed_values) {
+    $cck_plugin_manager = $this->getMockBuilder(MigratePluginManager::class)
+      ->disableOriginalConstructor()
+      ->getMock();
+
+    $cck_plugin_manager->method('createInstance')
+      ->willThrowException(new PluginNotFoundException($source_field_type));
+
+    $plugin = new FieldSettings([], 'd6_field_settings', [], $cck_plugin_manager);
 
     $executable = $this->getMock(MigrateExecutableInterface::class);
     $row = $this->getMockBuilder(Row::class)
       ->disableOriginalConstructor()
       ->getMock();
 
-    $result = $plugin->transform([$field_type, $field_settings], $executable, $row, 'foo');
+    $result = $plugin->transform([$field_type, $field_settings, $source_field_type], $executable, $row, 'foo');
     $this->assertSame($allowed_values, $result['allowed_values']);
   }
 
@@ -45,6 +52,7 @@ public function getSettingsProvider() {
       array(
         'list_integer',
         array('allowed_values' => "1|One\n2|Two\n3"),
+        'list_integer',
         array(
           '1' => 'One',
           '2' => 'Two',
@@ -54,16 +62,19 @@ public function getSettingsProvider() {
       array(
         'list_string',
         array('allowed_values' => NULL),
+        'list_string',
         array(),
       ),
       array(
         'list_float',
         array('allowed_values' => ""),
+        'list_float',
         array(),
       ),
       array(
         'boolean',
         array(),
+        'boolean',
         array(),
       ),
     );
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
index dbe499d..f3fd70c 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
@@ -89,4 +89,18 @@ public function processCckFieldValues(MigrationInterface $migration, $field_name
    */
   public function getFieldType(Row $row);
 
+  /**
+   * Apply any custom transformation to the field storage settings.
+   *
+   * @param \Drupal\migrate\Row $row
+   *   The field being migrated.
+   *
+   * @return array
+   *   The destination storage settings.
+   *
+   * @see Drupal\field\Plugin\migrate\process\d6\FieldSettings::transform
+   * @see Drupal\migrate\Plugin\MigrateProcessInterface::transform
+   */
+  public function transformFieldStorageSettings(Row $row);
+
 }
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
index 38b96df..e10c627 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface;
 
@@ -85,4 +86,11 @@ public function getFieldType(Row $row) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function transformFieldStorageSettings(Row $row) {
+    return [];
+  }
+
 }
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index 0f60343..6360f38 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -1998,6 +1998,90 @@
 ))
 ->execute();
 
+$connection->schema()->createTable('content_field_node_reference', array(
+  'fields' => array(
+    'vid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'nid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'field_node_reference_nid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'vid',
+    'delta',
+  ),
+  'indexes' => array(
+    'nid' => array(
+      'nid',
+    ),
+    'field_node_reference_nid' => array(
+      'field_node_reference_nid',
+    ),
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
+$connection->insert('content_field_node_reference')
+->fields(array(
+  'vid',
+  'nid',
+  'delta',
+  'field_node_reference_nid',
+))
+->values(array(
+  'vid' => '1',
+  'nid' => '1',
+  'delta' => '0',
+  'field_node_reference_nid' => 2,
+))
+->values(array(
+  'vid' => '2',
+  'nid' => '1',
+  'delta' => '0',
+  'field_node_reference_nid' => NULL,
+))
+->values(array(
+  'vid' => '3',
+  'nid' => '2',
+  'delta' => '0',
+  'field_node_reference_nid' => NULL,
+))
+->values(array(
+  'vid' => '5',
+  'nid' => '2',
+  'delta' => '0',
+  'field_node_reference_nid' => NULL,
+))
+->values(array(
+  'vid' => '12',
+  'nid' => '9',
+  'delta' => '0',
+  'field_node_reference_nid' => NULL,
+))
+->execute();
+
 $connection->schema()->createTable('content_field_test', array(
   'fields' => array(
     'vid' => array(
@@ -2228,6 +2312,90 @@
 ))
 ->execute();
 
+$connection->schema()->createTable('content_field_user_reference', array(
+  'fields' => array(
+    'vid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'nid' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+      'unsigned' => TRUE,
+    ),
+    'field_user_reference_uid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'vid',
+    'delta',
+  ),
+  'indexes' => array(
+    'nid' => array(
+      'nid',
+    ),
+    'field_user_reference_uid' => array(
+      'field_user_reference_uid',
+    ),
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
+$connection->insert('content_field_user_reference')
+->fields(array(
+  'vid',
+  'nid',
+  'delta',
+  'field_user_reference_uid',
+))
+->values(array(
+  'vid' => '1',
+  'nid' => '1',
+  'delta' => '0',
+  'field_user_reference_uid' => NULL,
+))
+->values(array(
+  'vid' => '2',
+  'nid' => '1',
+  'delta' => '0',
+  'field_user_reference_uid' => NULL,
+))
+->values(array(
+  'vid' => '3',
+  'nid' => '2',
+  'delta' => '0',
+  'field_user_reference_uid' => NULL,
+))
+->values(array(
+  'vid' => '5',
+  'nid' => '2',
+  'delta' => '0',
+  'field_user_reference_uid' => NULL,
+))
+->values(array(
+  'vid' => '12',
+  'nid' => '9',
+  'delta' => '0',
+  'field_user_reference_uid' => NULL,
+))
+->execute();
+
 $connection->schema()->createTable('content_group', array(
   'fields' => array(
     'group_type' => array(
@@ -2395,6 +2563,18 @@
   'locked' => '0',
 ))
 ->values(array(
+  'field_name' => 'field_node_reference',
+  'type' => 'nodereference',
+  'global_settings' => 'a:1:{s:19:"referenceable_types";a:9:{s:7:"article";i:0;s:7:"company";i:0;s:8:"employee";i:0;s:10:"test_event";i:0;s:9:"test_page";i:0;s:11:"test_planet";i:0;s:10:"test_story";i:0;s:7:"sponsor";i:0;s:5:"story";i:0;}}',
+  'required' => '0',
+  'multiple' => '1',
+  'db_storage' => '0',
+  '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',
   'type' => 'text',
   'global_settings' => 'a:4:{s:15:"text_processing";s:1:"1";s:10:"max_length";s:0:"";s:14:"allowed_values";s:0:"";s:18:"allowed_values_php";s:0:"";}',
@@ -2634,6 +2814,18 @@
   'active' => '1',
   'locked' => '0',
 ))
+->values(array(
+  'field_name' => 'field_user_reference',
+  'type' => 'userreference',
+  'global_settings' => 'a:2:{s:19:"referenceable_roles";a:4:{i:2;i:0;i:3;i:0;i:4;i:0;i:5;i:0;}s:20:"referenceable_status";s:0:"";}',
+  'required' => '0',
+  'multiple' => '1',
+  'db_storage' => '0',
+  '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',
+))
 ->execute();
 
 $connection->schema()->createTable('content_node_field_instance', array(
@@ -2729,6 +2921,18 @@
   'widget_active' => '1',
 ))
 ->values(array(
+  'field_name' => 'field_node_reference',
+  'type_name' => 'story',
+  'weight' => '21',
+  'label' => 'Node reference',
+  'widget_type' => 'nodereference_autocomplete',
+  'widget_settings' => 'a:4:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";s:2:"60";s:13:"default_value";a:1:{i:0;a:2:{s:3:"nid";N;s:14:"_error_element";s:55:"default_value_widget][field_node_reference][0][nid][nid";}}s:17:"default_value_php";N;}',
+  'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}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;}}',
+  'description' => '',
+  'widget_module' => 'nodereference',
+  'widget_active' => '1',
+))
+->values(array(
   'field_name' => 'field_test',
   'type_name' => 'story',
   'weight' => '1',
@@ -2992,6 +3196,18 @@
   'widget_module' => 'number',
   'widget_active' => '1',
 ))
+->values(array(
+  'field_name' => 'field_user_reference',
+  'type_name' => 'story',
+  'weight' => '20',
+  'label' => 'User reference',
+  'widget_type' => 'userreference_autocomplete',
+  'widget_settings' => 'a:5:{s:18:"autocomplete_match";s:8:"contains";s:4:"size";s:2:"60";s:12:"reverse_link";i:0;s:13:"default_value";a:1:{i:0;a:2:{s:3:"uid";N;s:14:"_error_element";s:55:"default_value_widget][field_user_reference][0][uid][uid";}}s:17:"default_value_php";N;}',
+  'display_settings' => 'a:5:{s:5:"label";a:2:{s:6:"format";s:5:"above";s:7:"exclude";i:0;}i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}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;}}',
+  'description' => '',
+  'widget_module' => 'userreference',
+  'widget_active' => '1',
+))
 ->execute();
 
 $connection->schema()->createTable('content_type_page', array(
diff --git a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php b/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
deleted file mode 100644
index d6de1ec..0000000
--- a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\taxonomy\Plugin\migrate\cckfield\TaxonomyTermReference.
- */
-
-namespace Drupal\taxonomy\Plugin\migrate\cckfield;
-
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
-
-/**
- * @MigrateCckField(
- *   id = "taxonomy_term_reference"
- * )
- */
-class TaxonomyTermReference extends CckFieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterMap() {
-    return array();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = array(
-      'plugin' => 'iterator',
-      'source' => $field_name,
-      'process' => array(
-        'target_id' => 'tid',
-      ),
-    );
-    $migration->setProcessOfProperty($field_name, $process);
-  }
-
-}
diff --git a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
index a386b5f..83b5425 100644
--- a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
+++ b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
@@ -123,4 +123,15 @@ public function getFieldType(Row $row) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function transformFieldStorageSettings(Row $row) {
+    $settings = parent::transformFieldStorageSettings($row);
+    $global_settings = $row->getSourceProperty('global_settings');
+    $max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
+    $settings['max_length'] = empty($max_length) ? 255 : $max_length;
+    return $settings;
+  }
+
 }
