diff --git a/dynamic_entity_reference.install b/dynamic_entity_reference.install
index 9b7455c..16e8b1d 100644
--- a/dynamic_entity_reference.install
+++ b/dynamic_entity_reference.install
@@ -26,11 +26,12 @@ function dynamic_entity_reference_update_8001() {
   $service = \Drupal::service('dynamic_entity_reference.entity_type_subscriber');
   // Only update dynamic_entity_reference fields.
   foreach ($entity_field_manager->getFieldMapByFieldType('dynamic_entity_reference') as $entity_type_id => $map) {
+    $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
     $entity_storage = $entity_type_manager->getStorage($entity_type_id);
     // Only SQL storage based entities are supported.
     if ($entity_storage instanceof SqlEntityStorageInterface) {
       $field_storage_definitions = $entity_field_manager->getFieldStorageDefinitions($entity_type_id);
-      /** @var Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
+      /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
       $table_mapping = $entity_storage->getTableMapping($field_storage_definitions);
       $field_storage_definition = FALSE;
       // Only need field storage definitions of dynamic_entity_reference fields.
@@ -64,12 +65,22 @@ function dynamic_entity_reference_update_8001() {
         ];
         $type_column = $table_mapping->getFieldColumnName($field_storage_definition, 'target_type');
         $schema->changeField($table, $type_column, $type_column, $type_spec);
+        $revision_table = NULL;
+        if ($entity_type->isRevisionable() && ($revision_table = $table_mapping->getDedicatedRevisionTableName($field_storage_definition))) {
+          $schema->changeField($revision_table, $column, $column, $spec);
+          $schema->changeField($revision_table, $type_column, $type_column, $type_spec);
+        }
         // Update the installed storage schema for this field as well.
         $key = "$entity_type_id.field_schema_data.$field_name";
         if ($field_schema_data = $entity_storage_schema_sql->get($key)) {
           $field_schema_data[$table]['fields'][$column] = $spec;
           $field_schema_data[$table]['fields'][$type_column] = $type_spec;
           $entity_storage_schema_sql->set($key, $field_schema_data);
+          if ($revision_table) {
+            $field_schema_data[$revision_table]['fields'][$column] = $spec;
+            $field_schema_data[$revision_table]['fields'][$type_column] = $type_spec;
+            $entity_storage_schema_sql->set($key, $field_schema_data);
+          }
         }
         if ($table_mapping->allowsSharedTableStorage($field_storage_definition)) {
           $key = "$entity_type_id.field_storage_definitions";
diff --git a/src/EventSubscriber/FieldStorageSubscriber.php b/src/EventSubscriber/FieldStorageSubscriber.php
index 615ae6c..b2f00e0 100644
--- a/src/EventSubscriber/FieldStorageSubscriber.php
+++ b/src/EventSubscriber/FieldStorageSubscriber.php
@@ -117,6 +117,7 @@ class FieldStorageSubscriber implements EventSubscriberInterface {
     if ($field_storage_definition) {
       $der_fields[$entity_type_id][$field_storage_definition->getName()] = TRUE;
     }
+    $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
     $tables = [];
     // If we know which field is being created / updated check whether it is
     // DER.
@@ -125,6 +126,7 @@ class FieldStorageSubscriber implements EventSubscriberInterface {
       if ($field_storage_definition) {
         $storage_definitions[$field_storage_definition->getName()] = $field_storage_definition;
       }
+      /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $mapping */
       $mapping = $storage->getTableMapping($storage_definitions);
       foreach (array_keys($der_fields[$entity_type_id]) as $field_name) {
         try {
@@ -137,6 +139,9 @@ class FieldStorageSubscriber implements EventSubscriberInterface {
           continue;
         }
         $tables[$table][] = $column;
+        if ($entity_type->isRevisionable() && ($table = $mapping->getDedicatedRevisionTableName($field_storage_definition))) {
+          $tables[$table][] = $column;
+        }
       }
       $new = [];
       foreach ($tables as $table => $columns) {
diff --git a/tests/src/Kernel/DynamicEntityReferenceFieldRevisionTest.php b/tests/src/Kernel/DynamicEntityReferenceFieldRevisionTest.php
new file mode 100644
index 0000000..f7c5164
--- /dev/null
+++ b/tests/src/Kernel/DynamicEntityReferenceFieldRevisionTest.php
@@ -0,0 +1,137 @@
+<?php
+
+namespace Drupal\Tests\dynamic_entity_reference\Kernel;
+
+use Drupal\config\Tests\SchemaCheckTestTrait;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+
+/**
+ * Tests for the dynamic entity reference field for revisionable entities.
+ *
+ * @group dynamic_entity_reference
+ */
+class DynamicEntityReferenceFieldRevisionTest extends EntityKernelTestBase {
+  use SchemaCheckTestTrait;
+
+  /**
+   * The entity type used in this test.
+   *
+   * @var string
+   */
+  protected $entityType = 'entity_test_rev';
+
+  /**
+   * The entity type that is being referenced.
+   *
+   * @var string
+   */
+  protected $referencedEntityType = 'entity_test';
+
+  /**
+   * The bundle used in this test.
+   *
+   * @var string
+   */
+  protected $bundle = 'entity_test_rev';
+
+  /**
+   * The name of the field used in this test.
+   *
+   * @var string
+   */
+  protected $fieldName = 'field_test';
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = ['dynamic_entity_reference'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema($this->entityType);
+
+    // Create a field.
+    FieldStorageConfig::create([
+      'field_name' => $this->fieldName,
+      'type' => 'dynamic_entity_reference',
+      'entity_type' => $this->entityType,
+      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
+      'settings' => [
+        'exclude_entity_types' => FALSE,
+        'entity_type_ids' => [
+          $this->referencedEntityType,
+        ],
+      ],
+    ])->save();
+
+    FieldConfig::create([
+      'field_name' => $this->fieldName,
+      'entity_type' => $this->entityType,
+      'bundle' => $this->bundle,
+      'label' => 'Field test',
+      'settings' => [],
+    ])->save();
+
+  }
+
+  /**
+   * Tests referencing entities for revisionable entities.
+   */
+  public function testReferenceForRevisionableEntities() {
+    $field_name = $this->fieldName;
+    $referenced_entity_1 = EntityTest::create();
+    $referenced_entity_2 = EntityTest::create();
+    $referenced_entity_1->save();
+    $referenced_entity_2->save();
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType);
+    /** @var \Drupal\entity_test\Entity\EntityTestRev $entity */
+    $entity = $storage->create(['type' => $this->bundle]);
+    // Set the field value.
+    $entity->{$field_name}->setValue([
+      [
+        'target_id' => $referenced_entity_1->id(),
+        'target_type' => $referenced_entity_1->getEntityTypeId(),
+      ],
+    ]);
+    $entity->save();
+    $entity_old = $storage->loadUnchanged($entity->id());
+    $revision_id_1 = $entity->getRevisionId();
+    $entity->setNewRevision(TRUE);
+    // Set the field value.
+    $entity->{$field_name}->setValue([
+      [
+        'target_id' => $referenced_entity_2->id(),
+        'target_type' => $referenced_entity_2->getEntityTypeId(),
+      ],
+    ]);
+    $entity->save();
+    $revision_id_2 = $entity->getRevisionId();
+    $entity_new = $storage->loadUnchanged($entity->id());
+    $this->assertNotEquals($revision_id_1, $revision_id_2);
+    $this->assertEquals($entity_old->id(), $entity_new->id());
+    $this->assertEquals($entity_old->{$field_name}->target_id, $referenced_entity_1->id());
+    $this->assertEquals($entity_new->{$field_name}->target_id, $referenced_entity_2->id());
+    $storage->resetCache();
+    $revision_1 = $storage->loadRevision($revision_id_1);
+    $revision_2 = $storage->loadRevision($revision_id_2);
+    $this->assertEquals($revision_1->{$field_name}->target_id, $referenced_entity_1->id());
+    $this->assertEquals($revision_2->{$field_name}->target_id, $referenced_entity_2->id());
+    $database = $this->container->get('database');
+    $this->assertEquals([2], $database->query('SELECT field_test_target_id FROM {entity_test_rev__field_test} ORDER BY entity_id, revision_id, delta')->fetchCol());
+    $this->assertEquals([2], $database->query('SELECT field_test_target_id_int FROM {entity_test_rev__field_test} ORDER BY entity_id, revision_id, delta')->fetchCol());
+    $this->assertEquals([1, 2], $database->query('SELECT field_test_target_id FROM {entity_test_rev_revision__field_test} ORDER BY entity_id, revision_id, delta')->fetchCol());
+    $this->assertEquals([1, 2], $database->query('SELECT field_test_target_id_int FROM {entity_test_rev_revision__field_test} ORDER BY entity_id, revision_id, delta')->fetchCol());
+  }
+
+}
