diff --git a/core/modules/field/migration_templates/d6_field.yml b/core/modules/field/migration_templates/d6_field.yml
index 531bc13..2c2a596 100644
--- a/core/modules/field/migration_templates/d6_field.yml
+++ b/core/modules/field/migration_templates/d6_field.yml
@@ -17,6 +17,7 @@ process:
   type:
     -
       plugin: field_type
+      core: 6
       source:
         - type
         - widget_type
diff --git a/core/modules/field/migration_templates/d7_field.yml b/core/modules/field/migration_templates/d7_field.yml
old mode 100644
new mode 100755
index 3b01f54..01fc527
--- a/core/modules/field/migration_templates/d7_field.yml
+++ b/core/modules/field/migration_templates/d7_field.yml
@@ -13,7 +13,8 @@ process:
   langcode: 'constants/langcode'
   field_name: field_name
   type:
-    plugin: static_map
+    plugin: field_type
+    core: 7
     source: type
     map:
       date: datetime
@@ -30,8 +31,6 @@ process:
       number_decimal: decimal
       number_float: float
       phone: telephone
-      taxonomy_term_reference: entity_reference
-      text: text
       text_long: text_long
       text_with_summary: text_with_summary
   translatable: translatable
diff --git a/core/modules/field/src/Plugin/migrate/process/FieldType.php b/core/modules/field/src/Plugin/migrate/process/FieldType.php
new file mode 100644
index 0000000..c20055e
--- /dev/null
+++ b/core/modules/field/src/Plugin/migrate/process/FieldType.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Plugin\migrate\process\FieldType.
+ */
+
+namespace Drupal\field\Plugin\migrate\process;
+
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Plugin\migrate\process\StaticMap;
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "field_type"
+ * )
+ */
+class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
+
+  /**
+   * The cckfield plugin manager.
+   *
+   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager
+   */
+  protected $cckPluginManager;
+
+  /**
+   * Constructs a FieldType plugin.
+   *
+   * @param array $configuration
+   *   The plugin configuration.
+   * @param string $plugin_id
+   *   The plugin ID.
+   * @param mixed $plugin_definition
+   *   The plugin definition.
+   * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager $cck_plugin_manager
+   *   The CCK plugin manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrateCckFieldPluginManager $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) {
+    $field_type = is_array($value) ? $value[0] : $value;
+
+    try {
+      return $this->cckPluginManager->createInstance($field_type, ['core' => $this->configuration['core']])->getFieldType($row);
+    }
+    catch (PluginNotFoundException $e) {
+      return parent::transform($value, $migrate_executable, $row, $destination_property);
+    }
+  }
+
+}
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldType.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldType.php
deleted file mode 100644
index 3511a3a..0000000
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldType.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-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\Plugin\migrate\process\StaticMap;
-use Drupal\migrate\Row;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * @MigrateProcessPlugin(
- *   id = "field_type"
- * )
- */
-class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
-
-  /**
-   * The cckfield plugin manager.
-   *
-   * @var \Drupal\Component\Plugin\PluginManagerInterface
-   */
-  protected $cckPluginManager;
-
-  /**
-   * Constructs a FieldType plugin.
-   *
-   * @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, $widget_type) = $value;
-
-    try {
-      return $this->cckPluginManager->createInstance($field_type)
-        ->getFieldType($row);
-    }
-    catch (PluginNotFoundException $e) {
-      return parent::transform($value, $migrate_executable, $row, $destination_property);
-    }
-  }
-
-}
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php b/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
index 066d6e1..d63b9c2 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
@@ -8,7 +8,8 @@
 
 /**
  * @MigrateCckField(
- *   id = "filefield"
+ *   id = "filefield",
+ *   core = {6}
  * )
  */
 class FileField extends CckFieldPluginBase {
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php b/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
index 6e3780e..d0b1335 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
@@ -9,6 +9,7 @@
 /**
  * @MigrateCckField(
  *   id = "file",
+ *   core = {7}
  * )
  */
 class FileField extends CckFieldPluginBase {
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php b/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
index 7a82a15..7f47caa 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
@@ -7,7 +7,8 @@
 
 /**
  * @MigrateCckField(
- *   id = "image"
+ *   id = "image",
+ *   core = {7}
  * )
  */
 class ImageField extends CckFieldPluginBase {
diff --git a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php b/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php
index f3b5d14..47b3830 100644
--- a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php
+++ b/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php
@@ -7,7 +7,11 @@
 
 /**
  * @MigrateCckField(
- *   id = "link"
+ *   id = "link",
+ *   core = {6},
+ *   type_map = {
+ *     "link_field" = "link"
+ *   }
  * )
  */
 class LinkField extends CckFieldPluginBase {
diff --git a/core/modules/migrate_drupal/migrate_drupal.services.yml b/core/modules/migrate_drupal/migrate_drupal.services.yml
index 2807b5f..71a0b27 100644
--- a/core/modules/migrate_drupal/migrate_drupal.services.yml
+++ b/core/modules/migrate_drupal/migrate_drupal.services.yml
@@ -1,6 +1,6 @@
 services:
   plugin.manager.migrate.cckfield:
-    class: Drupal\migrate\Plugin\MigratePluginManager
+    class: Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager
     arguments:
       - cckfield
       - '@container.namespaces'
diff --git a/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php b/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
index 39b545f..5e5a500 100644
--- a/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
+++ b/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
@@ -8,9 +8,10 @@
  * Defines a cckfield plugin annotation object.
  *
  * cckfield plugins are variously responsible for handling the migration of
- * CCK fields from Drupal 6 to Drupal 8. They are allowed to alter CCK-related
- * migrations when migrations are being generated, and can compute destination
- * field types for individual fields during the actual migration process.
+ * CCK fields from Drupal 6 to Drupal 8, and Field API fields from Drupal 7
+ * to Drupal 8. They are allowed to alter CCK-related migrations when migrations
+ * are being generated, and can compute destination field types for individual
+ * fields during the actual migration process.
  *
  * Plugin Namespace: Plugin\migrate\cckfield
  *
@@ -19,6 +20,17 @@
 class MigrateCckField extends Plugin {
 
   /**
+   * @inheritdoc
+   */
+  public function __construct($values) {
+    parent::__construct($values);
+    // Provide default value for core property, in case it's missing.
+    if (empty($this->definition['core'])) {
+      $this->definition['core'] = [6];
+    }
+  }
+
+  /**
    * The plugin ID.
    *
    * @var string
@@ -32,4 +44,11 @@ class MigrateCckField extends Plugin {
    */
   public $type_map = [];
 
+  /**
+   * The Drupal core version(s) this plugin applies to.
+   *
+   * @var int[]
+   */
+  public $core = [];
+
 }
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php
new file mode 100644
index 0000000..bb5c303
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager.
+ */
+
+
+namespace Drupal\migrate_drupal\Plugin;
+
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\migrate\Plugin\MigratePluginManager;
+use Drupal\migrate\Plugin\MigrationInterface;
+
+/**
+ * Plugin manager for migrate cckfield plugins.
+ *
+ * @see \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
+ * @see \Drupal\migrate\Annotation\MigrateCckField
+ * @see plugin_api
+ *
+ * @ingroup migration
+ */
+class MigrateCckFieldPluginManager extends MigratePluginManager {
+
+  /**
+   * {@inheritdoc}
+   *
+   * A specific createInstance method is necessary to pass the migration on.
+   */
+  public function createInstance($field_type, array $configuration = array(), MigrationInterface $migration = NULL) {
+    foreach ($this->getDefinitions() as $plugin_id => $definition) {
+      if (in_array($configuration['core'], $definition['core'])) {
+        if (array_key_exists($field_type, $definition['type_map']) || $field_type === $plugin_id) {
+          return parent::createInstance($plugin_id, $configuration, $migration);
+        }
+      }
+    }
+    throw new PluginNotFoundException($field_type);
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
index d521e0d..b737984 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
@@ -9,6 +9,7 @@
 use Drupal\migrate\Plugin\Migration;
 use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
 use Drupal\migrate\Plugin\RequirementsInterface;
+use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -36,6 +37,13 @@ class CckMigration extends Migration implements ContainerFactoryPluginInterface
    * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[]
    */
   protected $cckPluginCache;
+  
+  /**
+   * The CCK plugin manager.
+   *
+   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager
+   */
+  protected $cckPluginManager;
 
   /**
    * Constructs a CckMigration.
@@ -46,7 +54,7 @@ class CckMigration extends Migration implements ContainerFactoryPluginInterface
    *   The plugin ID.
    * @param mixed $plugin_definition
    *   The plugin definition.
-   * @param \Drupal\migrate\Plugin\MigratePluginManager $cck_manager
+   * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager $cck_manager
    *   The cckfield plugin manager.
    * @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager
    *   The migration plugin manager.
@@ -59,7 +67,7 @@ class CckMigration extends Migration implements ContainerFactoryPluginInterface
    * @param \Drupal\migrate\Plugin\MigratePluginManager $idmap_plugin_manager
    *   The ID map migration plugin manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigratePluginManager $cck_manager, MigrationPluginManagerInterface $migration_plugin_manager, MigratePluginManager $source_plugin_manager, MigratePluginManager $process_plugin_manager, MigrateDestinationPluginManager $destination_plugin_manager, MigratePluginManager $idmap_plugin_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrateCckFieldPluginManager $cck_manager, MigrationPluginManagerInterface $migration_plugin_manager, MigratePluginManager $source_plugin_manager, MigratePluginManager $process_plugin_manager, MigrateDestinationPluginManager $destination_plugin_manager, MigratePluginManager $idmap_plugin_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition, $migration_plugin_manager, $source_plugin_manager, $process_plugin_manager, $destination_plugin_manager, $idmap_plugin_manager);
     $this->cckPluginManager = $cck_manager;
   }
@@ -99,12 +107,16 @@ public function getProcess() {
       }
       foreach ($source_plugin as $row) {
         $field_type = $row->getSourceProperty('type');
+        $core = $row->getSourceProperty('core');
+        if (empty($core)) {
+          $core = '6';
+        }
         if (!isset($this->processedFieldTypes[$field_type]) && $this->cckPluginManager->hasDefinition($field_type)) {
           $this->processedFieldTypes[$field_type] = TRUE;
           // Allow the cckfield plugin to alter the migration as necessary so
           // that it knows how to handle fields of this type.
           if (!isset($this->cckPluginCache[$field_type])) {
-            $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $this);
+            $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, ['core' => $core], $this);
           }
           call_user_func([$this->cckPluginCache[$field_type], $this->pluginDefinition['cck_plugin_method']], $this);
         }
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.info.yml b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.info.yml
new file mode 100644
index 0000000..8449e1a
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.info.yml
@@ -0,0 +1,6 @@
+name: 'Migrate cck field plugin manager test'
+type: module
+description: 'Example module demonstrating the cck field plugin manager in the Migrate API.'
+package: Testing
+version: VERSION
+core: 8.x
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php
new file mode 100644
index 0000000..5e58e62
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield\D6FileField.
+ */
+
+namespace Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield;
+
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+use Drupal\migrate\Plugin\MigrationInterface;
+
+/**
+ * @MigrateCckField(
+ *   id = "d6_file",
+ *   core = {6},
+ *   type_map = {
+ *     "file" = "file"
+ *   }
+ * )
+ */
+class D6FileField extends CckFieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {}
+
+}
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php
new file mode 100644
index 0000000..145f876
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield\D6NoCoreVersionSpecified.
+ */
+
+namespace Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield;
+
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+use Drupal\migrate\Plugin\MigrationInterface;
+
+/**
+ * @MigrateCckField(
+ *   id = "d6_no_core_version_specified"
+ * )
+ */
+class D6NoCoreVersionSpecified extends CckFieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {}
+
+}
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php b/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php
new file mode 100644
index 0000000..4360282
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\migrate_drupal\Kernel\MigrateCckFieldPluginManagerTest.
+ */
+
+namespace Drupal\Tests\migrate_drupal\Kernel;
+
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+
+/**
+ * Tests the cck field plugin manager.
+ *
+ * @group migrate_drupal
+ */
+class MigrateCckFieldPluginManagerTest extends MigrateDrupalTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = array('system', 'user', 'field', 'migrate_drupal', 'options', 'file', 'text', 'migrate_cckfield_plugin_manager_test');
+
+  /**
+   * Tests that the correct MigrateCckField plugins are used.
+   */
+  public function testPluginSelection() {
+    $plugin_manager = \Drupal::service('plugin.manager.migrate.cckfield');
+
+    $this->assertIdentical('Drupal\\file\\Plugin\\migrate\\cckfield\\d6\\FileField', get_class($plugin_manager->createInstance('filefield', ['core' => 6])));
+
+    try {
+      // If this test passes, createInstance will raise a
+      // PluginNotFoundException and we'll never reach fail().
+      $plugin_manager->createInstance('filefield', ['core' => 7]);
+      $this->fail('Expected Drupal\Component\Plugin\Exception\PluginNotFoundException.');
+    }
+    catch (PluginNotFoundException $e) {
+      $this->assertIdentical($e->getMessage(), "Plugin ID 'filefield' was not found.");
+    }
+
+    $this->assertIdentical('Drupal\\file\\Plugin\\migrate\\cckfield\\d7\\ImageField', get_class($plugin_manager->createInstance('image', ['core' => 7])));
+    $this->assertIdentical('Drupal\\file\\Plugin\\migrate\\cckfield\\d7\\FileField', get_class($plugin_manager->createInstance('file', ['core' => 7])));
+    $this->assertIdentical('Drupal\\migrate_cckfield_plugin_manager_test\\Plugin\\migrate\\cckfield\\D6FileField', get_class($plugin_manager->createInstance('file', ['core' => 6])));
+
+    $this->assertIdentical('Drupal\\text\\Plugin\\migrate\\cckfield\\TextField', get_class($plugin_manager->createInstance('text', ['core' => 6])));
+    $this->assertIdentical('Drupal\\text\\Plugin\\migrate\\cckfield\\TextField', get_class($plugin_manager->createInstance('text', ['core' => 7])));
+
+    // Test fallback when no core version is specified.
+    $this->assertIdentical('Drupal\\migrate_cckfield_plugin_manager_test\\Plugin\\migrate\\cckfield\\D6NoCoreVersionSpecified', get_class($plugin_manager->createInstance('d6_no_core_version_specified', ['core' => 6])));
+
+    try {
+      // If this test passes, createInstance will raise a
+      // PluginNotFoundException and we'll never reach fail().
+      $plugin_manager->createInstance('d6_no_core_version_specified', ['core' => 7]);
+      $this->fail('Expected Drupal\Component\Plugin\Exception\PluginNotFoundException.');
+    }
+    catch (PluginNotFoundException $e) {
+      $this->assertIdentical($e->getMessage(), "Plugin ID 'd6_no_core_version_specified' was not found.");
+    }
+  }
+
+}
diff --git a/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php b/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
index d586efd..c15ada9 100644
--- a/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
+++ b/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
@@ -3,11 +3,11 @@
 namespace Drupal\node\Plugin\migrate;
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
-use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Database\DatabaseExceptionWrapper;
 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
 use Drupal\migrate\Exception\RequirementsException;
 use Drupal\migrate\Plugin\MigrationDeriverTrait;
+use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -33,7 +33,7 @@ class D6NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
   /**
    * The CCK plugin manager.
    *
-   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager
    */
   protected $cckPluginManager;
 
@@ -42,10 +42,10 @@ class D6NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
    *
    * @param string $base_plugin_id
    *   The base plugin ID for the plugin ID.
-   * @param \Drupal\Component\Plugin\PluginManagerInterface $cck_manager
+   * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager $cck_manager
    *   The CCK plugin manager.
    */
-  public function __construct($base_plugin_id, PluginManagerInterface $cck_manager) {
+  public function __construct($base_plugin_id, MigrateCckFieldPluginManager $cck_manager) {
     $this->basePluginId = $base_plugin_id;
     $this->cckPluginManager = $cck_manager;
   }
@@ -111,7 +111,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
             $field_type = $info['type'];
             if ($this->cckPluginManager->hasDefinition($info['type'])) {
               if (!isset($this->cckPluginCache[$field_type])) {
-                $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $migration);
+                $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, ['core' => 6], $migration);
               }
               $this->cckPluginCache[$field_type]
                 ->processCckFieldValues($migration, $field_name, $info);
diff --git a/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php b/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
index 3809c03..a88b427 100644
--- a/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
+++ b/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
@@ -3,11 +3,11 @@
 namespace Drupal\node\Plugin\migrate;
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
-use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Database\DatabaseExceptionWrapper;
 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
 use Drupal\migrate\Exception\RequirementsException;
 use Drupal\migrate\Plugin\MigrationDeriverTrait;
+use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -33,7 +33,7 @@ class D7NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
   /**
    * The CCK plugin manager.
    *
-   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager
    */
   protected $cckPluginManager;
 
@@ -42,10 +42,10 @@ class D7NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
    *
    * @param string $base_plugin_id
    *   The base plugin ID for the plugin ID.
-   * @param \Drupal\Component\Plugin\PluginManagerInterface $cck_manager
+   * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManager $cck_manager
    *   The CCK plugin manager.
    */
-  public function __construct($base_plugin_id, PluginManagerInterface $cck_manager) {
+  public function __construct($base_plugin_id, MigrateCckFieldPluginManager $cck_manager) {
     $this->basePluginId = $base_plugin_id;
     $this->cckPluginManager = $cck_manager;
   }
@@ -99,7 +99,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
             $field_type = $info['type'];
             if ($this->cckPluginManager->hasDefinition($field_type)) {
               if (!isset($this->cckPluginCache[$field_type])) {
-                $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $migration);
+                $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, ['core' => 7], $migration);
               }
               $this->cckPluginCache[$field_type]
                 ->processCckFieldValues($migration, $field_name, $info);
diff --git a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php b/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
index 6971b54..c3035c4 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
@@ -7,7 +7,11 @@
 
 /**
  * @MigrateCckField(
- *   id = "taxonomy_term_reference"
+ *   id = "taxonomy_term_reference",
+ *   type_map = {
+ *     "taxonomy_term_reference" = "entity_reference"
+ *   },
+ *   core = {6,7}
  * )
  */
 class TaxonomyTermReference extends CckFieldPluginBase {
diff --git a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
index 523ffca..cc4c1ec 100644
--- a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
+++ b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
@@ -8,7 +8,13 @@
 
 /**
  * @MigrateCckField(
- *   id = "text"
+ *   id = "text",
+ *   type_map = {
+ *     "text" = "text",
+ *     "text_long" = "text_long",
+ *     "text_with_summary" = "text_with_summary"
+ *   },
+ *   core = {6,7}
  * )
  */
 class TextField extends CckFieldPluginBase {
@@ -113,6 +119,7 @@ public function getFieldType(Row $row) {
         case 'text_textarea':
           return 'text_long';
         default:
+          return parent::getFieldType($row);
           break;
       }
     }
