diff --git a/replication.install b/replication.install
new file mode 100644
index 0000000..0761ecb
--- /dev/null
+++ b/replication.install
@@ -0,0 +1,104 @@
+<?php
+
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Database\Database;
+
+/**
+ * Create revisionable fields in the revision table for replication_log entity
+ * type if they are missing.
+ */
+function replication_update_8100() {
+  $connection = Database::getConnection();
+  if ($connection instanceof Connection) {
+    $schema = $connection->schema();
+    $entity_type_manager = \Drupal::entityTypeManager();
+    $manager = \Drupal::service('multiversion.manager');
+
+    $entity_type_id = 'replication_log';
+    $entity_type = $entity_type_manager
+      ->getStorage($entity_type_id)
+      ->getEntityType();
+
+    if($manager->isEnabledEntityType($entity_type)) {
+      $id_key = $entity_type->getKey('id');
+
+      /** @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage $storage */
+      $storage = $entity_type_manager->getStorage($entity_type_id);
+
+      // Get the tables name used for base table and revision table.
+      $table_base = ($entity_type->isTranslatable()) ? $entity_type->getDataTable() : $entity_type->getBaseTable();
+      $table_revision = ($entity_type->isTranslatable()) ? $entity_type->getRevisionDataTable() : $entity_type->getRevisionTable();
+
+      /** @var \Drupal\Core\Entity\Sql\TableMappingInterface $table_mapping */
+      $table_mapping = $storage->getTableMapping();
+      $tables = $table_mapping->getTableNames();
+
+      if (!$table_revision && in_array($entity_type_id . '_field_revision', $tables)) {
+        $table_revision = $entity_type_id . '_field_revision';
+      }
+      elseif (!$table_revision && in_array($entity_type_id . '_revision', $tables)) {
+        $table_revision = $entity_type_id . '_revision';
+      }
+
+      if ($schema->tableExists($table_base) && $table_revision && $schema->tableExists($table_revision)) {
+        // Get data from base table.
+        $table_base_results = $connection->select($table_base)
+          ->fields($table_base)
+          ->execute()->fetchAll();
+
+        // Get data from revision table.
+        $table_revision_results = $connection->select($table_revision)
+          ->fields($table_revision)
+          ->execute()->fetchAll();
+
+        if (in_array($table_revision, $tables)) {
+          $table_revision_fields = $table_mapping->getFieldNames($table_revision);
+          $entity_field_manager = \Drupal::service('entity_field.manager');
+          $fields = $entity_field_manager->getBaseFieldDefinitions($entity_type_id);
+          $new_field_storage_definitions = [];
+          // Loop through all the fields, if the field exists in the new
+          // revision table mapping and it doesn't exist in the database,
+          // create the new field.
+          foreach ($fields as $field_name => $field) {
+            if (in_array($field_name, $table_revision_fields) && !$schema->fieldExists($table_revision, $field_name)) {
+              $new_field_storage_definitions[] = $field->getFieldStorageDefinition($field->getName(), $entity_type_id);
+            }
+          }
+
+          if (!empty($new_field_storage_definitions)) {
+            // Remove all data from revision table before adding new fields.
+            $connection->truncate($table_revision)->execute();
+            foreach ($new_field_storage_definitions as $storage_definition) {
+              \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionCreate($storage_definition);
+            }
+          }
+
+          // If the revision table has been updated (new field has been added),
+          // complete new fields with data from base table.
+          if (!empty($new_field_storage_definitions)) {
+            $table_base_results_keyed = [];
+            foreach ($table_base_results as $result) {
+              if (isset($result->{$id_key})) {
+                $data = (array) $result;
+                $table_base_results_keyed[$result->{$id_key}] = $data;
+              }
+            }
+            // For the new created revisionable fields take data from base table.
+            foreach ($table_revision_results as $result) {
+              $data = (array) $result;
+              foreach ($table_revision_fields as $field_name) {
+                if (!isset($data[$field_name]) && isset($table_base_results_keyed[$result->{$id_key}][$field_name])) {
+                  $data[$field_name] = $table_base_results_keyed[$result->{$id_key}][$field_name];
+                }
+              }
+              // Save the information in the revision table.
+              $connection->insert($table_revision)
+                ->fields($data)
+                ->execute();
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/src/Entity/ReplicationLog.php b/src/Entity/ReplicationLog.php
index 725384e..88531a8 100644
--- a/src/Entity/ReplicationLog.php
+++ b/src/Entity/ReplicationLog.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\replication\Entity;
 
-use Drupal\Core\Entity\Entity;
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
@@ -115,22 +114,26 @@ class ReplicationLog extends ContentEntityBase implements ReplicationLogInterfac
     $fields['history'] = BaseFieldDefinition::create('replication_history')
       ->setLabel(t('Replication log history'))
       ->setDescription(t('The version id of the test entity.'))
+      ->setRevisionable(TRUE)
       ->setReadOnly(TRUE)
       ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     $fields['session_id'] = BaseFieldDefinition::create('uuid')
       ->setLabel(t('Replication session ID'))
       ->setDescription(t('The unique session ID of the last replication. Shortcut to the session_id in the last history item.'))
+      ->setRevisionable(TRUE)
       ->setReadOnly(TRUE);
 
     $fields['source_last_seq'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Last processed checkpoint'))
       ->setDescription(t('The last processed checkpoint. Shortcut to the source_last_seq in the last history item.'))
+      ->setRevisionable(TRUE)
       ->setReadOnly(TRUE);
 
     $fields['ok'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('ok'))
       ->setDescription(t('Replication status'))
+      ->setRevisionable(TRUE)
       ->setDefaultValue(TRUE)
       ->setReadOnly(TRUE);
 
