diff --git a/core/modules/book/src/Plugin/migrate/destination/Book.php b/core/modules/book/src/Plugin/migrate/destination/Book.php
index 784e7a1..a6a4f52 100644
--- a/core/modules/book/src/Plugin/migrate/destination/Book.php
+++ b/core/modules/book/src/Plugin/migrate/destination/Book.php
@@ -22,7 +22,7 @@ class Book extends EntityContentBase {
   /**
    * {@inheritdoc}
    */
-  protected static function getEntityTypeId($plugin_id) {
+  protected function getEntityTypeId() {
     return 'node';
   }
 
diff --git a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
index 477cdcd..66536e1 100644
--- a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
+++ b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
@@ -8,7 +8,6 @@
 namespace Drupal\comment\Plugin\migrate\destination;
 
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Core\State\StateInterface;
 use Drupal\migrate\Entity\MigrationInterface;
@@ -56,10 +55,6 @@ class EntityComment extends EntityContentBase {
    *   The plugin implementation definition.
    * @param MigrationInterface $migration
    *   The migration.
-   * @param EntityStorageInterface $storage
-   *   The storage for this entity type.
-   * @param array $bundles
-   *   The list of bundles this entity type has.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
    * @param \Drupal\Core\State\StateInterface $state
@@ -67,8 +62,8 @@ class EntityComment extends EntityContentBase {
    * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query
    *   The query object that can query the given entity type.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, StateInterface $state, QueryFactory $entity_query) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager, StateInterface $state, QueryFactory $entity_query) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
     $this->state = $state;
     $this->entityQuery = $entity_query;
   }
@@ -77,14 +72,11 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type = static::getEntityTypeId($plugin_id);
     return new static(
       $configuration,
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('entity.manager')->getStorage($entity_type),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
       $container->get('entity.manager'),
       $container->get('state'),
       $container->get('entity.query')
diff --git a/core/modules/file/src/Plugin/migrate/destination/EntityFile.php b/core/modules/file/src/Plugin/migrate/destination/EntityFile.php
index 57529e1..1ce3c77 100644
--- a/core/modules/file/src/Plugin/migrate/destination/EntityFile.php
+++ b/core/modules/file/src/Plugin/migrate/destination/EntityFile.php
@@ -8,7 +8,6 @@
 namespace Drupal\file\Plugin\migrate\destination;
 
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\StreamWrapper\LocalStream;
 use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
@@ -41,7 +40,7 @@ class EntityFile extends EntityContentBase {
   /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, StreamWrapperManagerInterface $stream_wrappers, FileSystemInterface $file_system) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager, StreamWrapperManagerInterface $stream_wrappers, FileSystemInterface $file_system) {
     $configuration += array(
       'source_base_path' => '',
       'source_path_property' => 'filepath',
@@ -49,7 +48,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
       'move' => FALSE,
       'urlencode' => FALSE,
     );
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager);
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
 
     $this->streamWrapperManager = $stream_wrappers;
     $this->fileSystem = $file_system;
@@ -59,14 +58,11 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type = static::getEntityTypeId($plugin_id);
     return new static(
       $configuration,
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('entity.manager')->getStorage($entity_type),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
       $container->get('entity.manager'),
       $container->get('stream_wrapper_manager'),
       $container->get('file_system')
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 64123d6..2216b76 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Plugin\DependentPluginInterface;
 use Drupal\Core\Entity\DependencyTrait;
-use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\Row;
@@ -25,7 +25,21 @@
   use DependencyTrait;
 
   /**
-   * The entity storage.
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * The destination entity type definition.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeInterface
+   */
+  protected $entityType;
+
+  /**
+   * The entity storage handler.
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
    */
@@ -49,15 +63,16 @@
    *   The plugin implementation definition.
    * @param MigrationInterface $migration
    *   The migration.
-   * @param EntityStorageInterface $storage
-   *   The storage for this entity type.
-   * @param array $bundles
-   *   The list of bundles this entity type has.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
-    $this->storage = $storage;
-    $this->bundles = $bundles;
+    $entity_type = $this->getEntityTypeId();
+    $this->entityManager = $entity_manager;
+    $this->entityType = $entity_manager->getDefinition($entity_type);
+    $this->storage = $entity_manager->getStorage($entity_type);
+    $this->bundles = array_keys($entity_manager->getBundleInfo($entity_type));
     $this->supportsRollback = TRUE;
   }
 
@@ -65,29 +80,24 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type_id = static::getEntityTypeId($plugin_id);
     return new static(
       $configuration,
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('entity.manager')->getStorage($entity_type_id),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id))
+      $container->get('entity.manager')
     );
   }
 
   /**
-   * Finds the entity type from configuration or plugin id.
-   *
-   * @param string $plugin_id
-   *   The plugin id.
+   * Finds the entity type from the plugin ID.
    *
    * @return string
-   *   The entity type.
+   *   The entity type ID.
    */
-  protected static function getEntityTypeId($plugin_id) {
+  protected function getEntityTypeId() {
     // Remove "entity:"
-    return substr($plugin_id, 7);
+    return substr($this->getPluginId(), 7);
   }
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
index 69c9e66..f2872d7 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
@@ -9,12 +9,9 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
-use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\Row;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * The destination class for all content entities lacking a specific class.
@@ -22,52 +19,6 @@
 class EntityContentBase extends Entity {
 
   /**
-   * Entity manager.
-   *
-   * @var \Drupal\Core\Entity\EntityManagerInterface
-   */
-  protected $entityManager;
-
-  /**
-   * Constructs a content entity.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin ID for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   * @param \Drupal\migrate\Entity\MigrationInterface $migration
-   *   The migration entity.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
-   *   The storage for this entity type.
-   * @param array $bundles
-   *   The list of bundles this entity type has.
-   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager service.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles);
-    $this->entityManager = $entity_manager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type = static::getEntityTypeId($plugin_id);
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $migration,
-      $container->get('entity.manager')->getStorage($entity_type),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
-      $container->get('entity.manager')
-    );
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function import(Row $row, array $old_destination_id_values = array()) {
@@ -109,6 +60,19 @@ public function getIds() {
    *   The row object to update from.
    */
   protected function updateEntity(EntityInterface $entity, Row $row) {
+    if ($entity instanceof TranslatableInterface) {
+      $property = $this->entityType->getKey('langcode');
+
+      if ($row->hasDestinationProperty($property)) {
+        $language = $row->getDestinationProperty($property);
+
+        if (!$entity->hasTranslation($language)) {
+          $entity->addTranslation($language);
+        }
+        $entity = $entity->getTranslation($language);
+      }
+    }
+
     foreach ($row->getDestination() as $field_name => $values) {
       $field = $entity->$field_name;
       if ($field instanceof TypedDataInterface) {
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
index 8aaefef..b8774ba 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
@@ -22,9 +22,9 @@ class EntityRevision extends EntityContentBase {
   /**
    * {@inheritdoc}
    */
-  protected static function getEntityTypeId($plugin_id) {
+  protected function getEntityTypeId() {
     // Remove entity_revision:
-    return substr($plugin_id, 16);
+    return substr($this->getPluginId(), 16);
   }
 
   /**
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
index 50b004c..45e7c29 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\destination;
 
-use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\migrate\Entity\MigrationInterface;
@@ -40,15 +40,13 @@ class EntityFieldStorageConfig extends BaseEntityFieldStorageConfig {
    *   The plugin implementation definition.
    * @param MigrationInterface $migration
    *   The migration.
-   * @param EntityStorageInterface $storage
-   *   The storage for this entity type.
-   * @param array $bundles
-   *   The list of bundles this entity type has.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
    * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_plugin_manager
    *   The field type plugin manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, FieldTypePluginManagerInterface $field_type_plugin_manager) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_plugin_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
     $this->fieldTypePluginManager = $field_type_plugin_manager;
   }
 
@@ -56,14 +54,12 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type_id = static::getEntityTypeId($plugin_id);
     return new static(
       $configuration,
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('entity.manager')->getStorage($entity_type_id),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)),
+      $container->get('entity.manager'),
       $container->get('plugin.manager.field.field_type')
     );
   }
@@ -86,7 +82,7 @@ public function calculateDependencies() {
   /**
    * {@inheritdoc}
    */
-  protected static function getEntityTypeId($plugin_id) {
+  protected function getEntityTypeId() {
     return 'field_storage_config';
   }
 
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php
index 1d8f5f4..ff85842 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6TestBase.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\migrate_drupal\Tests\d6;
 
+use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\migrate\Entity\Migration;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
 
@@ -22,6 +23,7 @@
     'datetime',
     'filter',
     'image',
+    'language',
     'link',
     'node',
     'options',
@@ -107,6 +109,10 @@ protected function migrateContent($include_revisions = FALSE) {
     $this->executeMigrations(['d6_node_settings', 'd6_node:*']);
 
     if ($include_revisions) {
+      // The revision migrations include translations, so we need to install
+      // the necessary languages.
+      ConfigurableLanguage::createFromLangcode('en')->save();
+      ConfigurableLanguage::createFromLangcode('fr')->save();
       $this->executeMigrations(['d6_node_revision:*']);
     }
   }
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
index b8a4d7d..7d681a4 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\node\Plugin\migrate\source\d6;
 
+use Drupal\Core\Database\Query\Condition;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 
@@ -75,6 +76,12 @@ public function query() {
       $query->condition('type', $this->configuration['node_type']);
     }
 
+    // Do not include translations.
+    $condition = (new Condition('OR'))
+      ->where('n.tnid = n.nid')
+      ->condition('n.tnid', 0);
+    $query->condition($condition);
+
     return $query;
   }
 
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
index 8f426c0..e27227a 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Plugin\migrate\source\d6;
 
+use Drupal\migrate\Row;
+
 /**
  * Drupal 6 node revision source from database.
  *
@@ -19,7 +21,30 @@ class NodeRevision extends Node {
   /**
    * The join options between the node and the node_revisions_table.
    */
-  const JOIN = 'n.nid = nr.nid AND n.vid <> nr.vid';
+  const JOIN = 'n.nid = nr.nid';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = parent::query();
+
+    // Include translations in the selection.
+    $conditions = &$query->conditions();
+    array_pop($conditions);
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    if ($tnid = $row->getSourceProperty('tnid')) {
+      $row->setSourceProperty('nid', $tnid);
+    }
+    return parent::prepareRow($row);
+  }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeRevisionTest.php b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeRevisionTest.php
index b8ee0c2..c2ecee6 100644
--- a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeRevisionTest.php
+++ b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeRevisionTest.php
@@ -7,6 +7,9 @@
 
 namespace Drupal\node\Tests\Migrate\d6;
 
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\node\NodeInterface;
+
 /**
  * Node content revisions migration.
  *
@@ -19,6 +22,10 @@ class MigrateNodeRevisionTest extends MigrateNodeTestBase {
    */
   protected function setUp() {
     parent::setUp();
+    // The revision migrations include translations, so we need to install
+    // the necessary languages.
+    ConfigurableLanguage::createFromLangcode('en')->save();
+    ConfigurableLanguage::createFromLangcode('fr')->save();
     $this->executeMigrations(['d6_node:*', 'd6_node_revision:*']);
   }
 
@@ -26,7 +33,9 @@ protected function setUp() {
    * Test node revisions migration from Drupal 6 to 8.
    */
   public function testNodeRevision() {
-    $node = \Drupal::entityManager()->getStorage('node')->loadRevision(2);
+    $storage = \Drupal::entityManager()->getStorage('node');
+
+    $node = $storage->loadRevision(2);
     /** @var \Drupal\node\NodeInterface $node */
     $this->assertIdentical('1', $node->id());
     $this->assertIdentical('2', $node->getRevisionId());
@@ -38,12 +47,37 @@ public function testNodeRevision() {
     $this->assertIdentical('modified rev 2', $node->revision_log->value);
     $this->assertIdentical('1390095702', $node->getRevisionCreationTime());
 
-    $node = \Drupal::entityManager()->getStorage('node')->loadRevision(5);
+    $node = $storage->loadRevision(5);
     $this->assertIdentical('1', $node->id());
     $this->assertIdentical('body test rev 3', $node->body->value);
     $this->assertIdentical('1', $node->getRevisionAuthor()->id());
     $this->assertIdentical('modified rev 3', $node->revision_log->value);
     $this->assertIdentical('1390095703', $node->getRevisionCreationTime());
+
+    // Revision 12 is the default revision of node 9.
+    $node = $storage->loadRevision(12);
+    $this->assertTrue($node instanceof NodeInterface);
+    $this->assertIdentical('9', $node->id());
+    // The French translation is only introduced in rev. 13.
+    $this->assertTrue($node->hasTranslation('en'));
+    $this->assertFalse($node->hasTranslation('fr'));
+    $this->assertIdentical('The Real McCoy', $node->getTitle());
+    $this->assertIdentical("In the original, Queen's English.", $node->body->value);
+
+    // Revision 13 was part of node 10, which is a translation of node 9.
+    $node = $storage->loadRevision(13);
+    $this->assertTrue($node instanceof NodeInterface);
+    $this->assertIdentical('9', $node->id());
+    // English is the node's default language, in any revision.
+    $this->assertIdentical('en', $node->language()->getId());
+    // The English title and body did not change in this revision...
+    $this->assertIdentical('The Real McCoy', $node->getTitle());
+    $this->assertIdentical("In the original, Queen's English.", $node->body->value);
+    // ...but a French translation was introduced.
+    $this->assertTrue($node->hasTranslation('fr'));
+    $node = $node->getTranslation('fr');
+    $this->assertIdentical('Le Vrai McCoy', $node->getTitle());
+    $this->assertIdentical("Ooh là là!", $node->body->value);
   }
 
 }
diff --git a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTest.php b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTest.php
index b0f5a75..344a10c 100644
--- a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTest.php
+++ b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTest.php
@@ -8,8 +8,8 @@
 namespace Drupal\node\Tests\Migrate\d6;
 
 use Drupal\migrate\Entity\Migration;
-use Drupal\Core\Database\Database;
 use Drupal\node\Entity\Node;
+use Drupal\node\NodeInterface;
 
 /**
  * Node content migration.
@@ -54,26 +54,31 @@ public function testNode() {
     $this->assertIdentical(NULL, $node_revision->revision_log->value);
 
     // Test that we can re-import using the EntityContentBase destination.
-    $connection = Database::getConnection('default', 'migrate');
-    $connection->update('node_revisions')
+    $this->sourceDatabase->update('node_revisions')
       ->fields(array(
         'title' => 'New node title',
         'format' => 2,
       ))
       ->condition('vid', 1)
       ->execute();
-    $connection->delete('content_field_test_two')
+    $this->sourceDatabase->delete('content_field_test_two')
       ->condition('delta', 1)
       ->execute();
 
-    $migration = Migration::load('d6_node__story');
-    $this->executeMigration($migration);
+    $this->executeMigration('d6_node__story');
 
     $node = Node::load(1);
     $this->assertIdentical('New node title', $node->getTitle());
     // Test a multi-column fields are correctly upgraded.
     $this->assertIdentical('test', $node->body->value);
     $this->assertIdentical('full_html', $node->body->format);
+
+    $node = Node::load(9);
+    $this->assertTrue($node instanceof NodeInterface);
+    $this->assertIdentical('en', $node->langcode->value);
+
+    // Node 10 is a translation of node 9, and should not be imported separately.
+    $this->assertNull(Node::load(10));
   }
 
 }
diff --git a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionByNodeTypeTest.php b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionByNodeTypeTest.php
index 9e409d9..443295f 100644
--- a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionByNodeTypeTest.php
+++ b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionByNodeTypeTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Tests\node\Unit\Plugin\migrate\source\d6;
 
+use Drupal\node\Plugin\migrate\source\d6\NodeRevision;
 use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
 
 /**
@@ -16,26 +17,14 @@
  */
 class NodeRevisionByNodeTypeTest extends MigrateSqlSourceTestCase {
 
-  const PLUGIN_CLASS = 'Drupal\node\Plugin\migrate\source\d6\NodeRevision';
+  const PLUGIN_CLASS = NodeRevision::class;
 
-  // The fake Migration configuration entity.
   protected $migrationConfiguration = [
     'id' => 'test',
-    // The fake configuration for the source.
     'source' => [
       'plugin' => 'd6_node_revision',
       'node_type' => 'page',
     ],
-    'sourceIds' => [
-      'vid' => [
-        'alias' => 'v',
-      ],
-    ],
-    'destinationIds' => [
-      'vid' => [
-        // This is where the field schema would go.
-      ],
-    ],
   ];
 
   protected $databaseContents = [
@@ -123,10 +112,6 @@ class NodeRevisionByNodeTypeTest extends MigrateSqlSourceTestCase {
     ],
   ];
 
-  // There are three revisions of nid 1; vid 4 is the current one. The
-  // NodeRevision plugin should capture every revision EXCEPT that one.
-  // nid 2 will be ignored because $this->migrationConfiguration specifies
-  // a particular node type.
   protected $expectedResults = [
     [
       'nid' => 1,
@@ -172,6 +157,29 @@ class NodeRevisionByNodeTypeTest extends MigrateSqlSourceTestCase {
       'log' => 'log for revision 3 (node 1)',
       'format' => 1,
     ],
+    [
+      'nid' => 1,
+      'type' => 'page',
+      'language' => 'en',
+      'status' => 1,
+      'created' => 1279051598,
+      'changed' => 1279051598,
+      'comment' => 2,
+      'promote' => 1,
+      'moderate' => 0,
+      'sticky' => 0,
+      'tnid' => 0,
+      'translate' => 0,
+      'vid' => 4,
+      'node_uid' => 1,
+      'revision_uid' => 1,
+      'title' => 'title for revision 4 (node 1)',
+      'body' => 'body for revision 4 (node 1)',
+      'teaser' => 'teaser for revision 4 (node 1)',
+      'log' => 'log for revision 4 (node 1)',
+      'format' => 1,
+      'timestamp' => 1279051598,
+    ],
   ];
 
 }
diff --git a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionTest.php b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionTest.php
index 6982341..7bc7e8b 100644
--- a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionTest.php
+++ b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeRevisionTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Tests\node\Unit\Plugin\migrate\source\d6;
 
+use Drupal\node\Plugin\migrate\source\d6\NodeRevision;
 use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
 
 /**
@@ -16,25 +17,13 @@
  */
 class NodeRevisionTest extends MigrateSqlSourceTestCase {
 
-  const PLUGIN_CLASS = 'Drupal\node\Plugin\migrate\source\d6\NodeRevision';
+  const PLUGIN_CLASS = NodeRevision::class;
 
-  // The fake Migration configuration entity.
   protected $migrationConfiguration = [
     'id' => 'test',
-    // The fake configuration for the source.
     'source' => [
       'plugin' => 'd6_node_revision',
     ],
-    'sourceIds' => [
-      'vid' => [
-        'alias' => 'v',
-      ],
-    ],
-    'destinationIds' => [
-      'vid' => [
-        // This is where the field schema would go.
-      ],
-    ],
   ];
 
   protected $databaseContents = [
@@ -174,6 +163,52 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
       'log' => 'log for revision 3 (node 1)',
       'format' => 1,
     ],
+    [
+      'nid' => 1,
+      'type' => 'page',
+      'language' => 'en',
+      'status' => 1,
+      'created' => 1279051598,
+      'changed' => 1279051598,
+      'comment' => 2,
+      'promote' => 1,
+      'moderate' => 0,
+      'sticky' => 0,
+      'tnid' => 0,
+      'translate' => 0,
+      'vid' => 4,
+      'node_uid' => 1,
+      'revision_uid' => 1,
+      'title' => 'title for revision 4 (node 1)',
+      'body' => 'body for revision 4 (node 1)',
+      'teaser' => 'teaser for revision 4 (node 1)',
+      'log' => 'log for revision 4 (node 1)',
+      'format' => 1,
+      'timestamp' => 1279051598,
+    ],
+    [
+      'nid' => 2,
+      'type' => 'article',
+      'language' => 'en',
+      'status' => 1,
+      'created' => 1279290908,
+      'changed' => 1279308993,
+      'comment' => 0,
+      'promote' => 1,
+      'moderate' => 0,
+      'sticky' => 0,
+      'tnid' => 0,
+      'translate' => 0,
+      'vid' => 2,
+      'node_uid' => 1,
+      'revision_uid' => 1,
+      'title' => 'title for revision 2 (node 2)',
+      'body' => 'body for revision 2 (node 2)',
+      'teaser' => 'teaser for revision 2 (node 2)',
+      'log' => 'log for revision 2 (node 2)',
+      'format' => 1,
+      'timestamp' => 1279308993,
+    ],
   ];
 
 }
diff --git a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
index 5352092..7c54ba4 100644
--- a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
+++ b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php
@@ -8,7 +8,6 @@
 namespace Drupal\user\Plugin\migrate\destination;
 
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Password\PasswordInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\MigrateException;
@@ -42,10 +41,6 @@ class EntityUser extends EntityContentBase {
    *   The plugin implementation definition.
    * @param MigrationInterface $migration
    *   The migration.
-   * @param EntityStorageInterface $storage
-   *   The storage for this entity type.
-   * @param array $bundles
-   *   The list of bundles this entity type has.
    * @param \Drupal\migrate\Plugin\MigratePluginManager $plugin_manager
    *   The migrate plugin manager.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
@@ -53,8 +48,8 @@ class EntityUser extends EntityContentBase {
    * @param \Drupal\Core\Password\PasswordInterface $password
    *   The password service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, PasswordInterface $password) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager, PasswordInterface $password) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
     if (isset($configuration['md5_passwords'])) {
       $this->password = $password;
     }
@@ -64,14 +59,11 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $entity_type = static::getEntityTypeId($plugin_id);
     return new static(
       $configuration,
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('entity.manager')->getStorage($entity_type),
-      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
       $container->get('entity.manager'),
       $container->get('password')
     );
