diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
index 8b912e0..e347688 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
@@ -10,6 +10,7 @@ namespace Drupal\inline_entity_form\Plugin\Field\FieldWidget;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\SortArray;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\RevisionableInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
@@ -26,7 +27,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *   id = "inline_entity_form_complex",
  *   label = @Translation("Inline entity form - Complex"),
  *   field_types = {
- *     "entity_reference"
+ *     "entity_reference",
+ *     "entity_reference_revisions"
  *   },
  *   multiple_values = true
  * )
@@ -53,7 +55,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
    *   The widget settings.
    * @param array $third_party_settings
    *   Any third party settings.
-   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   Entity manager service.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   Module handler service.
@@ -177,6 +179,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
 
     $settings = $this->getSettings();
     $target_type = $this->getFieldSetting('target_type');
+
     // Get the entity type labels for the UI strings.
     $labels = $this->labels();
 
@@ -618,7 +621,20 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
           /** @var \Drupal\Core\Entity\EntityInterface $entity */
           $entity = $item['entity'];
           if (!empty($item['needs_save'])) {
+            if ($entity instanceof RevisionableInterface) {
+              $entity->setNewRevision();
+              // If a new revision is created, save the current user as revision author.
+              $entity->setRevisionCreationTime(REQUEST_TIME);
+
+              if (in_array('Drupal\node\NodeInterface', class_implements($entity))) {
+                $entity->setRevisionAuthorId(\Drupal::currentUser()->id());
+              }
+              elseif (in_array('Drupal\entity\Revision\EntityRevisionLogInterface', class_implements($entity))) {
+                $entity->setRevisionUser(\Drupal::currentUser());
+              }
+            }
             $entity->save();
+            $item['needs_save'] = FALSE;
           }
           if (!empty($item['delete'])) {
             $entity->delete();
@@ -627,8 +643,6 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
         }
       }
 
-
-
       // Let the widget massage the submitted values.
       $values = $this->massageFormValues($values, $form, $form_state);
 
@@ -658,6 +672,9 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
       $item = $value;
       if (isset($item['entity'])) {
         $item['target_id'] = $item['entity']->id();
+        if ($item['entity'] instanceof RevisionableInterface) {
+          $item['target_revision_id'] = $item['entity']->getRevisionId();
+        }
         $items[] = $item;
       }
       else {
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
index 102e734..0b93d67 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
@@ -20,7 +20,8 @@ use Drupal\Core\Form\FormStateInterface;
  *   id = "inline_entity_form_simple",
  *   label = @Translation("Inline entity form - Simple"),
  *   field_types = {
- *     "entity_reference"
+ *     "entity_reference",
+ *     "entity_reference_revisions"
  *   },
  *   multiple_values = false
  * )
