diff --git a/core/modules/entity/lib/Drupal/entity/Entity.php b/core/modules/entity/lib/Drupal/entity/Entity.php
index f0f5a76..a02619a 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity.php
@@ -39,6 +39,13 @@ class Entity implements EntityInterface {
   protected $enforceIsNew;
 
   /**
+   * Indicates whether this is the current revision.
+   *
+   * @var bool
+   */
+  public $isCurrentRevision = TRUE;
+
+  /**
    * Constructs a new entity object.
    */
   public function __construct(array $values = array(), $entity_type) {
@@ -249,4 +256,19 @@ class Entity implements EntityInterface {
   public function entityInfo() {
     return entity_get_info($this->entityType);
   }
+
+  /**
+   * Implements Drupal\entity\EntityInterface::getRevisionId().
+   */
+  public function getRevisionId() {
+    return NULL;
+  }
+
+  /**
+   * Implements Drupal\entity\EntityInterface::isCurrentRevision().
+   */
+  public function isCurrentRevision() {
+    return $this->isCurrentRevision;
+  }
+
 }
diff --git a/core/modules/entity/lib/Drupal/entity/EntityController.php b/core/modules/entity/lib/Drupal/entity/EntityController.php
index 3edc4cc..4d5b56f 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityController.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityController.php
@@ -252,6 +252,10 @@ class EntityController implements EntityControllerInterface {
         }
       }
       $query->fields('revision', $entity_revision_fields);
+
+      // Compare revision id of the base and revision table, if equal then this
+      // is the current revision.
+      $query->addExpression('base.' . $this->revisionKey . ' = revision.' . $this->revisionKey, 'isCurrentRevision');
     }
 
     $query->fields('base', $entity_fields);
diff --git a/core/modules/entity/lib/Drupal/entity/EntityInterface.php b/core/modules/entity/lib/Drupal/entity/EntityInterface.php
index c4c44c2..769bf4d 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityInterface.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityInterface.php
@@ -182,4 +182,22 @@ interface EntityInterface {
    * @see entity_get_info()
    */
   public function entityInfo();
+
+  /**
+   * Returns the revision identifier of the entity.
+   *
+   * @return
+   *   The revision identifier of the entity, or NULL if the entity does not
+   *   have a revision identifier.
+   */
+  public function getRevisionId();
+
+  /**
+   * Checks if this entity is the active revision.
+   *
+   * @return bool
+   *   TRUE if the entity is the active revision, FALSE otherwise.
+   */
+  public function isCurrentRevision();
+
 }
diff --git a/core/modules/node/lib/Drupal/node/Node.php b/core/modules/node/lib/Drupal/node/Node.php
index 0e8347b..b997105 100644
--- a/core/modules/node/lib/Drupal/node/Node.php
+++ b/core/modules/node/lib/Drupal/node/Node.php
@@ -167,4 +167,11 @@ class Node extends Entity {
     $duplicate->vid = NULL;
     return $duplicate;
   }
+
+  /**
+   * Overrides Drupal\entity\Entity::getRevisionId().
+   */
+  public function getRevisionId() {
+    return $this->vid;
+  }
 }
diff --git a/core/modules/node/lib/Drupal/node/NodeStorageController.php b/core/modules/node/lib/Drupal/node/NodeStorageController.php
index dccec71..e868297 100644
--- a/core/modules/node/lib/Drupal/node/NodeStorageController.php
+++ b/core/modules/node/lib/Drupal/node/NodeStorageController.php
@@ -149,6 +149,10 @@ class NodeStorageController extends EntityDatabaseStorageController {
     }
     // Make sure to update the new revision key for the entity.
     $entity->{$this->revisionKey} = $record->{$this->revisionKey};
+
+    // @todo: According to the above line, a newly saved revision is always the
+    //        current one. Is that true?
+    $entity->isCurrentRevision = TRUE;
   }
 
   /**
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeRevisionsTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeRevisionsTest.php
index c7f29fa..9f0377d 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeRevisionsTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeRevisionsTest.php
@@ -75,6 +75,9 @@ class NodeRevisionsTest extends NodeTestBase {
       $this->assertText($log, t('Log message found.'));
     }
 
+    // Confirm that this is the current revision.
+    $this->assertTrue($node->isCurrentRevision(), 'Third node revision is the active one.');
+
     // Confirm that revisions revert properly.
     $this->drupalPost("node/$node->nid/revisions/{$nodes[1]->vid}/revert", array(), t('Revert'));
     $this->assertRaw(t('@type %title has been reverted back to the revision from %revision-date.',
@@ -83,6 +86,10 @@ class NodeRevisionsTest extends NodeTestBase {
     $reverted_node = node_load($node->nid);
     $this->assertTrue(($nodes[1]->body[LANGUAGE_NOT_SPECIFIED][0]['value'] == $reverted_node->body[LANGUAGE_NOT_SPECIFIED][0]['value']), t('Node reverted correctly.'));
 
+    // Confirm that this is not the current version.
+    $node = node_load($node->nid, $node->vid);
+    $this->assertFalse($node->isCurrentRevision(), 'Third node revision is not the active one.');
+
     // Confirm revisions delete properly.
     $this->drupalPost("node/$node->nid/revisions/{$nodes[1]->vid}/delete", array(), t('Delete'));
     $this->assertRaw(t('Revision from %revision-date of @type %title has been deleted.',
