diff --git a/core/modules/node/migrations/d6_node_revision.yml b/core/modules/content_translation/migrations/d6_node_revision_translation.yml
similarity index 59%
copy from core/modules/node/migrations/d6_node_revision.yml
copy to core/modules/content_translation/migrations/d6_node_revision_translation.yml
index 732c9abe27..00fe82ca5d 100644
--- a/core/modules/node/migrations/d6_node_revision.yml
+++ b/core/modules/content_translation/migrations/d6_node_revision_translation.yml
@@ -1,16 +1,20 @@
-id: d6_node_revision
-label: Node revisions
-audit: true
+id: d6_node_revision_translation
+label: Node revision translations
 migration_tags:
   - Drupal 6
+  - translation
   - Content
+  - Multilingual
 deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
 source:
   plugin: d6_node_revision
+  translations: true
+  constants:
+    revision_translation_affected: true
 process:
   # If you are using this file to build a custom migration consider removing
-  # the nid and vid fields to allow incremental migrations.
-  nid: nid
+  # the nid field to allow incremental migrations.
+  nid: tnid
   vid: vid
   langcode:
     plugin: default_value
@@ -32,12 +36,12 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
-
-#  unmapped d6 fields.
-#  tnid
-#  translate
-#  moderate
-#  comment
-
+  content_translation_source: source_langcode
+  revision_translation_affected: constants/revision_translation_affected
 destination:
   plugin: entity_revision:node
+  translations: true
+  destination_module: content_translation
+migration_dependencies:
+  required:
+    - d6_node_translation
diff --git a/core/modules/node/migrations/d7_node_revision.yml b/core/modules/content_translation/migrations/d7_node_revision_translation.yml
similarity index 61%
copy from core/modules/node/migrations/d7_node_revision.yml
copy to core/modules/content_translation/migrations/d7_node_revision_translation.yml
index 7310b0d5b0..453f2d56ab 100644
--- a/core/modules/node/migrations/d7_node_revision.yml
+++ b/core/modules/content_translation/migrations/d7_node_revision_translation.yml
@@ -1,16 +1,18 @@
-id: d7_node_revision
-label: Node revisions
-audit: true
+id: d7_node_revision_translation
+label: Node revision translations
 migration_tags:
   - Drupal 7
+  - translation
   - Content
+  - Multilingual
 deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
 source:
   plugin: d7_node_revision
+  translations: true
 process:
   # If you are using this file to build a custom migration consider removing
-  # the nid and vid fields to allow incremental migrations.
-  nid: nid
+  # the nid field to allow incremental migrations.
+  nid: tnid
   vid: vid
   langcode:
     plugin: default_value
@@ -26,8 +28,13 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
+  content_translation_source: source_langcode
 destination:
   plugin: entity_revision:node
+  translations: true
+  content_translation_update_definitions:
+    - node
+  destination_module: content_translation
 migration_dependencies:
   required:
-    - d7_node
+    - d7_node_translation
diff --git a/core/modules/file/migrations/d6_upload.yml b/core/modules/file/migrations/d6_upload.yml
index 1c34e5873c..a4e1dedf61 100644
--- a/core/modules/file/migrations/d6_upload.yml
+++ b/core/modules/file/migrations/d6_upload.yml
@@ -7,7 +7,6 @@ source:
   plugin: d6_upload
 process:
   nid: nid
-  vid: vid
   langcode:
     plugin: user_langcode
     source: language
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
index 3e18d28b1a..bd16073c9d 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
@@ -220,6 +220,9 @@ protected function updateEntity(EntityInterface $entity, Row $row) {
         $language = $row->getDestinationProperty($property);
         if (!$entity->hasTranslation($language)) {
           $entity->addTranslation($language);
+          if ($this->storage->getEntityType()->isRevisionable()) {
+            $entity->setNewRevision(TRUE);
+          }
 
           // We're adding a translation, so delete it on rollback.
           $rollback_action = MigrateIdMapInterface::ROLLBACK_DELETE;
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index bdbcda11d3..86f835f287 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -3066,6 +3066,18 @@
   'active' => '1',
   'locked' => '0',
 ))
+->values(array(
+  'field_name' => 'field_text_field',
+  'type' => 'text',
+  'global_settings' => 'a:4:{s:15:"text_processing";s:1:"0";s:10:"max_length";s:0:"";s:14:"allowed_values";s:0:"";s:18:"allowed_values_php";s:0:"";}',
+  'required' => '0',
+  'multiple' => '0',
+  'db_storage' => '1',
+  'module' => 'text',
+  'db_columns' => 'a:1:{s:5:"value";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"normal";s:8:"not null";b:0;s:8:"sortable";b:1;s:5:"views";b:1;}}',
+  'active' => '1',
+  'locked' => '0',
+))
 ->execute();
 $connection->schema()->createTable('content_node_field_instance', array(
   'fields' => array(
@@ -3519,6 +3531,18 @@
   'widget_module' => 'number',
   'widget_active' => '1',
 ))
+->values(array(
+  'field_name' => 'field_text_field',
+  'type_name' => 'page',
+  'weight' => '31',
+  'label' => 'Text',
+  'widget_type' => 'text_textfield',
+  'widget_settings' => 'a:4:{s:4:"rows";i:5;s:4:"size";s:2:"60";s:13:"default_value";a:1:{i:0;a:2:{s:5:"value";s:0:"";s:14:"_error_element";s:48:"default_value_widget][field_text_field][0][value";}}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' => 'text',
+  'widget_active' => '1',
+))
 ->execute();
 $connection->schema()->createTable('content_type_employee', array(
   'fields' => array(
@@ -3673,21 +3697,28 @@
 ->values(array(
   'vid' => '13',
   'nid' => '10',
-  'field_text_field_value' => NULL,
+  'field_text_field_value' => 'McCoy first revision (en)',
   'field_reference_nid' => '13',
   'field_reference_2_nid' => '13',
 ))
 ->values(array(
   'vid' => '14',
   'nid' => '11',
-  'field_text_field_value' => NULL,
+  'field_text_field_value' => 'McCoy first revision (fr)',
   'field_reference_nid' => '20',
   'field_reference_2_nid' => '20',
 ))
 ->values(array(
+  'vid' => '15',
+  'nid' => '12',
+  'field_text_field_value' => 'Zulu first revision (zu)',
+  'field_reference_nid' => NULL,
+  'field_reference_2_nid' => NULL,
+))
+->values(array(
   'vid' => '16',
   'nid' => '13',
-  'field_text_field_value' => NULL,
+  'field_text_field_value' => 'Zulu first revision (en)',
   'field_reference_nid' => '10',
   'field_reference_2_nid' => '10',
 ))
@@ -3698,7 +3729,34 @@
   'field_reference_nid' => '11',
   'field_reference_2_nid' => '11',
 ))
-->execute();
+->values(array(
+  'vid' => '24',
+  'nid' => '10',
+  'field_text_field_value' => 'McCoy current revision (en)',
+  'field_reference_nid' => '13',
+  'field_reference_2_nid' => '13',
+))
+->values(array(
+  'vid' => '25',
+  'nid' => '11',
+  'field_text_field_value' => 'McCoy current revision (fr)',
+  'field_reference_nid' => '20',
+  'field_reference_2_nid' => '20',
+))
+->values(array(
+  'vid' => '26',
+  'nid' => '12',
+  'field_text_field_value' => 'Zulu current revision (zu)',
+  'field_reference_nid' => NULL,
+  'field_reference_2_nid' => NULL,
+))
+->values(array(
+  'vid' => '27',
+  'nid' => '13',
+  'field_text_field_value' => 'Zulu current revision (en)',
+  'field_reference_nid' => '10',
+  'field_reference_2_nid' => '10',
+))->execute();
 $connection->schema()->createTable('content_type_story', array(
   'fields' => array(
     'nid' => array(
@@ -43993,14 +44051,14 @@
 ))
 ->values(array(
   'nid' => '10',
-  'vid' => '13',
+  'vid' => '24',
   'type' => 'page',
   'language' => 'en',
   'title' => 'The Real McCoy',
   'uid' => '1',
   'status' => '1',
   'created' => '1444238800',
-  'changed' => '1444238808',
+  'changed' => '1521927089',
   'comment' => '2',
   'promote' => '1',
   'moderate' => '0',
@@ -44010,14 +44068,14 @@
 ))
 ->values(array(
   'nid' => '11',
-  'vid' => '14',
+  'vid' => '25',
   'type' => 'page',
   'language' => 'fr',
   'title' => 'Le Vrai McCoy',
   'uid' => '1',
   'status' => '1',
   'created' => '1444239050',
-  'changed' => '1444239050',
+  'changed' => '1521927113',
   'comment' => '2',
   'promote' => '1',
   'moderate' => '0',
@@ -44027,14 +44085,14 @@
 ))
 ->values(array(
   'nid' => '12',
-  'vid' => '15',
+  'vid' => '26',
   'type' => 'page',
   'language' => 'zu',
   'title' => 'Abantu zulu',
   'uid' => '1',
   'status' => '1',
   'created' => '1444238800',
-  'changed' => '1444238808',
+  'changed' => '1521927131',
   'comment' => '0',
   'promote' => '0',
   'moderate' => '0',
@@ -44044,14 +44102,14 @@
 ))
 ->values(array(
   'nid' => '13',
-  'vid' => '16',
+  'vid' => '27',
   'type' => 'page',
   'language' => 'en',
   'title' => 'The Zulu People',
   'uid' => '1',
   'status' => '1',
   'created' => '1444239050',
-  'changed' => '1444239050',
+  'changed' => '1521927148',
   'comment' => '0',
   'promote' => '0',
   'moderate' => '0',
@@ -44775,10 +44833,10 @@
   'nid' => '10',
   'vid' => '13',
   'uid' => '1',
-  'title' => 'The Real McCoy',
+  'title' => 'The Real McCoy (first revision)',
   'body' => "In the original, Queen's English.",
   'teaser' => "In the original, Queen's English.",
-  'log' => '',
+  'log' => 'First revision (en)',
   'timestamp' => '1444238808',
   'format' => '1',
 ))
@@ -44786,10 +44844,10 @@
   'nid' => '11',
   'vid' => '14',
   'uid' => '1',
-  'title' => 'Le Vrai McCoy',
+  'title' => 'Le Vrai McCoy (first revision)',
   'body' => 'Ooh là là!',
   'teaser' => 'Ooh là là!',
-  'log' => '',
+  'log' => 'First revision (fr)',
   'timestamp' => '1444239050',
   'format' => '1',
 ))
@@ -44797,10 +44855,10 @@
   'nid' => '12',
   'vid' => '15',
   'uid' => '1',
-  'title' => 'Abantu zulu',
+  'title' => 'Abantu zulu (first revision)',
   'body' => 'Mr. Crusher, ready a collision course with the Borg ship.',
   'teaser' => 'Mr. Crusher, ready a collision course with the Borg ship.',
-  'log' => '',
+  'log' => 'First revision (zu)',
   'timestamp' => '1444238808',
   'format' => '1',
 ))
@@ -44808,10 +44866,10 @@
   'nid' => '13',
   'vid' => '16',
   'uid' => '1',
-  'title' => 'The Zulu People',
+  'title' => 'The Zulu People (first revision)',
   'body' => 'Mr. Crusher, ready a collision course with the Borg ship.',
   'teaser' => 'Mr. Crusher, ready a collision course with the Borg ship.',
-  'log' => '',
+  'log' => 'First revision (en)',
   'timestamp' => '1444239050',
   'format' => '1',
 ))
@@ -44925,6 +44983,50 @@
   'timestamp' => '1534014687',
   'format' => '1',
 ))
+->values(array(
+  'nid' => '10',
+  'vid' => '24',
+  'uid' => '1',
+  'title' => 'The Real McCoy',
+  'body' => "In the original, Queen's English.",
+  'teaser' => "In the original, Queen's English.",
+  'log' => 'Current revision (en)',
+  'timestamp' => '1521927089',
+  'format' => '1',
+))
+->values(array(
+  'nid' => '11',
+  'vid' => '25',
+  'uid' => '1',
+  'title' => 'Le Vrai McCoy',
+  'body' => 'Ooh là là!',
+  'teaser' => 'Ooh là là!',
+  'log' => 'Current revision (fr)',
+  'timestamp' => '1521927113',
+  'format' => '1',
+))
+->values(array(
+  'nid' => '12',
+  'vid' => '26',
+  'uid' => '1',
+  'title' => 'Abantu zulu',
+  'body' => 'Mr. Crusher, ready a collision course with the Borg ship.',
+  'teaser' => 'Mr. Crusher, ready a collision course with the Borg ship.',
+  'log' => 'Current revision (zu)',
+  'timestamp' => '1521927131',
+  'format' => '1',
+))
+->values(array(
+  'nid' => '13',
+  'vid' => '27',
+  'uid' => '1',
+  'title' => 'The Zulu People',
+  'body' => 'Mr. Crusher, ready a collision course with the Borg ship.',
+  'teaser' => 'Mr. Crusher, ready a collision course with the Borg ship.',
+  'log' => 'Current revision (en)',
+  'timestamp' => '1521927148',
+  'format' => '1',
+))
 ->execute();
 $connection->schema()->createTable('node_type', array(
   'fields' => array(
@@ -47626,7 +47728,7 @@
 ->values(array(
   'fid' => '3',
   'nid' => '12',
-  'vid' => '15',
+  'vid' => '26',
   'description' => 'file 12-15-3',
   'list' => '0',
   'weight' => '0',
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 57e831b5b5..f70b64cb1c 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -4960,7 +4960,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'body_value' => "...is that it's the absolute best show ever. Trust me, I would know.",
@@ -4972,7 +4972,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'body_value' => "is - ...is that it's the absolute best show ever. Trust me, I would know.",
@@ -6642,7 +6642,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_link_url' => '<front>',
@@ -6654,7 +6654,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_link_url' => '<front>',
@@ -7142,7 +7142,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_reference_target_id' => '5',
@@ -7152,7 +7152,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_reference_target_id' => '4',
@@ -7162,7 +7162,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '4',
-  'revision_id' => '4',
+  'revision_id' => '10',
   'language' => 'und',
   'delta' => '0',
   'field_reference_target_id' => '3',
@@ -7172,7 +7172,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '5',
-  'revision_id' => '5',
+  'revision_id' => '11',
   'language' => 'und',
   'delta' => '0',
   'field_reference_target_id' => '2',
@@ -7278,7 +7278,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_reference_2_target_id' => '5',
@@ -7288,7 +7288,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_reference_2_target_id' => '4',
@@ -7298,7 +7298,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '4',
-  'revision_id' => '4',
+  'revision_id' => '10',
   'language' => 'und',
   'delta' => '0',
   'field_reference_2_target_id' => '3',
@@ -7308,7 +7308,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '5',
-  'revision_id' => '5',
+  'revision_id' => '11',
   'language' => 'und',
   'delta' => '0',
   'field_reference_2_target_id' => '2',
@@ -7391,7 +7391,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_tags_tid' => '9',
@@ -7401,7 +7401,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_tags_tid' => '9',
@@ -7411,7 +7411,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '1',
   'field_tags_tid' => '14',
@@ -7421,7 +7421,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '1',
   'field_tags_tid' => '14',
@@ -7431,7 +7431,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '2',
   'field_tags_tid' => '17',
@@ -7441,7 +7441,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '2',
   'field_tags_tid' => '17',
@@ -8282,6 +8282,64 @@
   'mysql_character_set' => 'utf8',
 ));
 
+$connection->insert('field_data_field_text_plain')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_text_plain_value',
+  'field_text_plain_format',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '8',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 current revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '9',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 current revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '4',
+  'revision_id' => '10',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly current revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '5',
+  'revision_id' => '11',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly current revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->execute();
+
 $connection->schema()->createTable('field_data_field_text_plain_filtered', array(
   'fields' => array(
     'entity_type' => array(
@@ -9404,7 +9462,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'body_value' => "...is that it's the absolute best show ever. Trust me, I would know.",
@@ -9416,7 +9474,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'body_value' => "is - ...is that it's the absolute best show ever. Trust me, I would know.",
@@ -9428,7 +9486,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '4',
-  'revision_id' => '4',
+  'revision_id' => '10',
   'language' => 'und',
   'delta' => '0',
   'body_value' => 'is - Is that is it awesome.',
@@ -9440,7 +9498,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '5',
-  'revision_id' => '5',
+  'revision_id' => '11',
   'language' => 'und',
   'delta' => '0',
   'body_value' => 'en - Is that is it awesome.',
@@ -11106,7 +11164,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_link_url' => '<front>',
@@ -11118,7 +11176,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_link_url' => '<front>',
@@ -11630,6 +11688,16 @@
   'entity_type' => 'node',
   'bundle' => 'article',
   'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '8',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_target_id' => '5',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
   'entity_id' => '3',
   'revision_id' => '3',
   'language' => 'und',
@@ -11640,6 +11708,16 @@
   'entity_type' => 'node',
   'bundle' => 'article',
   'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '9',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_target_id' => '4',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
   'entity_id' => '4',
   'revision_id' => '4',
   'language' => 'und',
@@ -11656,6 +11734,26 @@
   'delta' => '0',
   'field_reference_target_id' => '2',
 ))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '4',
+  'revision_id' => '10',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_target_id' => '3',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '5',
+  'revision_id' => '11',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_target_id' => '2',
+))
 ->execute();
 $connection->schema()->createTable('field_revision_field_reference_2', array(
   'fields' => array(
@@ -11767,6 +11865,16 @@
   'entity_type' => 'node',
   'bundle' => 'article',
   'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '8',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_2_target_id' => '5',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
   'entity_id' => '3',
   'revision_id' => '3',
   'language' => 'und',
@@ -11777,6 +11885,16 @@
   'entity_type' => 'node',
   'bundle' => 'article',
   'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '9',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_2_target_id' => '4',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
   'entity_id' => '4',
   'revision_id' => '4',
   'language' => 'und',
@@ -11793,6 +11911,26 @@
   'delta' => '0',
   'field_reference_2_target_id' => '2',
 ))
+  ->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '4',
+  'revision_id' => '10',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_2_target_id' => '3',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '5',
+  'revision_id' => '11',
+  'language' => 'und',
+  'delta' => '0',
+  'field_reference_2_target_id' => '2',
+))
 ->execute();
 $connection->schema()->createTable('field_revision_field_tags', array(
   'fields' => array(
@@ -11872,7 +12010,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '0',
   'field_tags_tid' => '9',
@@ -11882,7 +12020,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '0',
   'field_tags_tid' => '9',
@@ -11892,7 +12030,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '1',
   'field_tags_tid' => '14',
@@ -11902,7 +12040,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '1',
   'field_tags_tid' => '14',
@@ -11912,7 +12050,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
-  'revision_id' => '2',
+  'revision_id' => '8',
   'language' => 'und',
   'delta' => '2',
   'field_tags_tid' => '17',
@@ -11922,7 +12060,7 @@
   'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '3',
-  'revision_id' => '3',
+  'revision_id' => '9',
   'language' => 'und',
   'delta' => '2',
   'field_tags_tid' => '17',
@@ -12772,6 +12910,108 @@
   'mysql_character_set' => 'utf8',
 ));
 
+$connection->insert('field_revision_field_text_plain')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_text_plain_value',
+  'field_text_plain_format',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 first revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '8',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 current revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '3',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 first revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '9',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'DS9 current revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '4',
+  'revision_id' => '4',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly first revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '4',
+  'revision_id' => '10',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly current revision (is)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '5',
+  'revision_id' => '5',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly first revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '5',
+  'revision_id' => '11',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_plain_value' => 'Firefly current revision (en)',
+  'field_text_plain_format' => NULL,
+))
+->execute();
+
 $connection->schema()->createTable('field_revision_field_text_plain_filtered', array(
   'fields' => array(
     'entity_type' => array(
@@ -37373,7 +37613,7 @@
 ))
 ->values(array(
   'nid' => '2',
-  'vid' => '2',
+  'vid' => '8',
   'type' => 'article',
   'language' => 'en',
   'title' => 'The thing about Deep Space 9',
@@ -37389,7 +37629,7 @@
 ))
 ->values(array(
   'nid' => '3',
-  'vid' => '3',
+  'vid' => '9',
   'type' => 'article',
   'language' => 'is',
   'title' => 'is - The thing about Deep Space 9',
@@ -37405,7 +37645,7 @@
 ))
 ->values(array(
   'nid' => '4',
-  'vid' => '4',
+  'vid' => '10',
   'type' => 'article',
   'language' => 'is',
   'title' => 'is - The thing about Firefly',
@@ -37421,7 +37661,7 @@
 ))
 ->values(array(
   'nid' => '5',
-  'vid' => '5',
+  'vid' => '11',
   'type' => 'article',
   'language' => 'en',
   'title' => 'en - The thing about Firefly',
@@ -37826,8 +38066,8 @@
   'nid' => '2',
   'vid' => '2',
   'uid' => '1',
-  'title' => 'The thing about Deep Space 9',
-  'log' => '',
+  'title' => 'The thing about Deep Space 9 (first revision)',
+  'log' => 'First revision (en)',
   'timestamp' => '1441306832',
   'status' => '1',
   'comment' => '2',
@@ -37838,8 +38078,8 @@
   'nid' => '3',
   'vid' => '3',
   'uid' => '1',
-  'title' => 'is - The thing about Deep Space 9',
-  'log' => '',
+  'title' => 'is - The thing about Deep Space 9 (first revision)',
+  'log' => 'First revision (is)',
   'timestamp' => '1471428152',
   'status' => '1',
   'comment' => '2',
@@ -37850,8 +38090,8 @@
   'nid' => '4',
   'vid' => '4',
   'uid' => '1',
-  'title' => 'is - The thing about Firefly',
-  'log' => '',
+  'title' => 'is - The thing about Firefly (first revision)',
+  'log' => 'First revision (is)',
   'timestamp' => '1478755274',
   'status' => '1',
   'comment' => '1',
@@ -37862,8 +38102,8 @@
   'nid' => '5',
   'vid' => '5',
   'uid' => '1',
-  'title' => 'en - The thing about Firefly',
-  'log' => '',
+  'title' => 'en - The thing about Firefly (first revision)',
+  'log' => 'First revision (en)',
   'timestamp' => '1478755314',
   'status' => '1',
   'comment' => '1',
@@ -37894,6 +38134,54 @@
   'promote' => '0',
   'sticky' => '0',
 ))
+->values(array(
+  'nid' => '2',
+  'vid' => '8',
+  'uid' => '1',
+  'title' => 'The thing about Deep Space 9',
+  'log' => 'Current revision (en)',
+  'timestamp' => '1441306832',
+  'status' => '1',
+  'comment' => '2',
+  'promote' => '1',
+  'sticky' => '0',
+))
+->values(array(
+  'nid' => '3',
+  'vid' => '9',
+  'uid' => '1',
+  'title' => 'is - The thing about Deep Space 9',
+  'log' => 'Current revision (is)',
+  'timestamp' => '1471428152',
+  'status' => '1',
+  'comment' => '2',
+  'promote' => '1',
+  'sticky' => '0',
+))
+->values(array(
+  'nid' => '4',
+  'vid' => '10',
+  'uid' => '1',
+  'title' => 'is - The thing about Firefly',
+  'log' => 'Current revision (is)',
+  'timestamp' => '1478755274',
+  'status' => '1',
+  'comment' => '1',
+  'promote' => '1',
+  'sticky' => '0',
+))
+->values(array(
+  'nid' => '5',
+  'vid' => '11',
+  'uid' => '1',
+  'title' => 'en - The thing about Firefly',
+  'log' => 'Current revision (en)',
+  'timestamp' => '1478755314',
+  'status' => '1',
+  'comment' => '1',
+  'promote' => '1',
+  'sticky' => '0',
+))
 ->execute();
 $connection->schema()->createTable('node_type', array(
   'fields' => array(
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6TestBase.php b/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6TestBase.php
index 0b2735c8ea..8339142975 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6TestBase.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6TestBase.php
@@ -108,6 +108,9 @@ protected function migrateContent(array $include = []) {
     }
     if (in_array('revisions', $include)) {
       $this->executeMigrations(['d6_node_revision']);
+      if (in_array('translations', $include)) {
+        $this->executeMigrations(['d6_node_revision_translation']);
+      }
     }
   }
 
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
index 37de86efcd..eea7382aba 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
@@ -68,8 +68,8 @@ protected function getEntityCounts() {
       'contact_message' => 0,
       'configurable_language' => 5,
       'editor' => 2,
-      'field_config' => 92,
-      'field_storage_config' => 66,
+      'field_config' => 93,
+      'field_storage_config' => 67,
       'file' => 7,
       'filter_format' => 7,
       'image_style' => 5,
diff --git a/core/modules/node/migrations/d6_node.yml b/core/modules/node/migrations/d6_node.yml
index 524448bc38..d0d503aa19 100644
--- a/core/modules/node/migrations/d6_node.yml
+++ b/core/modules/node/migrations/d6_node.yml
@@ -7,6 +7,8 @@ migration_tags:
 deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
 source:
   plugin: d6_node
+  constants:
+    revision_translation_affected: true
 process:
   # In D6, nodes always have a tnid, but it's zero for untranslated nodes.
   # We normalize it to equal the nid in that case.
@@ -35,7 +37,7 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
-
+  revision_translation_affected: constants/revision_translation_affected
 #  unmapped d6 fields.
 #  tnid
 #  translate
diff --git a/core/modules/node/migrations/d6_node_revision.yml b/core/modules/node/migrations/d6_node_revision.yml
index 732c9abe27..1e0ddabcab 100644
--- a/core/modules/node/migrations/d6_node_revision.yml
+++ b/core/modules/node/migrations/d6_node_revision.yml
@@ -7,6 +7,8 @@ migration_tags:
 deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
 source:
   plugin: d6_node_revision
+  constants:
+    revision_translation_affected: true
 process:
   # If you are using this file to build a custom migration consider removing
   # the nid and vid fields to allow incremental migrations.
@@ -32,7 +34,7 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
-
+  revision_translation_affected: constants/revision_translation_affected
 #  unmapped d6 fields.
 #  tnid
 #  translate
diff --git a/core/modules/node/migrations/d7_node.yml b/core/modules/node/migrations/d7_node.yml
index 5bf826164a..7ccae408c9 100644
--- a/core/modules/node/migrations/d7_node.yml
+++ b/core/modules/node/migrations/d7_node.yml
@@ -7,6 +7,8 @@ migration_tags:
 deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
 source:
   plugin: d7_node
+  constants:
+    revision_translation_affected: true
 process:
   # If you are using this file to build a custom migration consider removing
   # the nid and vid fields to allow incremental migrations.
@@ -29,6 +31,7 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
+  revision_translation_affected: constants/revision_translation_affected
 destination:
   plugin: entity:node
 migration_dependencies:
diff --git a/core/modules/node/migrations/d7_node_revision.yml b/core/modules/node/migrations/d7_node_revision.yml
index 7310b0d5b0..15722ed4b4 100644
--- a/core/modules/node/migrations/d7_node_revision.yml
+++ b/core/modules/node/migrations/d7_node_revision.yml
@@ -7,6 +7,8 @@ migration_tags:
 deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
 source:
   plugin: d7_node_revision
+  constants:
+    revision_translation_affected: true
 process:
   # If you are using this file to build a custom migration consider removing
   # the nid and vid fields to allow incremental migrations.
@@ -26,6 +28,7 @@ process:
   revision_uid: revision_uid
   revision_log: log
   revision_timestamp: timestamp
+  revision_translation_affected: constants/revision_translation_affected
 destination:
   plugin: entity_revision:node
 migration_dependencies:
diff --git a/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php b/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
index 94c759bea4..34eb42d55a 100644
--- a/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
+++ b/core/modules/node/src/Plugin/migrate/D6NodeDeriver.php
@@ -104,7 +104,7 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
    * @see \Drupal\Component\Plugin\Derivative\DeriverBase::getDerivativeDefinition()
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
-    if ($base_plugin_definition['id'] == 'd6_node_translation' && !$this->includeTranslations) {
+    if (in_array('translation', $base_plugin_definition['migration_tags']) && !$this->includeTranslations) {
       // Refuse to generate anything.
       return $this->derivatives;
     }
@@ -150,7 +150,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         // If this migration is based on the d6_node_revision migration or
         // is for translations of nodes, it should explicitly depend on the
         // corresponding d6_node variant.
-        if (in_array($base_plugin_definition['id'], ['d6_node_revision', 'd6_node_translation'])) {
+        if ($base_plugin_definition['id'] == ['d6_node_revision'] || in_array('translation', $base_plugin_definition['migration_tags'])) {
           $values['migration_dependencies']['required'][] = 'd6_node:' . $node_type;
         }
 
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 629249888d..e0988294d0 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\node\Plugin\migrate\source\d6;
 
-use Drupal\Core\Database\Query\SelectInterface;
-
 /**
  * Drupal 6 node revision source from database.
  *
@@ -40,11 +38,4 @@ public function getIds() {
     return $ids;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function handleTranslations(SelectInterface $query) {
-    // @todo in https://www.drupal.org/node/2746541
-  }
-
 }
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php
new file mode 100644
index 0000000000..f4a48ae2ff
--- /dev/null
+++ b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Drupal\Tests\node\Kernel\Migrate\d6;
+
+use Drupal\node\NodeInterface;
+
+/**
+ * Tests node revision migrations.
+ *
+ * @group node
+ */
+class MigrateNodeRevisionTest extends MigrateNodeTestBase {
+
+  /**
+   * The entity storage for node.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'content_translation',
+    'language',
+    'menu_ui',
+    // Required for translation migrations.
+    'migrate_drupal_multilingual',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->executeMigrations([
+      'language',
+      'd6_language_content_settings',
+      'd6_node',
+      'd6_node_revision',
+      'd6_node_translation',
+      'd6_node_revision_translation',
+    ]);
+
+    $this->nodeStorage = $this->container->get('entity_type.manager')->getStorage('node');
+  }
+
+  /**
+   * Asserts various aspects of a node revision.
+   *
+   * @param int $id
+   *   The revision ID.
+   * @param string $langcode
+   *   The revision language.
+   * @param string $title
+   *   The expected title.
+   * @param string $log
+   *   The revision log message.
+   * @param string $field_text_field
+   *   The expected field_text_field field value.
+   * @param int $revision_translation_affected
+   *   The revision translation affected field value.
+   */
+  protected function assertRevision($id, $langcode, $title, $log, $field_text_field, $revision_translation_affected) {
+    /* @var  \Drupal\node\NodeInterface $revision */
+    $revision = $this->nodeStorage->loadRevision($id)->getTranslation($langcode);
+    $this->assertInstanceOf(NodeInterface::class, $revision);
+    $this->assertSame($title, $revision->getTitle());
+    $this->assertSame($log, $revision->revision_log->value);
+    $this->assertSame($field_text_field, $revision->field_text_field->value);
+    $this->assertSame($revision_translation_affected, $revision->get('revision_translation_affected')->value);
+  }
+
+  /**
+   * Tests the migration of node revisions with translated nodes.
+   */
+  public function testNodeTranslationRevisions() {
+    // Test the first revision.
+    $this->assertRevision(13, 'en', 'The Real McCoy (first revision)', 'First revision (en)', 'McCoy first revision (en)', '1');
+    $this->assertRevision(14, 'fr', 'Le Vrai McCoy (first revision)', 'First revision (fr)', 'McCoy first revision (fr)', '1');
+    $this->assertRevision(15, 'zu', 'Abantu zulu (first revision)', 'First revision (zu)', 'Zulu first revision (zu)', '1');
+    $this->assertRevision(16, 'en', 'The Zulu People (first revision)', 'First revision (en)', 'Zulu first revision (en)', '1');
+
+    // Test the current revision.
+    $this->assertRevision(24, 'en', 'The Real McCoy', 'Current revision (en)', 'McCoy current revision (en)', '1');
+    $this->assertRevision(2004, 'fr', 'Le Vrai McCoy', 'Current revision (fr)', 'McCoy current revision (fr)', '1');
+    $this->assertRevision(26, 'zu', 'Abantu zulu', 'Current revision (zu)', 'Zulu current revision (zu)', '1');
+    $this->assertRevision(2005, 'en', 'The Zulu People', 'Current revision (en)', 'Zulu current revision (en)', '1');
+  }
+
+}
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php
new file mode 100644
index 0000000000..6782328375
--- /dev/null
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace Drupal\Tests\node\Kernel\Migrate\d7;
+
+use Drupal\node\NodeInterface;
+use Drupal\Tests\file\Kernel\Migrate\d7\FileMigrationSetupTrait;
+use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
+
+/**
+ * Tests node revision migrations.
+ *
+ * @group node
+ */
+class MigrateNodeRevisionTest extends MigrateDrupal7TestBase {
+
+  use FileMigrationSetupTrait;
+
+  /**
+   * The entity storage for node.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'content_translation',
+    'comment',
+    'datetime',
+    'file',
+    'filter',
+    'image',
+    'language',
+    'link',
+    // Required for translation migrations.
+    'migrate_drupal_multilingual',
+    'menu_ui',
+    'node',
+    'taxonomy',
+    'telephone',
+    'text',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->fileMigrationSetup();
+
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('comment');
+    $this->installEntitySchema('taxonomy_term');
+    $this->installSchema('comment', ['comment_entity_statistics']);
+    $this->installSchema('node', ['node_access']);
+
+    $this->migrateUsers();
+    $this->migrateFields();
+    $this->executeMigrations([
+      'language',
+      'd7_language_content_settings',
+      'd7_comment_field',
+      'd7_comment_field_instance',
+      'd7_node',
+      'd7_node_translation',
+      'd7_node_revision',
+      'd7_node_revision_translation',
+    ]);
+    $this->nodeStorage = $this->container->get('entity_type.manager')->getStorage('node');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getFileMigrationInfo() {
+    return [
+      'path' => 'public://sites/default/files/cube.jpeg',
+      'size' => '3620',
+      'base_path' => 'public://',
+      'plugin_id' => 'd7_file',
+    ];
+  }
+
+  /**
+   * Asserts various aspects of a node revision.
+   *
+   * @param int $id
+   *   The revision ID.
+   * @param string $langcode
+   *   The revision language.
+   * @param string $title
+   *   The expected title.
+   * @param string $log
+   *   The revision log message.
+   * @param string $field_text_plain
+   *   The expected field_text_plain field value.
+   * @param int $revision_translation_affected
+   *   The revision translation affected field value.
+   */
+  protected function assertRevision($id, $langcode, $title, $log, $field_text_plain, $revision_translation_affected) {
+    /* @var  \Drupal\node\NodeInterface $revision */
+    $revision = $this->nodeStorage->loadRevision($id)->getTranslation($langcode);
+    $this->assertInstanceOf(NodeInterface::class, $revision);
+    $this->assertSame($title, $revision->getTitle());
+    $this->assertSame($log, $revision->revision_log->value);
+    $this->assertSame($field_text_plain, $revision->field_text_plain->value);
+    $this->assertSame($revision_translation_affected, $revision->get('revision_translation_affected')->value);
+  }
+
+  /**
+   * Tests the migration of node revisions with translated nodes.
+   */
+  public function testNodeTranslationRevisions() {
+    // Test the first revision.
+    $this->assertRevision(2, 'en', 'The thing about Deep Space 9 (first revision)', 'First revision (en)', 'DS9 first revision (en)', '1');
+    $this->assertRevision(3, 'is', 'is - The thing about Deep Space 9 (first revision)', 'First revision (is)', 'DS9 first revision (is)', '1');
+    $this->assertRevision(4, 'is', 'is - The thing about Firefly (first revision)', 'First revision (is)', 'Firefly first revision (is)', '1');
+    $this->assertRevision(5, 'en', 'en - The thing about Firefly (first revision)', 'First revision (en)', 'Firefly first revision (en)', '1');
+
+    // Test the current revision.
+    $this->assertRevision(8, 'en', 'The thing about Deep Space 9', 'Current revision (en)', 'DS9 current revision (en)', '1');
+    $this->assertRevision(11, 'is', 'is - The thing about Deep Space 9', 'Current revision (is)', 'DS9 current revision (is)', '1');
+    $this->assertRevision(10, 'is', 'is - The thing about Firefly', 'Current revision (is)', 'Firefly current revision (is)', '1');
+    $this->assertRevision(12, 'en', 'en - The thing about Firefly', 'Current revision (en)', 'Firefly current revision (en)', '1');
+  }
+
+}
