diff --git a/src/Entity/Widget.php b/src/Entity/Widget.php
index 3b622bb..40fafc2 100644
--- a/src/Entity/Widget.php
+++ b/src/Entity/Widget.php
@@ -8,6 +8,10 @@ use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityChangedTrait;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\user\UserInterface;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\RevisionableContentEntityBase;
+
 
 /**
  * Defines the Widget entity.
@@ -36,10 +40,16 @@ use Drupal\user\UserInterface;
  *   },
  *   base_table = "widget",
  *   data_table = "widget_field_data",
+ *   revision_table = "widget_revision",
+ *   revision_data_table = "widget_field_revision",
  *   translatable = TRUE,
+ *   entity_revision_parent_type_field = "parent_type",
+ *   entity_revision_parent_id_field = "parent_id",
+ *   entity_revision_parent_field_name_field = "parent_field_name",
  *   admin_permission = "administer widget entities",
  *   entity_keys = {
  *     "id" = "wid",
+ *     "revision" = "revision_id",
  *     "bundle" = "type",
  *     "label" = "name",
  *     "uuid" = "uuid",
@@ -47,6 +57,11 @@ use Drupal\user\UserInterface;
  *     "langcode" = "langcode",
  *     "status" = "status",
  *   },
+ *   revision_metadata_keys = {
+ *     "revision_user" = "revision_user",
+ *     "revision_created" = "revision_created",
+ *     "revision_log_message" = "revision_log_message",
+ *   },
  *   links = {
  *     "canonical" = "/admin/structure/widget/{widget}",
  *     "add-page" = "/admin/content/widget/add",
@@ -59,7 +74,7 @@ use Drupal\user\UserInterface;
  *   field_ui_base_route = "entity.widget_type.edit_form"
  * )
  */
-class Widget extends ContentEntityBase implements WidgetInterface {
+class Widget extends RevisionableContentEntityBase implements WidgetInterface {
 
   use EntityChangedTrait;
 
@@ -206,7 +221,8 @@ class Widget extends ContentEntityBase implements WidgetInterface {
         'weight' => -4,
       ))
       ->setDisplayConfigurable('form', TRUE)
-      ->setDisplayConfigurable('view', TRUE);
+      ->setDisplayConfigurable('view', TRUE)
+      ->setRevisionable(TRUE);
 
     $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Publishing status'))
@@ -219,7 +235,8 @@ class Widget extends ContentEntityBase implements WidgetInterface {
 
     $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
-      ->setDescription(t('The time that the entity was last edited.'));
+      ->setDescription(t('The time that the entity was last edited.'))
+      ->setRevisionable(TRUE);
 
     $fields['widget_preview'] = BaseFieldDefinition::create('image')
       ->setLabel(t('Widget preview'))
@@ -247,6 +264,39 @@ class Widget extends ContentEntityBase implements WidgetInterface {
       ->setDisplayConfigurable('form', TRUE)
       ->setDisplayConfigurable('view', TRUE);
 
+    $fields['parent_id'] = BaseFieldDefinition::create('string_long')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_id')
+      ->setLabel('Parent ID')
+      ->setDescription('The ID of the parent entity of which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setRevisionable(TRUE)
+      ->setDefaultValue('');
+
+    $fields['parent_type'] = BaseFieldDefinition::create('string')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_type')
+      ->setLabel('Parent type')
+      ->setDescription('The entity parent type to which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setSetting('max_length', EntityTypeInterface::ID_MAX_LENGTH)
+      ->setRevisionable(TRUE)
+      ->setDefaultValue('');
+
+    $fields['parent_field_name'] = BaseFieldDefinition::create('string')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_field_name')
+      ->setLabel('Parent field name')
+      ->setDescription('The entity parent field name to which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setSetting('max_length', FieldStorageConfig::NAME_MAX_LENGTH)
+      ->setRevisionable(TRUE);
+
+    $fields['revision_log_message'] = BaseFieldDefinition::create('string_long')
+      ->setDisplayOptions('form', [
+      'region' => 'hidden',
+    ]);
+
     return $fields;
   }
 
diff --git a/widget_engine.post_update.php b/widget_engine.post_update.php
new file mode 100755
index 0000000..bba43e2
--- /dev/null
+++ b/widget_engine.post_update.php
@@ -0,0 +1,149 @@
+<?php
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\field\Entity\FieldStorageConfig;
+
+
+/**
+ * Widget entity to be revisionable.
+ */
+
+function widget_engine_post_update_make_widget_revisionable(&$sandbox) {
+
+  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+  /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
+  $last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
+
+  $entity_type = $definition_update_manager->getEntityType('widget');
+  $field_storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions('widget');
+  
+
+  // Update the entity type definition.
+  $entity_keys = $entity_type->getKeys();
+  $entity_keys['revision'] = 'revision_id';
+  $entity_keys['revision_translation_affected'] = 'revision_translation_affected';
+
+  $entity_type->set('entity_keys', $entity_keys);
+  $entity_type->set('revision_table', 'widget_revision');
+  $entity_type->set('revision_data_table', 'widget_field_revision');
+
+  $entity_type->set('entity_revision_parent_type_field', 'parent_field_name');
+  $entity_type->set('entity_revision_parent_id_field', 'parent_id');
+  $entity_type->set('entity_revision_parent_field_name_field', 'parent_field_name');
+
+
+  $revision_metadata_keys = [
+    'revision_default' => 'revision_default',
+    'revision_user' => 'revision_user',
+    'revision_created' => 'revision_created',
+    'revision_log_message' => 'revision_log_message',
+  ];
+  $entity_type->set('revision_metadata_keys', $revision_metadata_keys);
+
+  // Update the field storage definitions and add the new ones required by a
+  // revisionable entity type.
+  $field_storage_definitions['langcode']->setRevisionable(TRUE);
+  $field_storage_definitions['name']->setRevisionable(TRUE);
+  $field_storage_definitions['wid']->setRevisionable(TRUE);
+  $field_storage_definitions['type']->setRevisionable(TRUE);
+  $field_storage_definitions['changed']->setRevisionable(TRUE);
+  $field_storage_definitions['created']->setRevisionable(TRUE);
+
+  $field_storage_definitions['wid'] = BaseFieldDefinition::create('integer')
+    ->setName('wid')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('wid'))
+    ->setReadOnly(TRUE)
+    ->setSetting('unsigned', TRUE);
+
+  $field_storage_definitions['revision_id'] = BaseFieldDefinition::create('integer')
+    ->setName('revision_id')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Revision ID'))
+    ->setReadOnly(TRUE)
+    ->setSetting('unsigned', TRUE);
+
+  $field_storage_definitions['revision_default'] = BaseFieldDefinition::create('boolean')
+    ->setName('revision_default')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Default revision'))
+    ->setDescription(new TranslatableMarkup('A flag indicating whether this was a default revision when it was saved.'))
+    ->setStorageRequired(TRUE)
+    ->setInternal(TRUE)
+    ->setTranslatable(FALSE)
+    ->setRevisionable(TRUE);
+
+  $field_storage_definitions['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
+    ->setName('revision_translation_affected')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Revision translation affected'))
+    ->setDescription(new TranslatableMarkup('Indicates if the last edit of a translation belongs to current revision.'))
+    ->setReadOnly(TRUE)
+    ->setRevisionable(TRUE)
+    ->setTranslatable(TRUE);
+
+  $field_storage_definitions['revision_created'] = BaseFieldDefinition::create('created')
+    ->setName('revision_created')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Revision create time'))
+    ->setDescription(new TranslatableMarkup('The time that the current revision was created.'))
+    ->setRevisionable(TRUE);
+  $field_storage_definitions['revision_user'] = BaseFieldDefinition::create('entity_reference')
+    ->setName('revision_user')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Revision user'))
+    ->setDescription(new TranslatableMarkup('The user ID of the author of the current revision.'))
+    ->setSetting('target_type', 'user')
+    ->setRevisionable(TRUE);
+
+  $field_storage_definitions['revision_log_message'] = BaseFieldDefinition::create('string_long')
+    ->setName('revision_log_message')
+    ->setTargetEntityTypeId('widget')
+    ->setTargetBundle(NULL)
+    ->setLabel(new TranslatableMarkup('Revision log message'))
+    ->setDescription(new TranslatableMarkup('Briefly describe the changes you have made.'))
+    ->setRevisionable(TRUE)
+    ->setDefaultValue('');
+
+  $field_storage_definitions['parent_id'] = BaseFieldDefinition::create('string')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_id')
+      ->setLabel('Parent ID')
+      ->setDescription('The ID of the parent entity of which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setRevisionable(TRUE)
+      ->setDefaultValue('');
+
+    $field_storage_definitions['parent_type'] = BaseFieldDefinition::create('string')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_type')
+      ->setLabel('Parent type')
+      ->setDescription('The entity parent type to which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setSetting('max_length', EntityTypeInterface::ID_MAX_LENGTH)
+      ->setRevisionable(TRUE)
+      ->setDefaultValue('');
+
+    $field_storage_definitions['parent_field_name'] = BaseFieldDefinition::create('string')
+      ->setTargetEntityTypeId('widget')	
+      ->setName('parent_field_name')
+      ->setLabel('Parent field name')
+      ->setDescription('The entity parent field name to which this entity is referenced.')
+      ->setSetting('is_ascii', TRUE)
+      ->setSetting('max_length', FieldStorageConfig::NAME_MAX_LENGTH)
+      ->setRevisionable(TRUE);
+  
+
+  $definition_update_manager->updateFieldableEntityType($entity_type, $field_storage_definitions, $sandbox);
+
+  return t('Widget have been converted to be revisionable.');
+}
+
