diff --git a/src/applications/phortune/controller/PhortuneCartListController.php b/src/applications/phortune/controller/PhortuneCartListController.php
index faf143131..0537417f7 100644
--- a/src/applications/phortune/controller/PhortuneCartListController.php
+++ b/src/applications/phortune/controller/PhortuneCartListController.php
@@ -1,132 +1,134 @@
 <?php
 
 final class PhortuneCartListController
   extends PhortuneController {
 
   private $merchant;
   private $account;
   private $subscription;
+  private $engine;
 
   public function handleRequest(AphrontRequest $request) {
     $viewer = $this->getViewer();
 
     $merchant_id = $request->getURIData('merchantID');
     $account_id = $request->getURIData('accountID');
     $subscription_id = $request->getURIData('subscriptionID');
 
-    $engine = new PhortuneCartSearchEngine();
+    $engine = id(new PhortuneCartSearchEngine())
+      ->setViewer($viewer);
 
     if ($merchant_id) {
       $merchant = id(new PhortuneMerchantQuery())
         ->setViewer($viewer)
         ->withIDs(array($merchant_id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$merchant) {
         return new Aphront404Response();
       }
       $this->merchant = $merchant;
       $viewer->grantAuthority($merchant);
       $engine->setMerchant($merchant);
     } else if ($account_id) {
       $account = id(new PhortuneAccountQuery())
         ->setViewer($viewer)
         ->withIDs(array($account_id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$account) {
         return new Aphront404Response();
       }
       $this->account = $account;
       $engine->setAccount($account);
     } else {
       return new Aphront404Response();
     }
 
     // NOTE: We must process this after processing the merchant authority, so
     // it becomes visible in merchant contexts.
     if ($subscription_id) {
       $subscription = id(new PhortuneSubscriptionQuery())
         ->setViewer($viewer)
         ->withIDs(array($subscription_id))
         ->executeOne();
       if (!$subscription) {
         return new Aphront404Response();
       }
       $this->subscription = $subscription;
       $engine->setSubscription($subscription);
     }
 
+    $this->engine = $engine;
+
     $controller = id(new PhabricatorApplicationSearchController())
       ->setQueryKey($request->getURIData('queryKey'))
       ->setSearchEngine($engine)
       ->setNavigation($this->buildSideNavView());
 
     return $this->delegateToController($controller);
   }
 
   public function buildSideNavView() {
     $viewer = $this->getRequest()->getUser();
 
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
 
-    id(new PhortuneCartSearchEngine())
-      ->setViewer($viewer)
-      ->addNavigationItems($nav->getMenu());
+    $this->engine->addNavigationItems($nav->getMenu());
 
     $nav->selectFilter(null);
 
     return $nav;
   }
 
   protected function buildApplicationCrumbs() {
     $crumbs = parent::buildApplicationCrumbs();
 
     $subscription = $this->subscription;
 
     $merchant = $this->merchant;
     if ($merchant) {
       $id = $merchant->getID();
       $this->addMerchantCrumb($crumbs, $merchant);
       if (!$subscription) {
         $crumbs->addTextCrumb(
           pht('Orders'),
           $this->getApplicationURI("merchant/orders/{$id}/"));
       }
     }
 
     $account = $this->account;
     if ($account) {
       $id = $account->getID();
       $this->addAccountCrumb($crumbs, $account);
       if (!$subscription) {
         $crumbs->addTextCrumb(
           pht('Orders'),
           $this->getApplicationURI("{$id}/order/"));
       }
     }
 
     if ($subscription) {
       if ($merchant) {
         $subscription_uri = $subscription->getMerchantURI();
       } else {
         $subscription_uri = $subscription->getURI();
       }
       $crumbs->addTextCrumb(
         $subscription->getSubscriptionName(),
         $subscription_uri);
     }
 
     return $crumbs;
   }
 
 }
diff --git a/src/applications/phortune/query/PhortuneCartSearchEngine.php b/src/applications/phortune/query/PhortuneCartSearchEngine.php
index ef91dc47a..ad29ed4e0 100644
--- a/src/applications/phortune/query/PhortuneCartSearchEngine.php
+++ b/src/applications/phortune/query/PhortuneCartSearchEngine.php
@@ -1,232 +1,234 @@
 <?php
 
 final class PhortuneCartSearchEngine
   extends PhabricatorApplicationSearchEngine {
 
   private $merchant;
   private $account;
   private $subscription;
 
   public function canUseInPanelContext() {
     // These only make sense in an account or merchant context.
     return false;
   }
 
   public function setAccount(PhortuneAccount $account) {
     $this->account = $account;
     return $this;
   }
 
   public function getAccount() {
     return $this->account;
   }
 
   public function setMerchant(PhortuneMerchant $merchant) {
     $this->merchant = $merchant;
     return $this;
   }
 
   public function getMerchant() {
     return $this->merchant;
   }
 
   public function setSubscription(PhortuneSubscription $subscription) {
     $this->subscription = $subscription;
     return $this;
   }
 
   public function getSubscription() {
     return $this->subscription;
   }
 
   public function getResultTypeDescription() {
     return pht('Phortune Orders');
   }
 
   public function getApplicationClassName() {
     return 'PhabricatorPhortuneApplication';
   }
 
   public function buildSavedQueryFromRequest(AphrontRequest $request) {
     $saved = new PhabricatorSavedQuery();
 
     return $saved;
   }
 
   public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
     $query = id(new PhortuneCartQuery())
-      ->needPurchases(true)
-      ->withStatuses(
-        array(
-          PhortuneCart::STATUS_PURCHASING,
-          PhortuneCart::STATUS_CHARGED,
-          PhortuneCart::STATUS_HOLD,
-          PhortuneCart::STATUS_REVIEW,
-          PhortuneCart::STATUS_PURCHASED,
-        ));
+      ->needPurchases(true);
 
     $viewer = $this->requireViewer();
 
     $merchant = $this->getMerchant();
     $account = $this->getAccount();
     if ($merchant) {
       $can_edit = PhabricatorPolicyFilter::hasCapability(
         $viewer,
         $merchant,
         PhabricatorPolicyCapability::CAN_EDIT);
       if (!$can_edit) {
         throw new Exception(
           pht('You can not query orders for a merchant you do not control.'));
       }
       $query->withMerchantPHIDs(array($merchant->getPHID()));
     } else if ($account) {
       $can_edit = PhabricatorPolicyFilter::hasCapability(
         $viewer,
         $account,
         PhabricatorPolicyCapability::CAN_EDIT);
       if (!$can_edit) {
         throw new Exception(
           pht(
             'You can not query orders for an account you are not '.
             'a member of.'));
       }
       $query->withAccountPHIDs(array($account->getPHID()));
     } else {
       $accounts = id(new PhortuneAccountQuery())
         ->withMemberPHIDs(array($viewer->getPHID()))
         ->execute();
       if ($accounts) {
         $query->withAccountPHIDs(mpull($accounts, 'getPHID'));
       } else {
         throw new Exception(pht('You have no accounts!'));
       }
     }
 
     $subscription = $this->getSubscription();
     if ($subscription) {
       $query->withSubscriptionPHIDs(array($subscription->getPHID()));
     }
 
+    if ($saved->getParameter('invoices')) {
+      $query->withInvoices(true);
+    } else {
+      $query->withStatuses(
+        array(
+          PhortuneCart::STATUS_PURCHASING,
+          PhortuneCart::STATUS_CHARGED,
+          PhortuneCart::STATUS_HOLD,
+          PhortuneCart::STATUS_REVIEW,
+          PhortuneCart::STATUS_PURCHASED,
+        ));
+    }
+
     return $query;
   }
 
   public function buildSearchForm(
     AphrontFormView $form,
     PhabricatorSavedQuery $saved_query) {}
 
   protected function getURI($path) {
     $merchant = $this->getMerchant();
     $account = $this->getAccount();
     if ($merchant) {
-      return '/phortune/merchant/'.$merchant->getID().'/order/'.$path;
+      return '/phortune/merchant/orders/'.$merchant->getID().'/'.$path;
     } else if ($account) {
-      return '/phortune/'.$account->getID().'/order/';
+      return '/phortune/'.$account->getID().'/order/'.$path;
     } else {
       return '/phortune/order/'.$path;
     }
   }
 
   protected function getBuiltinQueryNames() {
     $names = array(
-      'all' => pht('All Orders'),
+      'all' => pht('Order History'),
+      'invoices' => pht('Unpaid Invoices'),
     );
 
     return $names;
   }
 
   public function buildSavedQueryFromBuiltin($query_key) {
 
     $query = $this->newSavedQuery();
     $query->setQueryKey($query_key);
 
     switch ($query_key) {
       case 'all':
         return $query;
+      case 'invoices':
+        return $query->setParameter('invoices', true);
     }
 
     return parent::buildSavedQueryFromBuiltin($query_key);
   }
 
   protected function getRequiredHandlePHIDsForResultList(
     array $carts,
     PhabricatorSavedQuery $query) {
     $phids = array();
     foreach ($carts as $cart) {
       $phids[] = $cart->getPHID();
       $phids[] = $cart->getMerchantPHID();
       $phids[] = $cart->getAuthorPHID();
     }
     return $phids;
   }
 
   protected function renderResultList(
     array $carts,
     PhabricatorSavedQuery $query,
     array $handles) {
     assert_instances_of($carts, 'PhortuneCart');
 
     $viewer = $this->requireViewer();
 
     $rows = array();
     foreach ($carts as $cart) {
       $merchant = $cart->getMerchant();
 
       if ($this->getMerchant()) {
         $href = $this->getApplicationURI(
           'merchant/'.$merchant->getID().'/cart/'.$cart->getID().'/');
       } else {
         $href = $cart->getDetailURI();
       }
 
       $rows[] = array(
         $cart->getID(),
-        phutil_tag(
-          'a',
-          array(
-            'href' => $href,
-          ),
-          $cart->getName()),
         $handles[$cart->getPHID()]->renderLink(),
         $handles[$merchant->getPHID()]->renderLink(),
         $handles[$cart->getAuthorPHID()]->renderLink(),
         $cart->getTotalPriceAsCurrency()->formatForDisplay(),
         PhortuneCart::getNameForStatus($cart->getStatus()),
         phabricator_datetime($cart->getDateModified(), $viewer),
       );
     }
 
     $table = id(new AphrontTableView($rows))
       ->setNoDataString(pht('No orders match the query.'))
       ->setHeaders(
         array(
           pht('ID'),
           pht('Order'),
           pht('Merchant'),
           pht('Authorized By'),
           pht('Amount'),
           pht('Status'),
           pht('Updated'),
         ))
       ->setColumnClasses(
         array(
           '',
           'pri',
           '',
           '',
           'wide right',
           '',
           'right',
         ));
 
     $merchant = $this->getMerchant();
     if ($merchant) {
       $header = pht('Orders for %s', $merchant->getName());
     } else {
       $header = pht('Your Orders');
     }
 
     return id(new PHUIObjectBoxView())
       ->setHeaderText($header)
       ->appendChild($table);
   }
 }