diff --git a/src/applications/ponder/controller/PonderAnswerCommentController.php b/src/applications/ponder/controller/PonderAnswerCommentController.php
--- a/src/applications/ponder/controller/PonderAnswerCommentController.php
+++ b/src/applications/ponder/controller/PonderAnswerCommentController.php
@@ -2,15 +2,9 @@
 
 final class PonderAnswerCommentController extends PonderController {
 
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->id = $data['id'];
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
 
     if (!$request->isFormPost()) {
       return new Aphront400Response();
@@ -18,7 +12,7 @@
 
     $answer = id(new PonderAnswerQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->executeOne();
     if (!$answer) {
       return new Aphront404Response();
diff --git a/src/applications/ponder/controller/PonderAnswerEditController.php b/src/applications/ponder/controller/PonderAnswerEditController.php
--- a/src/applications/ponder/controller/PonderAnswerEditController.php
+++ b/src/applications/ponder/controller/PonderAnswerEditController.php
@@ -2,19 +2,13 @@
 
 final class PonderAnswerEditController extends PonderController {
 
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->id = $data['id'];
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
 
     $answer = id(new PonderAnswerQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
diff --git a/src/applications/ponder/controller/PonderAnswerHistoryController.php b/src/applications/ponder/controller/PonderAnswerHistoryController.php
--- a/src/applications/ponder/controller/PonderAnswerHistoryController.php
+++ b/src/applications/ponder/controller/PonderAnswerHistoryController.php
@@ -2,19 +2,13 @@
 
 final class PonderAnswerHistoryController extends PonderController {
 
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->id = $data['id'];
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
 
     $answer = id(new PonderAnswerQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->executeOne();
     if (!$answer) {
       return new Aphront404Response();
diff --git a/src/applications/ponder/controller/PonderAnswerSaveController.php b/src/applications/ponder/controller/PonderAnswerSaveController.php
--- a/src/applications/ponder/controller/PonderAnswerSaveController.php
+++ b/src/applications/ponder/controller/PonderAnswerSaveController.php
@@ -2,9 +2,8 @@
 
 final class PonderAnswerSaveController extends PonderController {
 
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
 
     if (!$request->isFormPost()) {
       return new Aphront400Response();
diff --git a/src/applications/ponder/controller/PonderQuestionCommentController.php b/src/applications/ponder/controller/PonderQuestionCommentController.php
--- a/src/applications/ponder/controller/PonderQuestionCommentController.php
+++ b/src/applications/ponder/controller/PonderQuestionCommentController.php
@@ -2,15 +2,9 @@
 
 final class PonderQuestionCommentController extends PonderController {
 
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->id = $data['id'];
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
 
     if (!$request->isFormPost()) {
       return new Aphront400Response();
@@ -18,7 +12,7 @@
 
     $question = id(new PonderQuestionQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->executeOne();
     if (!$question) {
       return new Aphront404Response();
diff --git a/src/applications/ponder/controller/PonderQuestionEditController.php b/src/applications/ponder/controller/PonderQuestionEditController.php
--- a/src/applications/ponder/controller/PonderQuestionEditController.php
+++ b/src/applications/ponder/controller/PonderQuestionEditController.php
@@ -2,20 +2,14 @@
 
 final class PonderQuestionEditController extends PonderController {
 
-  private $id;
+  public function handleRequest(AphrontRequest $request) {
+    $user = $request->getViewer();
+    $id = $request->getURIData('id');
 
-  public function willProcessRequest(array $data) {
-    $this->id = idx($data, 'id');
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $user = $request->getUser();
-
-    if ($this->id) {
+    if ($id) {
       $question = id(new PonderQuestionQuery())
         ->setViewer($user)
-        ->withIDs(array($this->id))
+        ->withIDs(array($id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
diff --git a/src/applications/ponder/controller/PonderQuestionHistoryController.php b/src/applications/ponder/controller/PonderQuestionHistoryController.php
--- a/src/applications/ponder/controller/PonderQuestionHistoryController.php
+++ b/src/applications/ponder/controller/PonderQuestionHistoryController.php
@@ -2,19 +2,13 @@
 
 final class PonderQuestionHistoryController extends PonderController {
 
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->id = $data['id'];
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
 
     $question = id(new PonderQuestionQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->executeOne();
     if (!$question) {
       return new Aphront404Response();
diff --git a/src/applications/ponder/controller/PonderQuestionListController.php b/src/applications/ponder/controller/PonderQuestionListController.php
--- a/src/applications/ponder/controller/PonderQuestionListController.php
+++ b/src/applications/ponder/controller/PonderQuestionListController.php
@@ -2,19 +2,15 @@
 
 final class PonderQuestionListController extends PonderController {
 
-  private $queryKey;
-
   public function shouldAllowPublic() {
     return true;
   }
 
-  public function willProcessRequest(array $data) {
-    $this->queryKey = idx($data, 'queryKey');
-  }
+  public function handleRequest(AphrontRequest $request) {
+    $query_key = $request->getURIData('queryKey');
 
-  public function processRequest() {
     $controller = id(new PhabricatorApplicationSearchController())
-      ->setQueryKey($this->queryKey)
+      ->setQueryKey($query_key)
       ->setSearchEngine(new PonderQuestionSearchEngine())
       ->setNavigation($this->buildSideNavView());
 
diff --git a/src/applications/ponder/controller/PonderQuestionStatusController.php b/src/applications/ponder/controller/PonderQuestionStatusController.php
--- a/src/applications/ponder/controller/PonderQuestionStatusController.php
+++ b/src/applications/ponder/controller/PonderQuestionStatusController.php
@@ -3,21 +3,14 @@
 final class PonderQuestionStatusController
   extends PonderController {
 
-  private $status;
-  private $id;
-
-  public function willProcessRequest(array $data) {
-    $this->status = idx($data, 'status');
-    $this->id = idx($data, 'id');
-  }
-
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
+    $id = $request->getURIData('id');
+    $status = $request->getURIData('status');
 
     $question = id(new PonderQuestionQuery())
       ->setViewer($viewer)
-      ->withIDs(array($this->id))
+      ->withIDs(array($id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
@@ -28,7 +21,7 @@
       return new Aphront404Response();
     }
 
-    switch ($this->status) {
+    switch ($status) {
       case 'open':
         $status = PonderQuestionStatus::STATUS_OPEN;
         break;
diff --git a/src/applications/ponder/controller/PonderQuestionViewController.php b/src/applications/ponder/controller/PonderQuestionViewController.php
--- a/src/applications/ponder/controller/PonderQuestionViewController.php
+++ b/src/applications/ponder/controller/PonderQuestionViewController.php
@@ -2,20 +2,13 @@
 
 final class PonderQuestionViewController extends PonderController {
 
-  private $questionID;
-
-  public function willProcessRequest(array $data) {
-    $this->questionID = $data['id'];
-  }
-
-  public function processRequest() {
-
-    $request = $this->getRequest();
-    $user = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $user = $request->getViewer();
+    $id = $request->getURIData('id');
 
     $question = id(new PonderQuestionQuery())
       ->setViewer($user)
-      ->withIDs(array($this->questionID))
+      ->withIDs(array($id))
       ->needAnswers(true)
       ->needViewerVotes(true)
       ->executeOne();
@@ -61,7 +54,7 @@
       ->addPropertyList($properties);
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
-    $crumbs->addTextCrumb('Q'.$this->questionID, '/Q'.$this->questionID);
+    $crumbs->addTextCrumb('Q'.$id, '/Q'.$id);
 
     return $this->buildApplicationPage(
       array(
diff --git a/src/applications/ponder/controller/PonderVoteSaveController.php b/src/applications/ponder/controller/PonderVoteSaveController.php
--- a/src/applications/ponder/controller/PonderVoteSaveController.php
+++ b/src/applications/ponder/controller/PonderVoteSaveController.php
@@ -2,9 +2,8 @@
 
 final class PonderVoteSaveController extends PonderController {
 
-  public function processRequest() {
-    $request = $this->getRequest();
-    $viewer = $request->getUser();
+  public function handleRequest(AphrontRequest $request) {
+    $viewer = $request->getViewer();
     $phid = $request->getStr('phid');
     $newvote = $request->getInt('vote');