diff --git a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
index 012ae07..b0c361c 100644
--- a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Paragraphs widget implementation for entity reference.
+ * Contains \Drupal\paragraphs\Plugin\Field\FieldWidget\InlineParagraphsWidget.
  */
 
 namespace Drupal\paragraphs\Plugin\Field\FieldWidget;
@@ -11,6 +11,7 @@ use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\RevisionableInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\WidgetBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -1067,13 +1068,31 @@ class InlineParagraphsWidget extends WidgetBase {
       return $values;
     }
 
+    $form_object = $form_state->getFormObject();
+    $entity = $form_object->getEntity();
     $field_name = $this->fieldDefinition->getName();
     $widget_state = static::getWidgetState($form['#parents'], $field_name, $form_state);
+
+    $new_revision = FALSE;
+    if ($entity instanceof RevisionableInterface) {
+      if ($entity->isNewRevision()) {
+        $new_revision = TRUE;
+      }
+      // Most of the time we don't know yet if the host entity is going to be
+      // saved as a new revision using RevisionableInterface::isNewRevision().
+      // Most entity types (at least nodes) however use a boolean property named
+      // "revision" to indicate whether a new revision should be saved. Use that
+      // property.
+      elseif ($entity->getEntityType()->hasKey('revision') && $form_state->getValue('revision')) {
+        $new_revision = TRUE;
+      }
+    }
+
     foreach ($values as $delta => &$item) {
       if (isset($widget_state['paragraphs'][$item['_original_delta']]['entity'])
         && $widget_state['paragraphs'][$item['_original_delta']]['mode'] != 'remove') {
         $paragraphs_entity = $widget_state['paragraphs'][$item['_original_delta']]['entity'];
-        $paragraphs_entity->setNewRevision(TRUE);
+        $paragraphs_entity->setNewRevision($new_revision);
         $paragraphs_entity->save();
         $item['target_id'] = $paragraphs_entity->id();
         $item['target_revision_id'] = $paragraphs_entity->getRevisionId();
diff --git a/src/Tests/ParagraphsAdministrationTest.php b/src/Tests/ParagraphsAdministrationTest.php
index 049f6bc..60d4110 100644
--- a/src/Tests/ParagraphsAdministrationTest.php
+++ b/src/Tests/ParagraphsAdministrationTest.php
@@ -98,8 +98,36 @@ class ParagraphsAdministrationTest extends WebTestBase {
     ];
     $this->drupalPostForm(NULL, $edit, t('Save and publish'));
 
-    // Edit the just created node. Create new revision.
-    $this->drupalGet('node/1/edit');
+    $node = $this->drupalGetNodeByTitle('TEST TITEL');
+    $paragraph1 = $node->field_paragraphs[0]->target_id;
+    $paragraph2 = $node->field_paragraphs[1]->target_id;
+
+    $node_revisions_count = \Drupal::entityQuery('node')->condition('nid', $node->id())->allRevisions()->count()->execute();
+    $this->assertEqual($node_revisions_count, 1);
+    $paragraph1_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph1)->allRevisions()->count()->execute();
+    $paragraph2_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph2)->allRevisions()->count()->execute();
+    $this->assertEqual($paragraph1_revisions_count, 1);
+    $this->assertEqual($paragraph2_revisions_count, 1);
+
+    // Edit the node without creating a revision. There should still be only 1
+    // revision for nodes and paragraphs.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $edit = [
+      'field_paragraphs[0][subform][field_text][0][value]' => 'Foo Bar 1',
+      'revision' => FALSE,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and keep published'));
+
+    $node_revisions_count = \Drupal::entityQuery('node')->condition('nid', $node->id())->allRevisions()->count()->execute();
+    $this->assertEqual($node_revisions_count, 1);
+    $paragraph1_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph1)->allRevisions()->count()->execute();
+    $paragraph2_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph2)->allRevisions()->count()->execute();
+    $this->assertEqual($paragraph1_revisions_count, 1);
+    $this->assertEqual($paragraph2_revisions_count, 1);
+
+    // Edit the just created node. Create new revision. Now we should have 2
+    // revisions for nodes and paragraphs.
+    $this->drupalGet('node/' . $node->id() . '/edit');
     $edit = [
       'title[0][value]' => 'TEST TITLE',
       'field_paragraphs[0][subform][field_text][0][value]' => 'Foo Bar 2',
@@ -107,8 +135,15 @@ class ParagraphsAdministrationTest extends WebTestBase {
     ];
     $this->drupalPostForm(NULL, $edit, t('Save and keep published'));
 
+    $node_revisions_count = \Drupal::entityQuery('node')->condition('nid', $node->id())->allRevisions()->count()->execute();
+    $this->assertEqual($node_revisions_count, 2);
+    $paragraph1_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph1)->allRevisions()->count()->execute();
+    $paragraph2_revisions_count = \Drupal::entityQuery('paragraph')->condition('id', $paragraph2)->allRevisions()->count()->execute();
+    $this->assertEqual($paragraph1_revisions_count, 2);
+    $this->assertEqual($paragraph2_revisions_count, 2);
+
     // Assert the paragraphs have been changed.
-    $this->assertNoText('Test text 1');
+    $this->assertNoText('Foo Bar 1');
     $this->assertText('Test text 2');
     $this->assertText('Foo Bar 2');
     $this->assertText('TEST TITLE');
@@ -125,7 +160,7 @@ class ParagraphsAdministrationTest extends WebTestBase {
     // Assert the node has been reverted.
     $this->assertNoText('Foo Bar 2');
     $this->assertText('Test text 2');
-    $this->assertText('Test text 1');
+    $this->assertText('Foo Bar 1');
     $this->assertText('TEST TITEL');
   }
 
