diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php
index 9fbd603..912c5fb 100644
--- a/core/modules/node/src/Controller/NodeController.php
+++ b/core/modules/node/src/Controller/NodeController.php
@@ -8,6 +8,7 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Url;
+use Drupal\node\NodeStorageInterface;
 use Drupal\node\NodeTypeInterface;
 use Drupal\node\NodeInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -170,12 +171,9 @@ public function revisionOverview(NodeInterface $node) {
     $delete_permission = (($account->hasPermission("delete $type revisions") || $account->hasPermission('delete all revisions') || $account->hasPermission('administer nodes')) && $node->access('delete'));
 
     $rows = array();
-
-    $vids = $node_storage->revisionIds($node);
-
     $latest_revision = TRUE;
 
-    foreach (array_reverse($vids) as $vid) {
+    foreach ($this->getRevisionIds($node, $node_storage) as $vid) {
       /** @var \Drupal\node\NodeInterface $revision */
       $revision = $node_storage->loadRevision($vid);
       // Only show revisions that are affected by the language that is being
@@ -263,6 +261,8 @@ public function revisionOverview(NodeInterface $node) {
       ),
     );
 
+    $build['pager'] = array('#type' => 'pager');
+
     return $build;
   }
 
@@ -279,4 +279,25 @@ public function addPageTitle(NodeTypeInterface $node_type) {
     return $this->t('Create @name', array('@name' => $node_type->label()));
   }
 
+  /**
+   * Gets a list of node revision IDs for a specific node.
+   *
+   * @param \Drupal\node\NodeInterface
+   *   The node entity.
+   * @param \Drupal\node\NodeStorageInterface $node_storage
+   *   The node storage handler.
+   *
+   * @return int[]
+   *   Node revision IDs (in descending order).
+   */
+  protected function getRevisionIds(NodeInterface $node, NodeStorageInterface $node_storage) {
+    $result = $node_storage->getQuery()
+      ->allRevisions()
+      ->condition($node->getEntityType()->getKey('id'), $node->id())
+      ->sort($node->getEntityType()->getKey('revision'), 'DESC')
+      ->pager(50)
+      ->execute();
+    return array_keys($result);
+  }
+
 }
diff --git a/core/modules/node/src/Tests/NodeRevisionsAllTest.php b/core/modules/node/src/Tests/NodeRevisionsAllTest.php
index 582ca5b..380b1ae 100644
--- a/core/modules/node/src/Tests/NodeRevisionsAllTest.php
+++ b/core/modules/node/src/Tests/NodeRevisionsAllTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\node\NodeInterface;
+
 /**
  * Create a node with revisions and test viewing, saving, reverting, and
  * deleting revisions for user with access to all.
@@ -15,7 +17,7 @@ class NodeRevisionsAllTest extends NodeTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $node_storage = $this->container->get('entity.manager')->getStorage('node');
+
     // Create and log in user.
     $web_user = $this->drupalCreateUser(
       array(
@@ -45,17 +47,7 @@ protected function setUp() {
     for ($i = 0; $i < $revision_count; $i++) {
       $logs[] = $node->revision_log = $this->randomMachineName(32);
 
-      // Create revision with a random title and body and update variables.
-      $node->title = $this->randomMachineName();
-      $node->body = array(
-        'value' => $this->randomMachineName(32),
-        'format' => filter_default_format(),
-      );
-      $node->setNewRevision();
-      $node->save();
-
-      $node_storage->resetCache(array($node->id()));
-      $node = $node_storage->load($node->id()); // Make sure we get revision information.
+      $node = $this->createNodeRevision($node);
       $nodes[] = clone $node;
     }
 
@@ -64,6 +56,33 @@ protected function setUp() {
   }
 
   /**
+   * Creates a new revision for a given node.
+   *
+   * @param \Drupal\node\NodeInterface $node
+   *   A node object.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   A node object with up to date revision information.
+   */
+  protected function createNodeRevision(NodeInterface $node) {
+    $node_storage = $this->container->get('entity.manager')->getStorage('node');
+
+    // Create revision with a random title and body and update variables.
+    $node->title = $this->randomMachineName();
+    $node->body = array(
+      'value' => $this->randomMachineName(32),
+      'format' => filter_default_format(),
+    );
+    $node->setNewRevision();
+    $node->save();
+
+    $node_storage->resetCache(array($node->id()));
+
+    // Make sure we get revision information.
+    return $node_storage->load($node->id());
+  }
+
+  /**
    * Checks node revision operations.
    */
   function testRevisions() {
@@ -145,6 +164,29 @@ function testRevisions() {
       '%title' => $nodes[2]->getTitle(),
       '%revision-date' => format_date($old_revision_date),
     )));
+
+    // Create 50 more revisions in order to trigger paging on the revisions
+    // overview screen.
+    $node = $nodes[0];
+    for ($i = 0; $i < 50; $i++) {
+      $logs[] = $node->revision_log = $this->randomMachineName(32);
+
+      $node = $this->createNodeRevision($node);
+      $nodes[] = clone $node;
+    }
+
+    $this->drupalGet('node/' . $node->id() . '/revisions');
+
+    // Check that the pager exists.
+    $this->assertRaw('page=1');
+
+    // Check that the last revision is displayed on the first page.
+    $this->assertText(end($logs));
+
+    // Go to the second page and check that one of the initial three revisions
+    // is displayed.
+    $this->clickLink(t('Page 2'));
+    $this->assertText($logs[2]);
   }
 
 }
