diff --git a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
--- a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
+++ b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
@@ -112,6 +112,7 @@
 
     $map = array();
     $instance_sequence_pairs = array();
+    $enforced_end = null;
 
     foreach ($events as $key => $event) {
       $sequence_start = 0;
@@ -159,6 +160,8 @@
           $end = $event->getRecurrenceEndDate();
         } else if ($this->rangeEnd) {
           $end = $this->rangeEnd;
+        } else {
+          $end = $enforced_end;
         }
 
         if ($end) {
@@ -172,15 +175,26 @@
           $sequence_end = $this->getRawResultLimit() + $sequence_start;
         }
 
+        $date_to = $end;
+
         $sequence_start = max(1, $sequence_start);
 
         for ($index = $sequence_start; $index < $sequence_end; $index++) {
-          $instance_sequence_pairs[] = array($event->getPHID(), $index);
           $events[] = $event->generateNthGhost($index, $viewer);
-
           $last_key = last_key($events);
-          $map[$event->getPHID()][$index] = $last_key;
+          $date_to = $events[$last_key]->getDateTo();
         }
+        $enforced_end = $date_to;
+        $events = msort($events, 'getDateFrom');
+        $events = array_slice($events, 0, 1000, true);
+      }
+    }
+
+    foreach ($events as $key => $event) {
+      if ($event->getIsGhostEvent()) {
+        $index = $event->getSequenceIndex();
+        $instance_sequence_pairs[] = array($event->getPHID(), $index);
+        $map[$event->getPHID()][$index] = $key;
       }
     }
 
@@ -213,6 +227,15 @@
     return $events;
   }
 
+  private function mergeAndTrim($first_list, $second_list, $size) {
+    foreach ($second_list as $item) {
+      $first_list[] = $item;
+    }
+    $events = msort($first_list, 'getPHID');
+    $events->setSize((int)$size);
+    return $events;
+  }
+
   protected function buildJoinClauseParts(AphrontDatabaseConnection $conn_r) {
     $parts = parent::buildJoinClauseParts($conn_r);
     if ($this->inviteePHIDs !== null) {
diff --git a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
--- a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
+++ b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
@@ -462,6 +462,7 @@
   }
 
   public function getPageSize(PhabricatorSavedQuery $saved) {
+    return $saved->getParameter('limit', 1000);
     if ($this->isMonthView($saved) || $this->isDayView($saved)) {
       return $saved->getParameter('limit', 1000);
     } else {