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
@@ -2160,6 +2160,7 @@
     'PhabricatorCustomFieldStringIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStringIndexStorage.php',
     'PhabricatorCustomHeaderConfigType' => 'applications/config/custom/PhabricatorCustomHeaderConfigType.php',
     'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php',
+    'PhabricatorDaemonBulkJobController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobController.php',
     'PhabricatorDaemonBulkJobListController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobListController.php',
     'PhabricatorDaemonBulkJobMonitorController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php',
     'PhabricatorDaemonBulkJobViewController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php',
@@ -6604,9 +6605,10 @@
     'PhabricatorCustomFieldStringIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
     'PhabricatorCustomHeaderConfigType' => 'PhabricatorConfigOptionType',
     'PhabricatorDaemon' => 'PhutilDaemon',
-    'PhabricatorDaemonBulkJobListController' => 'PhabricatorDaemonController',
-    'PhabricatorDaemonBulkJobMonitorController' => 'PhabricatorDaemonController',
-    'PhabricatorDaemonBulkJobViewController' => 'PhabricatorDaemonController',
+    'PhabricatorDaemonBulkJobController' => 'PhabricatorDaemonController',
+    'PhabricatorDaemonBulkJobListController' => 'PhabricatorDaemonBulkJobController',
+    'PhabricatorDaemonBulkJobMonitorController' => 'PhabricatorDaemonBulkJobController',
+    'PhabricatorDaemonBulkJobViewController' => 'PhabricatorDaemonBulkJobController',
     'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonContentSource' => 'PhabricatorContentSource',
     'PhabricatorDaemonController' => 'PhabricatorController',
diff --git a/src/applications/daemon/controller/PhabricatorDaemonBulkJobController.php b/src/applications/daemon/controller/PhabricatorDaemonBulkJobController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/daemon/controller/PhabricatorDaemonBulkJobController.php
@@ -0,0 +1,25 @@
+<?php
+
+abstract class PhabricatorDaemonBulkJobController
+  extends PhabricatorDaemonController {
+
+  public function shouldRequireAdmin() {
+    return false;
+  }
+
+  public function shouldAllowPublic() {
+    return true;
+  }
+
+  public function buildApplicationMenu() {
+    return $this->newApplicationMenu()
+      ->setSearchEngine(new PhabricatorWorkerBulkJobSearchEngine());
+  }
+
+  protected function buildApplicationCrumbs() {
+    $crumbs = parent::buildApplicationCrumbs();
+    $crumbs->addTextCrumb(pht('Bulk Jobs'), '/daemon/bulk/');
+    return $crumbs;
+  }
+
+}
diff --git a/src/applications/daemon/controller/PhabricatorDaemonBulkJobListController.php b/src/applications/daemon/controller/PhabricatorDaemonBulkJobListController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonBulkJobListController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonBulkJobListController.php
@@ -1,31 +1,12 @@
 <?php
 
 final class PhabricatorDaemonBulkJobListController
-  extends PhabricatorDaemonController {
-
-  public function shouldAllowPublic() {
-    return true;
-  }
+  extends PhabricatorDaemonBulkJobController {
 
   public function handleRequest(AphrontRequest $request) {
-    $controller = id(new PhabricatorApplicationSearchController())
-      ->setQueryKey($request->getURIData('queryKey'))
-      ->setSearchEngine(new PhabricatorWorkerBulkJobSearchEngine())
-      ->setNavigation($this->buildSideNavView());
-    return $this->delegateToController($controller);
+    return id(new PhabricatorWorkerBulkJobSearchEngine())
+      ->setController($this)
+      ->buildResponse();
   }
 
-  protected function buildSideNavView($for_app = false) {
-    $user = $this->getRequest()->getUser();
-
-    $nav = new AphrontSideNavFilterView();
-    $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
-    id(new PhabricatorWorkerBulkJobSearchEngine())
-      ->setViewer($user)
-      ->addNavigationItems($nav->getMenu());
-    $nav->selectFilter(null);
-
-    return $nav;
-  }
 }
diff --git a/src/applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php b/src/applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php
@@ -1,11 +1,7 @@
 <?php
 
 final class PhabricatorDaemonBulkJobMonitorController
-  extends PhabricatorDaemonController {
-
-  public function shouldAllowPublic() {
-    return true;
-  }
+  extends PhabricatorDaemonBulkJobController {
 
   public function handleRequest(AphrontRequest $request) {
     $viewer = $this->getViewer();
diff --git a/src/applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php b/src/applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php
@@ -1,11 +1,7 @@
 <?php
 
 final class PhabricatorDaemonBulkJobViewController
-  extends PhabricatorDaemonController {
-
-  public function shouldAllowPublic() {
-    return true;
-  }
+  extends PhabricatorDaemonBulkJobController {
 
   public function handleRequest(AphrontRequest $request) {
     $viewer = $this->getViewer();
@@ -21,7 +17,6 @@
     $title = pht('Bulk Job %d', $job->getID());
 
     $crumbs = $this->buildApplicationCrumbs();
-    $crumbs->addTextCrumb(pht('Bulk Jobs'), '/daemon/bulk/');
     $crumbs->addTextCrumb($title);
     $crumbs->setBorder(true);
 
diff --git a/src/applications/daemon/controller/PhabricatorDaemonConsoleController.php b/src/applications/daemon/controller/PhabricatorDaemonConsoleController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonConsoleController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonConsoleController.php
@@ -121,14 +121,13 @@
       ->setHeaderText(pht('Recently Completed Tasks (Last 15m)'))
       ->setTable($completed_table);
 
-    $daemon_table = new PhabricatorDaemonLogListView();
-    $daemon_table->setUser($viewer);
-    $daemon_table->setDaemonLogs($logs);
-
-    $daemon_panel = id(new PHUIObjectBoxView());
-    $daemon_panel->setHeaderText(pht('Active Daemons'));
-    $daemon_panel->setObjectList($daemon_table);
+    $daemon_table = id(new PhabricatorDaemonLogListView())
+      ->setUser($viewer)
+      ->setDaemonLogs($logs);
 
+    $daemon_panel = id(new PHUIObjectBoxView())
+      ->setHeaderText(pht('Active Daemons'))
+      ->setTable($daemon_table);
 
     $tasks = id(new PhabricatorWorkerLeaseQuery())
       ->setSkipLease(true)
diff --git a/src/applications/daemon/controller/PhabricatorDaemonController.php b/src/applications/daemon/controller/PhabricatorDaemonController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonController.php
@@ -1,6 +1,11 @@
 <?php
 
-abstract class PhabricatorDaemonController extends PhabricatorController {
+abstract class PhabricatorDaemonController
+  extends PhabricatorController {
+
+  public function shouldRequireAdmin() {
+    return true;
+  }
 
   protected function buildSideNavView() {
     $nav = new AphrontSideNavFilterView();
diff --git a/src/applications/daemon/controller/PhabricatorDaemonLogListController.php b/src/applications/daemon/controller/PhabricatorDaemonLogListController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonLogListController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonLogListController.php
@@ -4,7 +4,7 @@
   extends PhabricatorDaemonController {
 
   public function handleRequest(AphrontRequest $request) {
-    $viewer = $request->getViewer();
+    $viewer = $this->getViewer();
 
     $pager = new AphrontCursorPagerView();
     $pager->readFromRequest($request);
@@ -14,13 +14,13 @@
       ->setAllowStatusWrites(true)
       ->executeWithCursorPager($pager);
 
-    $daemon_table = new PhabricatorDaemonLogListView();
-    $daemon_table->setUser($request->getUser());
-    $daemon_table->setDaemonLogs($logs);
+    $daemon_table = id(new PhabricatorDaemonLogListView())
+      ->setViewer($viewer)
+      ->setDaemonLogs($logs);
 
     $box = id(new PHUIObjectBoxView())
       ->setHeaderText(pht('All Daemons'))
-      ->appendChild($daemon_table);
+      ->setTable($daemon_table);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('All Daemons'));
diff --git a/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php b/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
--- a/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
+++ b/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
@@ -16,10 +16,6 @@
       return new Aphront404Response();
     }
 
-    $events = id(new PhabricatorDaemonLogEvent())->loadAllWhere(
-      'logID = %d ORDER BY id DESC LIMIT 1000',
-      $log->getID());
-
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Daemon %s', $log->getID()));
     $crumbs->setBorder(true);
@@ -69,23 +65,15 @@
 
     $properties = $this->buildPropertyListView($log);
 
-    $event_view = id(new PhabricatorDaemonLogEventsView())
-      ->setUser($viewer)
-      ->setEvents($events);
-
-    $event_panel = id(new PHUIObjectBoxView())
-      ->setHeaderText(pht('Events'))
-      ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
-      ->appendChild($event_view);
-
     $object_box = id(new PHUIObjectBoxView())
+      ->setHeaderText(pht('Daemon Details'))
+      ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
       ->addPropertyList($properties);
 
     $view = id(new PHUITwoColumnView())
       ->setHeader($header)
       ->setFooter(array(
         $object_box,
-        $event_panel,
       ));
 
     return $this->newPage()
diff --git a/src/applications/daemon/view/PhabricatorDaemonLogListView.php b/src/applications/daemon/view/PhabricatorDaemonLogListView.php
--- a/src/applications/daemon/view/PhabricatorDaemonLogListView.php
+++ b/src/applications/daemon/view/PhabricatorDaemonLogListView.php
@@ -14,65 +14,107 @@
     $viewer = $this->getViewer();
 
     $rows = array();
+    $daemons = $this->daemonLogs;
 
-    $list = new PHUIObjectItemListView();
-    $list->setFlush(true);
-    foreach ($this->daemonLogs as $log) {
-      $id = $log->getID();
-      $epoch = $log->getDateCreated();
+    foreach ($daemons as $daemon) {
+      $id = $daemon->getID();
+      $host = $daemon->getHost();
+      $pid = $daemon->getPID();
+      $name = phutil_tag(
+        'a',
+        array(
+          'href' => "/daemon/log/{$id}/",
+        ),
+        $daemon->getDaemon());
 
-      $item = id(new PHUIObjectItemView())
-        ->setObjectName(pht('Daemon %s', $id))
-        ->setHeader($log->getDaemon())
-        ->setHref("/daemon/log/{$id}/")
-        ->addIcon('none', phabricator_datetime($epoch, $viewer));
-
-      $status = $log->getStatus();
+      $status = $daemon->getStatus();
       switch ($status) {
         case PhabricatorDaemonLog::STATUS_RUNNING:
-          $item->setStatusIcon('fa-rocket green');
-          $item->addAttribute(pht('This daemon is running.'));
+          $status_icon = 'fa-rocket green';
+          $status_label = pht('Running');
+          $status_tip = pht('This daemon is running.');
           break;
         case PhabricatorDaemonLog::STATUS_DEAD:
-          $item->setStatusIcon('fa-warning red');
-          $item->addAttribute(
-            pht(
-              'This daemon is lost or exited uncleanly, and is presumed '.
-              'dead.'));
-          $item->addIcon('fa-times grey', pht('Dead'));
+          $status_icon = 'fa-warning red';
+          $status_label = pht('Dead');
+          $status_tip = pht(
+            'This daemon has been lost or exited uncleanly, and is '.
+            'presumed dead.');
           break;
         case PhabricatorDaemonLog::STATUS_EXITING:
-          $item->addAttribute(pht('This daemon is exiting.'));
-          $item->addIcon('fa-check', pht('Exiting'));
+          $status_icon = 'fa-check';
+          $status_label = pht('Shutting Down');
+          $status_tip = pht('This daemon is shutting down.');
           break;
         case PhabricatorDaemonLog::STATUS_EXITED:
-          $item->setDisabled(true);
-          $item->addAttribute(pht('This daemon exited cleanly.'));
-          $item->addIcon('fa-check grey', pht('Exited'));
+          $status_icon = 'fa-check grey';
+          $status_label = pht('Exited');
+          $status_tip = pht('This daemon exited cleanly.');
           break;
         case PhabricatorDaemonLog::STATUS_WAIT:
-          $item->setStatusIcon('fa-clock-o blue');
-          $item->addAttribute(
-            pht(
-              'This daemon encountered an error recently and is waiting a '.
-              'moment to restart.'));
-          $item->addIcon('fa-clock-o grey', pht('Waiting'));
+          $status_icon = 'fa-clock-o blue';
+          $status_label = pht('Waiting');
+          $status_tip = pht(
+            'This daemon encountered an error recently and is waiting a '.
+            'moment to restart.');
           break;
         case PhabricatorDaemonLog::STATUS_UNKNOWN:
         default:
-          $item->setStatusIcon('fa-warning orange');
-          $item->addAttribute(
-            pht(
-              'This daemon has not reported its status recently. It may '.
-              'have exited uncleanly.'));
-          $item->addIcon('fa-warning', pht('Unknown'));
+          $status_icon = 'fa-warning orange';
+          $status_label = pht('Unknown');
+          $status_tip = pht(
+            'This daemon has not reported its status recently. It may '.
+            'have exited uncleanly.');
           break;
       }
 
-      $list->addItem($item);
+      $status = phutil_tag(
+        'span',
+        array(
+          'sigil' => 'has-tooltip',
+          'meta' => array(
+            'tip' => $status_tip,
+          ),
+        ),
+        array(
+          id(new PHUIIconView())->setIcon($status_icon),
+          ' ',
+          $status_label,
+        ));
+
+      $launched = phabricator_datetime($daemon->getDateCreated(), $viewer);
+
+      $rows[] = array(
+        $id,
+        $host,
+        $pid,
+        $name,
+        $status,
+        $launched,
+      );
     }
 
-    return $list;
+    $table = id(new AphrontTableView($rows))
+      ->setHeaders(
+        array(
+          pht('ID'),
+          pht('Host'),
+          pht('PPID'),
+          pht('Daemon'),
+          pht('Status'),
+          pht('Launched'),
+        ))
+      ->setColumnClasses(
+        array(
+          null,
+          null,
+          null,
+          'pri',
+          'wide',
+          'right date',
+        ));
+
+    return $table;
   }
 
 }