diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index f0855ef..2ab7412 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -129,6 +129,13 @@
   protected $isDefaultRevision = TRUE;
 
   /**
+   * Indicates whether this is an editable revision.
+   *
+   * @var bool
+   */
+  protected $keepNewRevisionId = FALSE;
+
+  /**
    * Overrides Entity::__construct().
    */
   public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
@@ -189,6 +196,17 @@ public function isDefaultRevision($new_value = NULL) {
   /**
    * {@inheritdoc}
    */
+  public function keepNewRevisionId($new_value = NULL) {
+    $return = $this->keepNewRevisionId;
+    if (isset($new_value)) {
+      $this->keepNewRevisionId = $new_value;
+    }
+    return $return;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getRevisionId() {
     return NULL;
   }
diff --git a/core/lib/Drupal/Core/Entity/FieldableDatabaseStorageController.php b/core/lib/Drupal/Core/Entity/FieldableDatabaseStorageController.php
index 222145f..bd1ea98 100644
--- a/core/lib/Drupal/Core/Entity/FieldableDatabaseStorageController.php
+++ b/core/lib/Drupal/Core/Entity/FieldableDatabaseStorageController.php
@@ -739,7 +739,7 @@ protected function saveRevision(EntityInterface $entity) {
 
     // When saving a new revision, set any existing revision ID to NULL so as to
     // ensure that a new revision will actually be created.
-    if ($entity->isNewRevision() && isset($record->{$this->revisionKey})) {
+    if ($entity->isNewRevision() && isset($record->{$this->revisionKey}) && !$entity->keepNewRevisionId()) {
       $record->{$this->revisionKey} = NULL;
     }
 
diff --git a/core/lib/Drupal/Core/Entity/RevisionableInterface.php b/core/lib/Drupal/Core/Entity/RevisionableInterface.php
index d246d24..2f41023 100644
--- a/core/lib/Drupal/Core/Entity/RevisionableInterface.php
+++ b/core/lib/Drupal/Core/Entity/RevisionableInterface.php
@@ -54,6 +54,21 @@ public function getRevisionId();
   public function isDefaultRevision($new_value = NULL);
 
   /**
+   * Checks if this revision is editable.
+   *
+   * Editing revisions is very strongly discouraged.
+   *
+   * @param bool $new_value
+   *   (optional) A Boolean to (re)set the editable flag. DO NOT USE. This is
+   *   solely for migrate to use.
+   *
+   * @return bool
+   *   TRUE if the revision is editable, FALSE otherwise. Defaults to FALSE.
+   *   If $new_value was passed, the previous value is returned.
+   */
+  public function keepNewRevisionId($new_value = NULL);
+
+  /**
    * Acts on a revision before it gets saved.
    *
    * @param EntityStorageControllerInterface $storage_controller
