diff --git a/core/modules/migrate_drupal/migrate_drupal.module b/core/modules/migrate_drupal/migrate_drupal.module
index 2de2595..1973dbb 100644
--- a/core/modules/migrate_drupal/migrate_drupal.module
+++ b/core/modules/migrate_drupal/migrate_drupal.module
@@ -81,4 +81,13 @@ function migrate_drupal_migration_plugins_alter(&$definitions) {
     }
 
   }
+
+  $post_process = \Drupal::state()->get('migrate_drupal.post_process', []);
+  foreach ($definitions as $migration_id => $migration) {
+    if (in_array('migrate_drupal_post_process', $migration['migration_tags'])) {
+      unset($definitions[$migration_id]);
+      $post_process[$migration['id']] = $migration['migration_dependencies'];
+    }
+  }
+  \Drupal::state()->set('migrate_drupal.post_process', $post_process);
 }
diff --git a/core/modules/migrate_drupal/migrate_drupal.services.yml b/core/modules/migrate_drupal/migrate_drupal.services.yml
index 23b3492..f6c5f6a 100644
--- a/core/modules/migrate_drupal/migrate_drupal.services.yml
+++ b/core/modules/migrate_drupal/migrate_drupal.services.yml
@@ -16,3 +16,10 @@ services:
       - '@module_handler'
       - '\Drupal\migrate_drupal\Annotation\MigrateCckField'
     deprecated: The "%service_id%" service is deprecated. You should use the 'plugin.manager.migrate.field' service instead. See https://www.drupal.org/node/2751897
+  migrate_drupal.post_process_subscriber:
+    class: Drupal\migrate_drupal\EventSubscriber\MigrationPostProcessSubscriber
+    arguments:
+      - '@state'
+      - '@plugin.manager.migration'
+    tags:
+      - { name: event_subscriber }
diff --git a/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml
new file mode 100644
index 0000000..6e755f4
--- /dev/null
+++ b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml
@@ -0,0 +1,14 @@
+id: d7_entity_reference_translation
+label: Entity reference translations
+migration_tags:
+  - Drupal 7
+  - migrate_drupal_post_process
+deriver: Drupal\migrate_drupal\Plugin\migrate\EntityReferenceTranslationDeriver
+target_types:
+  node:
+    bundles: d7_node_type
+    dependency: d7_node_translation
+source:
+  plugin: d8_entity_reference_translation
+  key: default
+  target: default
diff --git a/core/modules/migrate_drupal/src/EventSubscriber/MigrationPostProcessSubscriber.php b/core/modules/migrate_drupal/src/EventSubscriber/MigrationPostProcessSubscriber.php
new file mode 100644
index 0000000..c498958
--- /dev/null
+++ b/core/modules/migrate_drupal/src/EventSubscriber/MigrationPostProcessSubscriber.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Drupal\migrate_drupal\EventSubscriber;
+
+use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Event\MigrateEvents;
+use Drupal\migrate\Event\MigrateImportEvent;
+use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * TODO
+ */
+class MigrationPostProcessSubscriber implements EventSubscriberInterface {
+
+  /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
+   * The migration plugin manager.
+   *
+   * @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
+   */
+  protected $migrationPluginManager;
+
+  /**
+   * Constructs the MigrationPostProcessSubscriber.
+   *
+   * @param \Drupal\Core\State\StateInterface $state
+   *   The state service.
+   * @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager
+   *   The migration plugin manager.
+   */
+  public function __construct(StateInterface $state, MigrationPluginManagerInterface $migration_plugin_manager) {
+    $this->state = $state;
+    $this->migrationPluginManager = $migration_plugin_manager;
+  }
+
+  /**
+   * TODO
+   *
+   * @param \Drupal\migrate\Event\MigrateImportEvent $event
+   *   The migrate import event.
+   */
+  public function onPostImport(MigrateImportEvent $event) {
+    $post_process = $this->state->get('migrate_drupal.post_process');
+    $migration_id = $event->getMigration()->getPluginId();
+    foreach ($post_process as $id => $process) {
+      foreach ($process as $index => $requirement) {
+        if (in_array($migration_id, $requirement)) {
+          unset($post_process[$id][$index]);
+        }
+      }
+      if (empty($post_process[$id])) {
+        unset($post_process[$id]);
+        $post_process_migrations = $this->migrationPluginManager->createInstances($id);
+      }
+    }
+    $this->state->set('migrate_drupal.post_process', $post_process);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events = [];
+
+    $events[MigrateEvents::POST_IMPORT] = ['onPostImport'];
+
+    return $events;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php b/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php
new file mode 100644
index 0000000..783605b
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Drupal\migrate_drupal\Plugin\migrate;
+
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Drupal\migrate\Plugin\MigrationDeriverTrait;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * TODO
+ */
+class EntityReferenceTranslationDeriver extends DeriverBase implements ContainerDeriverInterface {
+
+  use MigrationDeriverTrait;
+
+  /**
+   * The base plugin ID this derivative is for.
+   *
+   * @var string
+   */
+  protected $basePluginId;
+
+  /**
+   * The entity field manager.
+   *
+   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
+   */
+  protected $entityFieldManager;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * EntityReferenceTranslationDeriver constructor.
+   *
+   * @param string $base_plugin_id
+   *   The base plugin ID for the plugin ID.
+   * @param \Drupal\core\Entity\EntityFieldManagerInterface $entity_field_manager
+   *   The entity field manager.
+   * @param \Drupal\core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   */
+  public function __construct($base_plugin_id, EntityFieldManagerInterface $entity_field_manager, EntityTypeManagerInterface $entity_type_manager) {
+    $this->basePluginId = $base_plugin_id;
+    $this->entityFieldManager = $entity_field_manager;
+    $this->entityTypeManager = $entity_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $base_plugin_id,
+      $container->get('entity_field.manager'),
+      $container->get('entity_type.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) {
+    $field_map = $this->entityFieldManager->getFieldMapByFieldType('entity_reference');
+
+    foreach ($field_map as $entity_type => $fields) {
+      $storage = $this->entityTypeManager->getStorage($entity_type);
+
+      if ($storage instanceof SqlEntityStorageInterface) {
+        $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type);
+        $base_field_definitions = $this->entityFieldManager->getBaseFieldDefinitions($entity_type);
+        $table_mapping = $storage->getTableMapping();
+        $definition = $this->entityTypeManager->getDefinition($entity_type);
+        $base_table = $definition->getBaseTable();
+        $data_table = $definition->getDataTable();
+        $keys = $definition->getKeys();
+
+        foreach ($fields as $field_name => $field) {
+          foreach ($field['bundles'] as $bundle) {
+            $field_definitions = $this->entityFieldManager->getFieldDefinitions($entity_type, $bundle);
+            $target_type = $field_definitions[$field_name]->getSettings()['target_type'];
+
+            if (isset($base_plugin_definition['target_types'][$target_type])) {
+              $derivative = $entity_type . '__' . $bundle;
+              if (!isset($this->derivatives[$derivative])) {
+                $this->derivatives[$derivative] = $base_plugin_definition;
+
+                $dependency = $base_plugin_definition['target_types'][$target_type]['dependency'];
+                if (isset($base_plugin_definition['target_types'][$target_type]['bundles'])) {
+                  $bundles = $base_plugin_definition['target_types'][$target_type]['bundles'];
+                  foreach (static::getSourcePlugin($bundles) as $row) {
+                    $this->derivatives[$derivative]['migration_dependencies']['required'][] = $dependency . ':' . $row->getSourceProperty('type');
+                  }
+                }
+                else {
+                    $this->derivatives[$derivative]['migration_dependencies']['required'][] = $dependency;
+                }
+
+                $this->derivatives[$derivative]['source']['id_field'] = $keys['id'];
+                $this->derivatives[$derivative]['source']['base_table'] = $base_table;
+                $this->derivatives[$derivative]['source']['data_table'] = $data_table;
+                $this->derivatives[$derivative]['source']['field_table'] = $table_mapping->getFieldTableName($field_name);
+
+                foreach (array_keys($base_field_definitions) as $base_field) {
+                  $this->derivatives[$derivative]['process'][$base_field] = $base_field;
+                }
+
+                $this->derivatives[$derivative]['destination']['plugin'] = 'entity:' . $entity_type;
+                $this->derivatives[$derivative]['destination']['default_bundle'] = $bundle;
+              }
+
+              $field_column = $table_mapping->getFieldColumnName($field_storage_definitions[$field_name], 'target_id');
+              $this->derivatives[$derivative]['process'][$field_name] = [
+                'plugin' => 'migration_lookup',
+                'source' => $field_column,
+                'migration' => 'd7_node_translation',
+              ];
+            }
+          }
+        }
+      }
+    }
+    return $this->derivatives;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php
new file mode 100644
index 0000000..3e5d269
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d8;
+
+use Drupal\migrate\Plugin\migrate\source\SqlBase;
+
+/**
+ * TODO
+ *
+ * @MigrateSource(
+ *   id = "d8_entity_reference_translation"
+ * )
+ */
+class EntityReferenceTranslation extends SqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $base_table = $this->configuration['base_table'];
+    $data_table = $this->configuration['data_table'];
+    $field_table = $this->configuration['field_table'];
+    $id_field = $this->configuration['id_field'];
+
+    $query = $this->select($field_table, 'ft')
+      ->fields('ft', []);
+
+    if ($base_table && $base_table !== $field_table) {
+      $query->join($base_table, 'bt', "bt.$id_field = ft.entity_id");
+      $query->fields('bt', []);
+    }
+
+    if ($data_table && $data_table !== $field_table) {
+      $query->join($data_table, 'dt', "dt.$id_field = ft.entity_id");
+      $query->fields('dt', []);
+    }
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [];
+  }
+
+}
