diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -421,6 +421,7 @@
     'rsrc/js/application/repository/repository-crossreference.js' => 'f9539603',
     'rsrc/js/application/search/behavior-reorder-queries.js' => 'e9581f08',
     'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => 'd6f54db0',
+    'rsrc/js/application/transactions/behavior-show-older-transactions.js' => '2bd73b87',
     'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => '9f7309fb',
     'rsrc/js/application/transactions/behavior-transaction-list.js' => '13c739ea',
     'rsrc/js/application/uiexample/JavelinViewExample.js' => 'd4a14807',
@@ -624,6 +625,7 @@
     'javelin-behavior-phabricator-reveal-content' => '60821bc7',
     'javelin-behavior-phabricator-search-typeahead' => '724b1247',
     'javelin-behavior-phabricator-show-all-transactions' => '7c273581',
+    'javelin-behavior-phabricator-show-older-transactions' => '2bd73b87',
     'javelin-behavior-phabricator-tooltips' => '3ee3408b',
     'javelin-behavior-phabricator-transaction-comment-form' => '9f7309fb',
     'javelin-behavior-phabricator-transaction-list' => '13c739ea',
@@ -1004,6 +1006,11 @@
       'javelin-workflow',
       'javelin-json',
     ),
+    '2bd73b87' => array(
+      'javelin-behavior',
+      'javelin-stratcom',
+      'javelin-dom',
+    ),
     '2bfa2836' => array(
       'javelin-behavior',
       'javelin-stratcom',
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1248,6 +1248,7 @@
     'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
     'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php',
     'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php',
+    'PhabricatorApplicationTransactionShowOlderController' => 'applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php',
     'PhabricatorApplicationTransactionStructureException' => 'applications/transactions/exception/PhabricatorApplicationTransactionStructureException.php',
     'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php',
     'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php',
@@ -4327,6 +4328,7 @@
     'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
     'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse',
+    'PhabricatorApplicationTransactionShowOlderController' => 'PhabricatorApplicationTransactionController',
     'PhabricatorApplicationTransactionStructureException' => 'Exception',
     'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
     'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType',
@@ -5312,6 +5314,7 @@
       'PhabricatorRepositoryDAO',
       'PhabricatorPolicyInterface',
       'PhabricatorFlaggableInterface',
+      'PhabricatorProjectInterface',
       'PhabricatorTokenReceiverInterface',
       'PhabricatorSubscribableInterface',
       'PhabricatorMentionableInterface',
diff --git a/src/applications/base/controller/PhabricatorController.php b/src/applications/base/controller/PhabricatorController.php
--- a/src/applications/base/controller/PhabricatorController.php
+++ b/src/applications/base/controller/PhabricatorController.php
@@ -534,12 +534,19 @@
     $viewer = $this->getRequest()->getUser();
     $xaction = $object->getApplicationTransactionTemplate();
     $view = $xaction->getApplicationTransactionViewObject();
+    $pager = id(new AphrontCursorPagerView())
+      ->readFromRequest($this->getRequest())
+      ->setURI(new PhutilURI(
+        '/transactions/showolder/'.$object->getPHID().'/'))
+      ->setPageSize(10);
 
     $xactions = $query
       ->setViewer($viewer)
       ->withObjectPHIDs(array($object->getPHID()))
       ->needComments(true)
-      ->execute();
+      ->setReversePaging(false)
+      ->executeWithCursorPager($pager);
+    $xactions = array_reverse($xactions);
 
     if ($engine) {
       foreach ($xactions as $xaction) {
@@ -556,7 +563,8 @@
     $timeline = $view
       ->setUser($viewer)
       ->setObjectPHID($object->getPHID())
-      ->setTransactions($xactions);
+      ->setTransactions($xactions)
+      ->setPager($pager);
 
     return $timeline;
   }
diff --git a/src/applications/transactions/application/PhabricatorTransactionsApplication.php b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
--- a/src/applications/transactions/application/PhabricatorTransactionsApplication.php
+++ b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
@@ -29,6 +29,8 @@
           => 'PhabricatorApplicationTransactionCommentRawController',
         'detail/(?<phid>[^/]+)/'
           => 'PhabricatorApplicationTransactionDetailController',
+        'showolder/(?<phid>[^/]+)/'
+          => 'PhabricatorApplicationTransactionShowOlderController',
         '(?P<value>old|new)/(?<phid>[^/]+)/'
           => 'PhabricatorApplicationTransactionValueController',
       ),
diff --git a/src/applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php b/src/applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php
@@ -0,0 +1,53 @@
+<?php
+
+final class PhabricatorApplicationTransactionShowOlderController
+  extends PhabricatorApplicationTransactionController {
+
+  private $phid;
+
+  public function shouldAllowPublic() {
+    return true;
+  }
+
+  public function willProcessRequest(array $data) {
+    $this->phid = $data['phid'];
+  }
+
+  public function processRequest() {
+    $request = $this->getRequest();
+    $viewer = $request->getUser();
+
+    $object = id(new PhabricatorObjectQuery())
+      ->withPHIDs(array($this->phid))
+      ->setViewer($viewer)
+      ->executeOne();
+    if (!$object) {
+      return new Aphront404Response();
+    }
+
+    $template = $object->getApplicationTransactionTemplate();
+    $queries = id(new PhutilSymbolLoader())
+      ->setAncestorClass('PhabricatorApplicationTransactionQuery')
+      ->loadObjects();
+
+    $object_query = null;
+    foreach ($queries as $query) {
+      if ($query->getTemplateApplicationTransaction() == $template) {
+        $object_query = $query;
+        break;
+      }
+    }
+
+    if (!$object_query) {
+      return new Aphront404Response();
+    }
+
+    $timeline = $this->buildTransactionTimeline(
+      $object,
+      $query);
+
+    return id(new AphrontAjaxResponse())
+      ->setContent(array('timeline' => $timeline->buildEvents()));
+  }
+
+}
diff --git a/src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php b/src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php
--- a/src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php
+++ b/src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php
@@ -7,6 +7,7 @@
   private $objectPHIDs;
   private $authorPHIDs;
   private $transactionTypes;
+  private $reversePaging = true;
 
   private $needComments = true;
   private $needHandles  = true;
@@ -17,8 +18,13 @@
     return array();
   }
 
+  public function setReversePaging($bool) {
+    $this->reversePaging = $bool;
+    return $this;
+  }
+
   protected function getReversePaging() {
-    return true;
+    return $this->reversePaging;
   }
 
   public function withPHIDs(array $phids) {
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php
--- a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php
@@ -13,6 +13,7 @@
   private $shouldTerminate = false;
   private $quoteTargetID;
   private $quoteRef;
+  private $pager;
 
   public function setQuoteRef($quote_ref) {
     $this->quoteRef = $quote_ref;
@@ -71,6 +72,15 @@
     return $this;
   }
 
+  public function setPager(AphrontCursorPagerView $pager) {
+    $this->pager = $pager;
+    return $this;
+  }
+
+  public function getPager() {
+    return $this->pager;
+  }
+
   public function buildEvents($with_hiding = false) {
     $user = $this->getUser();
 
@@ -129,6 +139,13 @@
         } else {
           $group_event->addEventToGroup($event);
         }
+        if ($hide_by_default) {
+          $pager = $this->getPager();
+          if ($pager) {
+            // TODO - is if before or after?
+            $pager->setNextPageID($xaction->getID());
+          }
+        }
       }
       $events[] = $group_event;
 
@@ -142,18 +159,32 @@
       throw new Exception('Call setObjectPHID() before render()!');
     }
 
+    $view = $this->buildPHUITimelineView();
+
+    if ($this->getShowEditActions()) {
+      Javelin::initBehavior('phabricator-transaction-list');
+    }
+
+    return $view->render();
+  }
+
+  public function buildPHUITimelineView() {
+    if (!$this->getObjectPHID()) {
+      throw new Exception(
+        'Call setObjectPHID() before buildPHUITimelineView()!');
+    }
+
     $view = new PHUITimelineView();
     $view->setShouldTerminate($this->shouldTerminate);
     $events = $this->buildEvents($with_hiding = true);
     foreach ($events as $event) {
       $view->addEvent($event);
     }
-
-    if ($this->getShowEditActions()) {
-      Javelin::initBehavior('phabricator-transaction-list');
+    if ($this->getPager()) {
+      $view->setPager($this->getPager());
     }
 
-    return $view->render();
+    return $view;
   }
 
   protected function getOrBuildEngine() {
diff --git a/src/view/phui/PHUITimelineView.php b/src/view/phui/PHUITimelineView.php
--- a/src/view/phui/PHUITimelineView.php
+++ b/src/view/phui/PHUITimelineView.php
@@ -5,6 +5,7 @@
   private $events = array();
   private $id;
   private $shouldTerminate = false;
+  private $pager;
 
   public function setID($id) {
     $this->id = $id;
@@ -16,12 +17,33 @@
     return $this;
   }
 
+  public function setPager(AphrontCursorPagerView $pager) {
+    $this->pager = $pager;
+    return $this;
+  }
+
+  public function getPager() {
+    return $this->pager;
+  }
+
   public function addEvent(PHUITimelineEventView $event) {
     $this->events[] = $event;
     return $this;
   }
 
   public function render() {
+    $events = $this->buildEvents();
+
+    return phutil_tag(
+      'div',
+      array(
+        'class' => 'phui-timeline-view',
+        'id' => $this->id,
+      ),
+      $events);
+  }
+
+  public function buildEvents() {
     require_celerity_resource('phui-timeline-view-css');
 
     $spacer = self::renderSpacer();
@@ -39,48 +61,76 @@
 
     $events = array();
     if ($hide) {
-      $hidden = phutil_implode_html($spacer, $hide);
-      $count = count($hide);
-
-      $show_id = celerity_generate_unique_node_id();
-      $hide_id = celerity_generate_unique_node_id();
-      $link_id = celerity_generate_unique_node_id();
-
-      Javelin::initBehavior(
-        'phabricator-show-all-transactions',
-        array(
-          'anchors' => array_filter(mpull($hide, 'getAnchor')),
-          'linkID' => $link_id,
-          'hideID' => $hide_id,
-          'showID' => $show_id,
-        ));
-
-      $events[] = phutil_tag(
-        'div',
-        array(
-          'id' => $hide_id,
-          'class' => 'phui-timeline-older-transactions-are-hidden',
-        ),
-        array(
-          pht('%s older changes(s) are hidden.', new PhutilNumber($count)),
-          ' ',
-          javelin_tag(
-            'a',
-            array(
-              'href' => '#',
+      if ($this->getPager()) {
+
+        Javelin::initBehavior(
+          'phabricator-show-older-transactions',
+          array());
+
+        $events[] = javelin_tag(
+          'div',
+          array(
+            'sigil' => 'show-older-block',
+            'class' => 'phui-timeline-older-transactions-are-hidden',
+          ),
+          array(
+            pht('Older changes are hidden. '),
+            ' ',
+            javelin_tag(
+              'a',
+              array(
+              'href' => (string) $this->getPager()->getNextPageURI(),
               'mustcapture' => true,
-              'id' => $link_id,
+              'sigil' => 'show-older-link',
             ),
-            pht('Show all changes.')),
-        ));
-
-      $events[] = phutil_tag(
-        'div',
-        array(
-          'id' => $show_id,
-          'style' => 'display: none',
-        ),
-        $hidden);
+            pht('Show older changes.')),
+          ));
+
+      } else {
+
+        $hidden = phutil_implode_html($spacer, $hide);
+        $count = count($hide);
+
+        $show_id = celerity_generate_unique_node_id();
+        $hide_id = celerity_generate_unique_node_id();
+        $link_id = celerity_generate_unique_node_id();
+
+        Javelin::initBehavior(
+          'phabricator-show-all-transactions',
+          array(
+            'anchors' => array_filter(mpull($hide, 'getAnchor')),
+            'linkID' => $link_id,
+            'hideID' => $hide_id,
+            'showID' => $show_id,
+          ));
+
+        $events[] = phutil_tag(
+          'div',
+          array(
+            'id' => $hide_id,
+            'class' => 'phui-timeline-older-transactions-are-hidden',
+          ),
+          array(
+            pht('%s older changes(s) are hidden.', new PhutilNumber($count)),
+            ' ',
+            javelin_tag(
+              'a',
+              array(
+                'href' => '#',
+                'mustcapture' => true,
+                'id' => $link_id,
+              ),
+              pht('Show all changes.')),
+          ));
+
+        $events[] = phutil_tag(
+          'div',
+          array(
+            'id' => $show_id,
+            'style' => 'display: none',
+          ),
+          $hidden);
+      }
     }
 
     if ($hide && $show) {
@@ -101,13 +151,7 @@
       $events[] = self::renderEnder(true);
     }
 
-    return phutil_tag(
-      'div',
-      array(
-        'class' => 'phui-timeline-view',
-        'id' => $this->id,
-      ),
-      $events);
+    return $events;
   }
 
   public static function renderSpacer() {
diff --git a/webroot/rsrc/js/application/transactions/behavior-show-older-transactions.js b/webroot/rsrc/js/application/transactions/behavior-show-older-transactions.js
new file mode 100644
--- /dev/null
+++ b/webroot/rsrc/js/application/transactions/behavior-show-older-transactions.js
@@ -0,0 +1,31 @@
+/**
+ * @provides javelin-behavior-phabricator-show-older-transactions
+ * @requires javelin-behavior
+ *           javelin-stratcom
+ *           javelin-dom
+ */
+
+JX.behavior('phabricator-show-older-transactions', function(config) {
+
+  var show_older = function(swap, r) {
+    var timeline = swap.parentNode;
+    var before = swap;
+    var current = null;
+    for (var ii = r.timeline.length - 1; ii >= 0; ii--) {
+      current = JX.$H(r.timeline[ii]).getNode();
+      timeline.insertBefore(current, before);
+      before = current;
+    }
+    JX.DOM.remove(swap);
+  };
+
+  JX.Stratcom.listen(
+    'click',
+    ['show-older-link'],
+    function(e) {
+      e.kill();
+      new JX.Workflow(e.getNode('tag:a').href)
+        .setHandler(JX.bind(null, show_older, e.getNode('show-older-block')))
+        .start();
+    });
+});