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
@@ -1760,6 +1760,7 @@
     'PhabricatorMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorMailReceiverTestCase.php',
     'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php',
     'PhabricatorMailgunConfigOptions' => 'applications/config/option/PhabricatorMailgunConfigOptions.php',
+    'PhabricatorMailingListDatasource' => 'applications/mailinglists/typeahead/PhabricatorMailingListDatasource.php',
     'PhabricatorMailingListPHIDTypeList' => 'applications/mailinglists/phid/PhabricatorMailingListPHIDTypeList.php',
     'PhabricatorMailingListQuery' => 'applications/mailinglists/query/PhabricatorMailingListQuery.php',
     'PhabricatorMailingListSearchEngine' => 'applications/mailinglists/query/PhabricatorMailingListSearchEngine.php',
@@ -1792,6 +1793,7 @@
     'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php',
     'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php',
     'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php',
+    'PhabricatorMetaMTAMailableDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php',
     'PhabricatorMetaMTAMailgunReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAMailgunReceiveController.php',
     'PhabricatorMetaMTAMailingList' => 'applications/mailinglists/storage/PhabricatorMetaMTAMailingList.php',
     'PhabricatorMetaMTAMemberQuery' => 'applications/metamta/query/PhabricatorMetaMTAMemberQuery.php',
@@ -4609,6 +4611,7 @@
     'PhabricatorMailManagementWorkflow' => 'PhabricatorManagementWorkflow',
     'PhabricatorMailReceiverTestCase' => 'PhabricatorTestCase',
     'PhabricatorMailgunConfigOptions' => 'PhabricatorApplicationConfigOptions',
+    'PhabricatorMailingListDatasource' => 'PhabricatorTypeaheadDatasource',
     'PhabricatorMailingListPHIDTypeList' => 'PhabricatorPHIDType',
     'PhabricatorMailingListQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorMailingListSearchEngine' => 'PhabricatorApplicationSearchEngine',
@@ -4635,6 +4638,7 @@
     'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase',
+    'PhabricatorMetaMTAMailableDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
     'PhabricatorMetaMTAMailgunReceiveController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAMailingList' =>
     array(
diff --git a/src/applications/differential/customfield/DifferentialSubscribersField.php b/src/applications/differential/customfield/DifferentialSubscribersField.php
--- a/src/applications/differential/customfield/DifferentialSubscribersField.php
+++ b/src/applications/differential/customfield/DifferentialSubscribersField.php
@@ -44,7 +44,7 @@
   public function renderEditControl(array $handles) {
     return id(new AphrontFormTokenizerControl())
       ->setName($this->getFieldKey())
-      ->setDatasource('/typeahead/common/mailable/')
+      ->setDatasource(new PhabricatorMetaMTAMailableDatasource())
       ->setValue($handles)
       ->setError($this->getFieldError())
       ->setLabel($this->getFieldName());
diff --git a/src/applications/differential/query/DifferentialRevisionSearchEngine.php b/src/applications/differential/query/DifferentialRevisionSearchEngine.php
--- a/src/applications/differential/query/DifferentialRevisionSearchEngine.php
+++ b/src/applications/differential/query/DifferentialRevisionSearchEngine.php
@@ -161,7 +161,7 @@
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Subscribers'))
           ->setName('subscribers')
-          ->setDatasource('/typeahead/common/allmailable/')
+          ->setDatasource(new PhabricatorMetaMTAMailableDatasource())
           ->setValue(array_select_keys($handles, $subscriber_phids)))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
diff --git a/src/applications/differential/view/DifferentialAddCommentView.php b/src/applications/differential/view/DifferentialAddCommentView.php
--- a/src/applications/differential/view/DifferentialAddCommentView.php
+++ b/src/applications/differential/view/DifferentialAddCommentView.php
@@ -108,6 +108,8 @@
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Submit')));
 
+    $mailable_source = new PhabricatorMetaMTAMailableDatasource();
+
     Javelin::initBehavior(
       'differential-add-reviewers-and-ccs',
       array(
@@ -126,10 +128,10 @@
           ),
           'add-ccs-tokenizer' => array(
             'actions' => array('add_ccs' => 1),
-            'src' => '/typeahead/common/mailable/',
+            'src' => $mailable_source->getDatasourceURI(),
             'value' => $this->ccs,
             'row' => 'add-ccs',
-            'placeholder' => pht('Type a user or mailing list...'),
+            'placeholder' => $mailable_source->getPlaceholderText(),
           ),
         ),
         'select' => 'comment-action',
diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php
--- a/src/applications/diffusion/controller/DiffusionCommitController.php
+++ b/src/applications/diffusion/controller/DiffusionCommitController.php
@@ -771,6 +771,8 @@
 
     require_celerity_resource('phabricator-transaction-view-css');
 
+    $mailable_source = new PhabricatorMetaMTAMailableDatasource();
+
     Javelin::initBehavior(
       'differential-add-reviewers-and-ccs',
       array(
@@ -783,9 +785,9 @@
           ),
           'add-ccs-tokenizer' => array(
             'actions' => array('add_ccs' => 1),
-            'src' => '/typeahead/common/mailable/',
+            'src' => $mailable_source->getDatasourceURI(),
             'row' => 'add-ccs',
-            'placeholder' => pht('Type a user or mailing list...'),
+            'placeholder' => $mailable_source->getPlaceholderText(),
           ),
         ),
         'select' => 'audit-action',
diff --git a/src/applications/herald/controller/HeraldRuleController.php b/src/applications/herald/controller/HeraldRuleController.php
--- a/src/applications/herald/controller/HeraldRuleController.php
+++ b/src/applications/herald/controller/HeraldRuleController.php
@@ -597,11 +597,11 @@
       'package' => new PhabricatorOwnersPackageDatasource(),
       'project' => new PhabricatorProjectDatasource(),
       'user' => new PhabricatorPeopleDatasource(),
+      'email' => new PhabricatorMetaMTAMailableDatasource(),
     );
 
     $sources = mpull($sources, 'getDatasourceURI');
     $sources += array(
-      'email'         => '/typeahead/common/mailable/',
       'userorproject' => '/typeahead/common/accountsorprojects/',
     );
 
diff --git a/src/applications/mailinglists/typeahead/PhabricatorMailingListDatasource.php b/src/applications/mailinglists/typeahead/PhabricatorMailingListDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/mailinglists/typeahead/PhabricatorMailingListDatasource.php
@@ -0,0 +1,33 @@
+<?php
+
+final class PhabricatorMailingListDatasource
+  extends PhabricatorTypeaheadDatasource {
+
+  public function getPlaceholderText() {
+    return pht('Type a mailing list name...');
+  }
+
+  public function getDatasourceApplicationClass() {
+    return 'PhabricatorApplicationMailingLists';
+  }
+
+  public function loadResults() {
+    $viewer = $this->getViewer();
+    $raw_query = $this->getRawQuery();
+
+    $results = array();
+
+    $lists = id(new PhabricatorMailingListQuery())
+      ->setViewer($viewer)
+      ->execute();
+    foreach ($lists as $list) {
+      $results[] = id(new PhabricatorTypeaheadResult())
+        ->setName($list->getName())
+        ->setURI($list->getURI())
+        ->setPHID($list->getPHID());
+    }
+
+    return $results;
+  }
+
+}
diff --git a/src/applications/maniphest/controller/ManiphestBatchEditController.php b/src/applications/maniphest/controller/ManiphestBatchEditController.php
--- a/src/applications/maniphest/controller/ManiphestBatchEditController.php
+++ b/src/applications/maniphest/controller/ManiphestBatchEditController.php
@@ -62,6 +62,7 @@
     $template = $template->render();
 
     $projects_source = new PhabricatorProjectDatasource();
+    $mailable_source = new PhabricatorMetaMTAMailableDatasource();
 
     require_celerity_resource('maniphest-batch-editor');
     Javelin::initBehavior(
@@ -81,8 +82,8 @@
             'limit'         => 1,
           ),
           'cc'    => array(
-            'src'           => '/typeahead/common/mailable/',
-            'placeholder'   => pht('Type a user name...'),
+            'src'           => $mailable_source->getDatasourceURI(),
+            'placeholder'   => $mailable_source->getPlaceholderText(),
           )
         ),
         'input' => 'batch-form-actions',
diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
--- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
@@ -284,6 +284,7 @@
 
     $projects_source = new PhabricatorProjectDatasource();
     $users_source = new PhabricatorPeopleDatasource();
+    $mailable_source = new PhabricatorMetaMTAMailableDatasource();
 
     $tokenizer_map = array(
       ManiphestTransaction::TYPE_PROJECTS => array(
@@ -300,8 +301,8 @@
       ),
       ManiphestTransaction::TYPE_CCS => array(
         'id'          => 'cc-tokenizer',
-        'src'         => '/typeahead/common/mailable/',
-        'placeholder' => pht('Type a user or mailing list...'),
+        'src'         => $mailable_source->getDatasourceURI(),
+        'placeholder' => $mailable_source->getPlaceholderText(),
       ),
     );
 
diff --git a/src/applications/maniphest/controller/ManiphestTaskEditController.php b/src/applications/maniphest/controller/ManiphestTaskEditController.php
--- a/src/applications/maniphest/controller/ManiphestTaskEditController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskEditController.php
@@ -603,7 +603,7 @@
           ->setName('cc')
           ->setValue($cc_value)
           ->setUser($user)
-          ->setDatasource('/typeahead/common/mailable/'));
+          ->setDatasource(new PhabricatorMetaMTAMailableDatasource()));
 
     if ($can_edit_priority) {
       $form
diff --git a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
--- a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
+++ b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
@@ -365,7 +365,7 @@
           ->setValue($author_handles))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
-          ->setDatasource('/typeahead/common/mailable/')
+          ->setDatasource(new PhabricatorMetaMTAMailableDatasource())
           ->setName('subscribers')
           ->setLabel(pht('Subscribers'))
           ->setValue($subscriber_handles))
diff --git a/src/applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php b/src/applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php
@@ -0,0 +1,22 @@
+<?php
+
+final class PhabricatorMetaMTAMailableDatasource
+  extends PhabricatorTypeaheadCompositeDatasource {
+
+  public function getPlaceholderText() {
+    return pht('Type a user, project, or mailing list name...');
+  }
+
+  public function getDatasourceApplicationClass() {
+    return 'PhabricatorApplicationMetaMTA';
+  }
+
+  public function getComponentDatasources() {
+    return array(
+      new PhabricatorPeopleDatasource(),
+      new PhabricatorProjectDatasource(),
+      new PhabricatorMailingListDatasource(),
+    );
+  }
+
+}
diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php
--- a/src/applications/pholio/controller/PholioMockEditController.php
+++ b/src/applications/pholio/controller/PholioMockEditController.php
@@ -354,7 +354,7 @@
           ->setName('cc')
           ->setValue($handles)
           ->setUser($user)
-          ->setDatasource('/typeahead/common/mailable/'))
+          ->setDatasource(new PhabricatorMetaMTAMailableDatasource()))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
diff --git a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
--- a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
+++ b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
@@ -24,7 +24,6 @@
     $need_users = false;
     $need_agents = false;
     $need_applications = false;
-    $need_lists = false;
     $need_projs = false;
     $need_packages = false;
     $need_upforgrabs = false;
@@ -48,12 +47,6 @@
         $need_projs = true;
         $need_noproject = true;
         break;
-      case 'mailable':
-      case 'allmailable':
-        $need_users = true;
-        $need_lists = true;
-        $need_projs = true;
-        break;
       case 'usersorprojects':
       case 'accountsorprojects':
         $need_users = true;
@@ -179,18 +172,6 @@
       }
     }
 
-    if ($need_lists) {
-      $lists = id(new PhabricatorMailingListQuery())
-        ->setViewer($viewer)
-        ->execute();
-      foreach ($lists as $list) {
-        $results[] = id(new PhabricatorTypeaheadResult())
-          ->setName($list->getName())
-          ->setURI($list->getURI())
-          ->setPHID($list->getPHID());
-      }
-    }
-
     if ($need_projs) {
       $projs = id(new PhabricatorProjectQuery())
         ->setViewer($viewer)
diff --git a/src/view/form/control/AphrontFormTokenizerControl.php b/src/view/form/control/AphrontFormTokenizerControl.php
--- a/src/view/form/control/AphrontFormTokenizerControl.php
+++ b/src/view/form/control/AphrontFormTokenizerControl.php
@@ -95,19 +95,9 @@
     $request = $matches[1];
 
     $map = array(
-      'users'           => pht('Type a user name...'),
-      'authors'         => pht('Type a user name...'),
       'usersorprojects' => pht('Type a user or project name...'),
       'searchowner'     => pht('Type a user name...'),
-      'accounts'        => pht('Type a user name...'),
-      'mailable'        => pht('Type a user, project, or mailing list...'),
-      'allmailable'     => pht('Type a user, project, or mailing list...'),
       'searchproject'   => pht('Type a project name...'),
-      'projects'        => pht('Type a project name...'),
-      'repositories'    => pht('Type a repository name...'),
-      'packages'        => pht('Type a package name...'),
-      'macros'          => pht('Type a macro name...'),
-      'arcanistproject' => pht('Type an arc project name...'),
       'accountsorprojects' => pht('Type a user or project name...'),
       'usersprojectsorpackages' =>
         pht('Type a user, project, or package name...'),