diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 1d69be2..eb1a1b2 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -17,7 +17,7 @@
  *
  * @ingroup entity_api
  */
-abstract class ContentEntityBase extends Entity implements \IteratorAggregate, ContentEntityInterface, TranslationStatusInterface {
+abstract class ContentEntityBase extends Entity implements \IteratorAggregate, ContentEntityInterface, TranslationStatusInterface, OriginalRevisionIdInterface  {
 
   /**
    * The plain data values of the contained fields.
@@ -149,6 +149,13 @@
   protected $validationRequired = FALSE;
 
   /**
+   * The original revision id before the new revision was set.
+   *
+   * @var int
+   */
+  protected $originalRevisionId;
+
+  /**
    * {@inheritdoc}
    */
   public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
@@ -219,6 +226,9 @@ public function __construct(array $values, $entity_type, $bundle = FALSE, $trans
         }
       }
     }
+    // Store the original revision identfier the entity has been loaded with to
+    // keep it safe from changes.
+    $this->originalRevisionId = $this->getRevisionId();
   }
 
   /**
@@ -273,6 +283,20 @@ public function setNewRevision($value = TRUE) {
   /**
    * {@inheritdoc}
    */
+  public function getOriginalRevisionId() {
+    return $this->originalRevisionId;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function resetOriginalRevisionId() {
+    $this->originalRevisionId = $this->getRevisionId();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function isNewRevision() {
     return $this->newRevision || ($this->getEntityType()->hasKey('revision') && !$this->getRevisionId());
   }
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
index afdce40..127c188 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
@@ -305,6 +305,7 @@ protected function doPostSave(EntityInterface $entity, $update) {
 
     // The revision is stored, it should no longer be marked as new now.
     if ($this->entityType->isRevisionable()) {
+      $entity->resetOriginalRevisionId();
       $entity->setNewRevision(FALSE);
     }
   }
diff --git a/core/lib/Drupal/Core/Entity/OriginalRevisionIdInterface.php b/core/lib/Drupal/Core/Entity/OriginalRevisionIdInterface.php
new file mode 100644
index 0000000..4cacc4e
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/OriginalRevisionIdInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Core\Entity;
+
+interface OriginalRevisionIdInterface {
+
+  /**
+   * Gets the original revision identifier of the entity.
+   *
+   * After calling ::setNewRevision, the revision identifier will be unset to
+   * enforce the creation of a new revision identifier on save and
+   * ::getRevisionId will not be able to return the revision identifier, for
+   * which the entity has been loaded, but ::getOriginalRevisionId will.
+   *
+   * @return
+   *   The original revision identifier of the entity, or NULL if the entity
+   *   does not have a revision identifier.
+   */
+  public function getOriginalRevisionId();
+
+  /**
+   * Resets the original revision identifier after the entity got a new one.
+   *
+   * After the entity has been saved, the storage should call this function to
+   * set the original revision identifier to the new one, the entity received
+   * after it has been saved.
+   */
+  public function resetOriginalRevisionId();
+
+}
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index b0c8cbf..4b022a3 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -399,6 +399,13 @@ function entity_test_entity_test_insert($entity) {
 }
 
 /**
+ * Implements hook_entity_update().
+ */
+function entity_test_entity_update(EntityInterface $entity) {
+  \Drupal::state()->set('entity_test.originalRevisionId', $entity->getOriginalRevisionId());
+}
+
+/**
  * Implements hook_entity_field_access().
  *
  * @see \Drupal\system\Tests\Entity\FieldAccessTest::testFieldAccess()
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php
new file mode 100644
index 0000000..138dbef
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Entity;
+
+use Drupal\entity_test\Entity\EntityTestMulRev;
+
+/**
+ * Tests the original revision of an entity.
+ *
+ * @group entity
+ */
+class EntityOriginalRevisionTest extends EntityKernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['system', 'entity_test'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('entity_test_mulrev');
+
+  }
+
+  public function testPreviousProperty() {
+    $entity = EntityTestMulRev::create();
+    $entity->save();
+
+    $loaded = EntityTestMulRev::load($entity->id());
+    $loaded->setNewRevision(TRUE);
+    $loaded->save();
+
+    /** @var \Drupal\Core\Entity\ContentEntityInterface $loaded_original */
+    $originalRevisionId = \Drupal::state()->get('entity_test.originalRevisionId');
+    $this->assertEquals($entity->getRevisionId(), $originalRevisionId);
+    $this->assertNotEquals($loaded->getRevisionId(), $originalRevisionId);
+
+    $loaded->set('name', 'dublin');
+    $loaded->save();
+    $originalRevisionId2 = \Drupal::state()->get('entity_test.originalRevisionId');
+    $this->assertEquals($loaded->getRevisionId(), $originalRevisionId2);
+  }
+}
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
index cb73533..bc5965b 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
@@ -215,7 +215,7 @@ public function testIsNewRevision() {
       ->method('hasKey')
       ->with('revision')
       ->will($this->returnValue(TRUE));
-    $this->entityType->expects($this->at(5))
+    $this->entityType->expects($this->at(6))
       ->method('getKey')
       ->with('revision')
       ->will($this->returnValue('revision_id'));
