diff --git a/resources/sql/autopatches/20220525.slowvote.06.method-type.sql b/resources/sql/autopatches/20220525.slowvote.06.method-type.sql
new file mode 100644
index 0000000000..e2af0643bc
--- /dev/null
+++ b/resources/sql/autopatches/20220525.slowvote.06.method-type.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll
+  CHANGE method method VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20220525.slowvote.07.method-value.sql b/resources/sql/autopatches/20220525.slowvote.07.method-value.sql
new file mode 100644
index 0000000000..04d0f6f430
--- /dev/null
+++ b/resources/sql/autopatches/20220525.slowvote.07.method-value.sql
@@ -0,0 +1,5 @@
+UPDATE {$NAMESPACE}_slowvote.slowvote_poll
+  SET method = 'plurality' WHERE method = '0';
+
+UPDATE {$NAMESPACE}_slowvote.slowvote_poll
+  SET method = 'approval' WHERE method = '1';
diff --git a/src/applications/slowvote/constants/SlowvotePollVotingMethod.php b/src/applications/slowvote/constants/SlowvotePollVotingMethod.php
index 5707cd257f..f0f18641e3 100644
--- a/src/applications/slowvote/constants/SlowvotePollVotingMethod.php
+++ b/src/applications/slowvote/constants/SlowvotePollVotingMethod.php
@@ -1,70 +1,70 @@
 <?php
 
 final class SlowvotePollVotingMethod
   extends Phobject {
 
-  const METHOD_PLURALITY = 0;
-  const METHOD_APPROVAL = 1;
+  const METHOD_PLURALITY = 'plurality';
+  const METHOD_APPROVAL = 'approval';
 
   private $key;
 
   public static function newVotingMethodObject($key) {
     $object = new self();
     $object->key = $key;
     return $object;
   }
 
   public function getKey() {
     return $this->key;
   }
 
   public static function getAll() {
     $map = self::getMap();
 
     $result = array();
     foreach ($map as $key => $spec) {
       $result[$key] = self::newVotingMethodObject($key);
     }
 
     return $result;
   }
 
   public function getName() {
     $name = $this->getProperty('name');
 
     if ($name === null) {
       $name = pht('Unknown ("%s")', $this->getKey());
     }
 
     return $name;
   }
 
   public function getNameForEdit() {
     $name = $this->getProperty('name.edit');
 
     if ($name === null) {
       $name = pht('Unknown ("%s")', $this->getKey());
     }
 
     return $name;
   }
 
   private function getProperty($key, $default = null) {
     $spec = idx(self::getMap(), $this->getKey(), array());
     return idx($spec, $key, $default);
   }
 
   private static function getMap() {
     return array(
       self::METHOD_PLURALITY => array(
         'name' => pht('Plurality'),
         'name.edit' => pht('Plurality (Single Choice)'),
       ),
       self::METHOD_APPROVAL => array(
         'name' => pht('Approval'),
         'name.edit' => pht('Approval (Multiple Choice)'),
       ),
     );
   }
 
 }
diff --git a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
index 3cafb03a41..48639ffde6 100644
--- a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
+++ b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
@@ -1,301 +1,301 @@
 <?php
 
 final class PhabricatorSlowvoteEditController
   extends PhabricatorSlowvoteController {
 
   public function handleRequest(AphrontRequest $request) {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
 
     if ($id) {
       $poll = id(new PhabricatorSlowvoteQuery())
         ->setViewer($viewer)
         ->withIDs(array($id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$poll) {
         return new Aphront404Response();
       }
       $is_new = false;
     } else {
       $poll = PhabricatorSlowvotePoll::initializeNewPoll($viewer);
       $is_new = true;
     }
 
     if ($is_new) {
       $v_projects = array();
     } else {
       $v_projects = PhabricatorEdgeQuery::loadDestinationPHIDs(
         $poll->getPHID(),
         PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
       $v_projects = array_reverse($v_projects);
     }
 
     $e_question = true;
     $e_response = true;
     $errors = array();
 
     $v_question = $poll->getQuestion();
     $v_description = $poll->getDescription();
     $v_responses = $poll->getResponseVisibility();
     $v_shuffle = $poll->getShuffle();
     $v_space = $poll->getSpacePHID();
 
     $responses = $request->getArr('response');
     if ($request->isFormPost()) {
       $v_question = $request->getStr('question');
       $v_description = $request->getStr('description');
       $v_responses = $request->getStr('responses');
       $v_shuffle = (int)$request->getBool('shuffle');
       $v_view_policy = $request->getStr('viewPolicy');
       $v_projects = $request->getArr('projects');
 
       $v_space = $request->getStr('spacePHID');
 
       if ($is_new) {
-        $poll->setMethod($request->getInt('method'));
+        $poll->setMethod($request->getStr('method'));
       }
 
       if (!strlen($v_question)) {
         $e_question = pht('Required');
         $errors[] = pht('You must ask a poll question.');
       } else {
         $e_question = null;
       }
 
       if ($is_new) {
         // NOTE: Make sure common and useful response "0" is preserved.
         foreach ($responses as $key => $response) {
           if (!strlen($response)) {
             unset($responses[$key]);
           }
         }
 
         if (empty($responses)) {
           $errors[] = pht('You must offer at least one response.');
           $e_response = pht('Required');
         } else {
           $e_response = null;
         }
       }
 
       $template = id(new PhabricatorSlowvoteTransaction());
       $xactions = array();
 
       if ($is_new) {
         $xactions[] = id(new PhabricatorSlowvoteTransaction())
           ->setTransactionType(PhabricatorTransactions::TYPE_CREATE);
       }
 
       $xactions[] = id(clone $template)
         ->setTransactionType(
             PhabricatorSlowvoteQuestionTransaction::TRANSACTIONTYPE)
         ->setNewValue($v_question);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(
             PhabricatorSlowvoteDescriptionTransaction::TRANSACTIONTYPE)
         ->setNewValue($v_description);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(
             PhabricatorSlowvoteResponsesTransaction::TRANSACTIONTYPE)
         ->setNewValue($v_responses);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(
             PhabricatorSlowvoteShuffleTransaction::TRANSACTIONTYPE)
         ->setNewValue($v_shuffle);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
         ->setNewValue($v_view_policy);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorTransactions::TYPE_SPACE)
         ->setNewValue($v_space);
 
       if (empty($errors)) {
         $proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
         $xactions[] = id(new PhabricatorSlowvoteTransaction())
           ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
           ->setMetadataValue('edge:type', $proj_edge_type)
           ->setNewValue(array('=' => array_fuse($v_projects)));
 
         $editor = id(new PhabricatorSlowvoteEditor())
           ->setActor($viewer)
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request);
 
         $xactions = $editor->applyTransactions($poll, $xactions);
 
         if ($is_new) {
           $poll->save();
 
           foreach ($responses as $response) {
             $option = new PhabricatorSlowvoteOption();
             $option->setName($response);
             $option->setPollID($poll->getID());
             $option->save();
           }
         }
 
         return id(new AphrontRedirectResponse())
           ->setURI($poll->getURI());
       } else {
         $poll->setViewPolicy($v_view_policy);
       }
     }
 
     $form = id(new AphrontFormView())
       ->setAction($request->getrequestURI())
       ->setUser($viewer)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Question'))
           ->setName('question')
           ->setValue($v_question)
           ->setError($e_question))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setUser($viewer)
           ->setLabel(pht('Description'))
           ->setName('description')
           ->setValue($v_description))
       ->appendControl(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Tags'))
           ->setName('projects')
           ->setValue($v_projects)
           ->setDatasource(new PhabricatorProjectDatasource()));
 
     if ($is_new) {
       for ($ii = 0; $ii < 10; $ii++) {
         $n = ($ii + 1);
         $response = id(new AphrontFormTextControl())
           ->setLabel(pht('Response %d', $n))
           ->setName('response[]')
           ->setValue(idx($responses, $ii, ''));
 
         if ($ii == 0) {
           $response->setError($e_response);
         }
 
         $form->appendChild($response);
       }
     }
 
     $vote_type_map = SlowvotePollVotingMethod::getAll();
     $vote_type_options = mpull($vote_type_map, 'getNameForEdit');
 
     $method = $poll->getMethod();
     if (!isset($vote_type_options[$method])) {
       $method_object =
         SlowvotePollVotingMethod::newVotingMethodObject(
           $method);
 
       $vote_type_options = array(
         $method => $method_object->getNameForEdit(),
       ) + $vote_type_options;
     }
 
     $response_type_map = SlowvotePollResponseVisibility::getAll();
     $response_type_options = mpull($response_type_map, 'getNameForEdit');
 
     $visibility = $poll->getResponseVisibility();
     if (!isset($response_type_options[$visibility])) {
       $visibility_object =
         SlowvotePollResponseVisibility::newResponseVisibilityObject(
           $visibility);
 
       $response_type_options = array(
         $visibility => $visibility_object->getNameForEdit(),
       ) + $response_type_options;
     }
 
     if ($is_new) {
       $form->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Vote Type'))
           ->setName('method')
           ->setValue($poll->getMethod())
           ->setOptions($vote_type_options));
     } else {
       $form->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Vote Type'))
           ->setValue(idx($vote_type_options, $poll->getMethod())));
     }
 
     if ($is_new) {
       $title = pht('Create Slowvote');
       $button = pht('Create');
       $cancel_uri = $this->getApplicationURI();
       $header_icon = 'fa-plus-square';
     } else {
       $title = pht('Edit Poll: %s', $poll->getQuestion());
       $button = pht('Save Changes');
       $cancel_uri = '/V'.$poll->getID();
       $header_icon = 'fa-pencil';
     }
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($viewer)
       ->setObject($poll)
       ->execute();
 
     $form
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Responses'))
           ->setName('responses')
           ->setValue($v_responses)
           ->setOptions($response_type_options))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->setLabel(pht('Shuffle'))
           ->addCheckbox(
             'shuffle',
             1,
             pht('Show choices in random order.'),
             $v_shuffle))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($viewer)
           ->setName('viewPolicy')
           ->setPolicyObject($poll)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
           ->setSpacePHID($v_space))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($button)
           ->addCancelButton($cancel_uri));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($title);
     $crumbs->setBorder(true);
 
     $form_box = id(new PHUIObjectBoxView())
       ->setHeaderText($title)
       ->setFormErrors($errors)
       ->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
       ->setForm($form);
 
     $view = id(new PHUITwoColumnView())
       ->setFooter($form_box);
 
     return $this->newPage()
       ->setTitle($title)
       ->setCrumbs($crumbs)
       ->appendChild(
         array(
           $view,
       ));
   }
 
 }
diff --git a/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php b/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php
index 419605e2d8..7c44f5ea4d 100644
--- a/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php
+++ b/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php
@@ -1,222 +1,222 @@
 <?php
 
 final class PhabricatorSlowvotePoll
   extends PhabricatorSlowvoteDAO
   implements
     PhabricatorApplicationTransactionInterface,
     PhabricatorPolicyInterface,
     PhabricatorSubscribableInterface,
     PhabricatorFlaggableInterface,
     PhabricatorTokenReceiverInterface,
     PhabricatorProjectInterface,
     PhabricatorDestructibleInterface,
     PhabricatorSpacesInterface,
     PhabricatorConduitResultInterface {
 
   protected $question;
   protected $description;
   protected $authorPHID;
   protected $responseVisibility;
   protected $shuffle = 0;
   protected $method;
   protected $viewPolicy;
   protected $isClosed = 0;
   protected $spacePHID;
 
   private $options = self::ATTACHABLE;
   private $choices = self::ATTACHABLE;
   private $viewerChoices = self::ATTACHABLE;
 
   public static function initializeNewPoll(PhabricatorUser $actor) {
     $app = id(new PhabricatorApplicationQuery())
       ->setViewer($actor)
       ->withClasses(array('PhabricatorSlowvoteApplication'))
       ->executeOne();
 
     $view_policy = $app->getPolicy(
       PhabricatorSlowvoteDefaultViewCapability::CAPABILITY);
 
     $default_responses = SlowvotePollResponseVisibility::RESPONSES_VISIBLE;
     $default_method = SlowvotePollVotingMethod::METHOD_PLURALITY;
 
     return id(new PhabricatorSlowvotePoll())
       ->setAuthorPHID($actor->getPHID())
       ->setViewPolicy($view_policy)
       ->setSpacePHID($actor->getDefaultSpacePHID())
       ->setMethod($default_method)
       ->setResponseVisibility($default_responses);
   }
 
   protected function getConfiguration() {
     return array(
       self::CONFIG_AUX_PHID => true,
       self::CONFIG_COLUMN_SCHEMA => array(
         'question' => 'text255',
         'responseVisibility' => 'text32',
         'shuffle' => 'bool',
-        'method' => 'uint32',
+        'method' => 'text32',
         'description' => 'text',
         'isClosed' => 'bool',
       ),
       self::CONFIG_KEY_SCHEMA => array(
       ),
     ) + parent::getConfiguration();
   }
 
   public function getPHIDType() {
     return PhabricatorSlowvotePollPHIDType::TYPECONST;
   }
 
   public function getOptions() {
     return $this->assertAttached($this->options);
   }
 
   public function attachOptions(array $options) {
     assert_instances_of($options, 'PhabricatorSlowvoteOption');
     $this->options = $options;
     return $this;
   }
 
   public function getChoices() {
     return $this->assertAttached($this->choices);
   }
 
   public function attachChoices(array $choices) {
     assert_instances_of($choices, 'PhabricatorSlowvoteChoice');
     $this->choices = $choices;
     return $this;
   }
 
   public function getViewerChoices(PhabricatorUser $viewer) {
     return $this->assertAttachedKey($this->viewerChoices, $viewer->getPHID());
   }
 
   public function attachViewerChoices(PhabricatorUser $viewer, array $choices) {
     if ($this->viewerChoices === self::ATTACHABLE) {
       $this->viewerChoices = array();
     }
     assert_instances_of($choices, 'PhabricatorSlowvoteChoice');
     $this->viewerChoices[$viewer->getPHID()] = $choices;
     return $this;
   }
 
   public function getMonogram() {
     return 'V'.$this->getID();
   }
 
   public function getURI() {
     return '/'.$this->getMonogram();
   }
 
 
 /* -(  PhabricatorApplicationTransactionInterface  )------------------------- */
 
 
   public function getApplicationTransactionEditor() {
     return new PhabricatorSlowvoteEditor();
   }
 
   public function getApplicationTransactionTemplate() {
     return new PhabricatorSlowvoteTransaction();
   }
 
 
 /* -(  PhabricatorPolicyInterface  )----------------------------------------- */
 
 
   public function getCapabilities() {
     return array(
       PhabricatorPolicyCapability::CAN_VIEW,
       PhabricatorPolicyCapability::CAN_EDIT,
     );
   }
 
   public function getPolicy($capability) {
     switch ($capability) {
       case PhabricatorPolicyCapability::CAN_VIEW:
         return $this->viewPolicy;
       case PhabricatorPolicyCapability::CAN_EDIT:
         return PhabricatorPolicies::POLICY_NOONE;
     }
   }
 
   public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
     return ($viewer->getPHID() == $this->getAuthorPHID());
   }
 
   public function describeAutomaticCapability($capability) {
     return pht('The author of a poll can always view and edit it.');
   }
 
 
 
 /* -(  PhabricatorSubscribableInterface  )----------------------------------- */
 
 
   public function isAutomaticallySubscribed($phid) {
     return ($phid == $this->getAuthorPHID());
   }
 
 
 /* -(  PhabricatorTokenReceiverInterface  )---------------------------------- */
 
 
   public function getUsersToNotifyOfTokenGiven() {
     return array($this->getAuthorPHID());
   }
 
 /* -(  PhabricatorDestructibleInterface  )----------------------------------- */
 
   public function destroyObjectPermanently(
     PhabricatorDestructionEngine $engine) {
 
     $this->openTransaction();
       $choices = id(new PhabricatorSlowvoteChoice())->loadAllWhere(
         'pollID = %d',
         $this->getID());
       foreach ($choices as $choice) {
         $choice->delete();
       }
       $options = id(new PhabricatorSlowvoteOption())->loadAllWhere(
         'pollID = %d',
         $this->getID());
       foreach ($options as $option) {
         $option->delete();
       }
       $this->delete();
     $this->saveTransaction();
   }
 
 /* -(  PhabricatorSpacesInterface  )----------------------------------------- */
 
   public function getSpacePHID() {
     return $this->spacePHID;
   }
 
 /* -(  PhabricatorConduitResultInterface  )---------------------------------- */
 
   public function getFieldSpecificationsForConduit() {
     return array(
       id(new PhabricatorConduitSearchFieldSpecification())
         ->setKey('name')
         ->setType('string')
         ->setDescription(pht('The name of the poll.')),
       id(new PhabricatorConduitSearchFieldSpecification())
         ->setKey('authorPHID')
         ->setType('string')
         ->setDescription(pht('The author of the poll.')),
     );
   }
 
   public function getFieldValuesForConduit() {
     return array(
       'name' => $this->getQuestion(),
       'authorPHID' => $this->getAuthorPHID(),
     );
   }
 
   public function getConduitSearchAttachments() {
     return array();
   }
 
 }
diff --git a/src/applications/slowvote/view/SlowvoteEmbedView.php b/src/applications/slowvote/view/SlowvoteEmbedView.php
index eaf1d2cc93..fcc0ae9d28 100644
--- a/src/applications/slowvote/view/SlowvoteEmbedView.php
+++ b/src/applications/slowvote/view/SlowvoteEmbedView.php
@@ -1,339 +1,343 @@
 <?php
 
 final class SlowvoteEmbedView extends AphrontView {
 
   private $poll;
   private $handles;
 
   public function setPoll(PhabricatorSlowvotePoll $poll) {
     $this->poll = $poll;
     return $this;
   }
 
   public function getPoll() {
     return $this->poll;
   }
 
   public function render() {
     if (!$this->poll) {
       throw new PhutilInvalidStateException('setPoll');
     }
 
     $poll = $this->poll;
 
     $phids = array();
     foreach ($poll->getChoices() as $choice) {
       $phids[] = $choice->getAuthorPHID();
     }
     $phids[] = $poll->getAuthorPHID();
 
     $this->handles = id(new PhabricatorHandleQuery())
       ->setViewer($this->getUser())
       ->withPHIDs($phids)
       ->execute();
 
     $options = $poll->getOptions();
 
     if ($poll->getShuffle()) {
       shuffle($options);
     }
 
     require_celerity_resource('phabricator-slowvote-css');
 
     $user_choices = $poll->getViewerChoices($this->getUser());
     $user_choices = mpull($user_choices, 'getOptionID', 'getOptionID');
 
     $out = array();
     foreach ($options as $option) {
       $is_selected = isset($user_choices[$option->getID()]);
       $out[] = $this->renderLabel($option, $is_selected);
     }
 
     $link_to_slowvote = phutil_tag(
       'a',
       array(
         'href' => '/V'.$poll->getID(),
       ),
       $poll->getQuestion());
 
     $header = id(new PHUIHeaderView())
       ->setHeader($link_to_slowvote);
 
     $description = $poll->getDescription();
     if (strlen($description)) {
       $description = new PHUIRemarkupView($this->getUser(), $description);
       $description = phutil_tag(
         'div',
         array(
           'class' => 'slowvote-description',
         ),
         $description);
     }
 
     $header = array(
       $header,
       $description,
     );
 
     $quip = pht('Voting improves cardiovascular endurance.');
 
     $vis = $poll->getResponseVisibility();
     if ($this->areResultsVisible()) {
       if ($vis == SlowvotePollResponseVisibility::RESPONSES_OWNER) {
         $quip = pht('Only you can see the results.');
       }
     } else if ($vis == SlowvotePollResponseVisibility::RESPONSES_VOTERS) {
       $quip = pht('You must vote to see the results.');
     } else if ($vis == SlowvotePollResponseVisibility::RESPONSES_OWNER) {
       $quip = pht('Only the author can see the results.');
     }
 
     $hint = phutil_tag(
       'span',
       array(
         'class' => 'slowvote-hint',
       ),
       $quip);
 
     if ($poll->getIsClosed()) {
       $submit = null;
     } else {
       $submit = phutil_tag(
         'div',
         array(
           'class' => 'slowvote-footer',
         ),
         phutil_tag(
           'div',
           array(
             'class' => 'slowvote-footer-content',
           ),
           array(
             $hint,
             phutil_tag(
               'button',
               array(
               ),
               pht('Engage in Deliberations')),
           )));
     }
 
     $body = phabricator_form(
       $this->getUser(),
       array(
         'action'  => '/vote/'.$poll->getID().'/',
         'method'  => 'POST',
         'class'   => 'slowvote-body',
       ),
       array(
         phutil_tag(
           'div',
           array(
             'class' => 'slowvote-body-content',
           ),
           $out),
         $submit,
       ));
 
     $embed = javelin_tag(
       'div',
       array(
         'class' => 'slowvote-embed',
         'sigil' => 'slowvote-embed',
         'meta' => array(
           'pollID' => $poll->getID(),
         ),
       ),
       array($body));
 
     return id(new PHUIObjectBoxView())
       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
       ->setHeader($header)
       ->appendChild($embed)
       ->addClass('slowvote-poll-view');
   }
 
   private function renderLabel(PhabricatorSlowvoteOption $option, $selected) {
     $classes = array();
     $classes[] = 'slowvote-option-label';
 
     $status = $this->renderStatus($option);
     $voters = $this->renderVoters($option);
 
     return phutil_tag(
       'div',
       array(
         'class' => 'slowvote-option-label-group',
       ),
       array(
         phutil_tag(
           'label',
           array(
             'class' => implode(' ', $classes),
           ),
           array(
             phutil_tag(
               'div',
               array(
                 'class' => 'slowvote-control-offset',
               ),
               $option->getName()),
             $this->renderBar($option),
             phutil_tag(
               'div',
               array(
                 'class' => 'slowvote-above-the-bar',
               ),
               array(
                 $this->renderControl($option, $selected),
                 $status,
               )),
           )),
         $voters,
       ));
   }
 
   private function renderBar(PhabricatorSlowvoteOption $option) {
     if (!$this->areResultsVisible()) {
       return null;
     }
 
     $poll = $this->getPoll();
 
     $choices = mgroup($poll->getChoices(), 'getOptionID');
     $choices = count(idx($choices, $option->getID(), array()));
     $count = count(mgroup($poll->getChoices(), 'getAuthorPHID'));
 
     return phutil_tag(
       'div',
       array(
         'class' => 'slowvote-bar',
         'style' => sprintf(
           'width: %.1f%%;',
           $count ? 100 * ($choices / $count) : 0),
       ),
       array(
         phutil_tag(
           'div',
           array(
             'class' => 'slowvote-control-offset',
           ),
           $option->getName()),
       ));
   }
 
   private function renderControl(PhabricatorSlowvoteOption $option, $selected) {
     $types = array(
       SlowvotePollVotingMethod::METHOD_PLURALITY => 'radio',
       SlowvotePollVotingMethod::METHOD_APPROVAL => 'checkbox',
     );
 
     $closed = $this->getPoll()->getIsClosed();
 
     return phutil_tag(
       'input',
       array(
         'type' => idx($types, $this->getPoll()->getMethod()),
         'name' => 'vote[]',
         'value' => $option->getID(),
         'checked' => ($selected ? 'checked' : null),
         'disabled' => ($closed ? 'disabled' : null),
       ));
   }
 
   private function renderVoters(PhabricatorSlowvoteOption $option) {
     if (!$this->areResultsVisible()) {
       return null;
     }
 
     $poll = $this->getPoll();
 
     $choices = mgroup($poll->getChoices(), 'getOptionID');
     $choices = idx($choices, $option->getID(), array());
 
     if (!$choices) {
       return null;
     }
 
     $handles = $this->handles;
     $authors = mpull($choices, 'getAuthorPHID', 'getAuthorPHID');
 
     $viewer_phid = $this->getUser()->getPHID();
 
     // Put the viewer first if they've voted for this option.
     $authors = array_select_keys($authors, array($viewer_phid))
              + $authors;
 
     $voters = array();
     foreach ($authors as $author_phid) {
       $handle = $handles[$author_phid];
 
       $voters[] = javelin_tag(
         'div',
         array(
           'class' => 'slowvote-voter',
           'style' => 'background-image: url('.$handle->getImageURI().')',
           'sigil' => 'has-tooltip',
           'meta' => array(
             'tip' => $handle->getName(),
           ),
         ));
     }
 
     return phutil_tag(
       'div',
       array(
         'class' => 'slowvote-voters',
       ),
       $voters);
   }
 
   private function renderStatus(PhabricatorSlowvoteOption $option) {
     if (!$this->areResultsVisible()) {
       return null;
     }
 
     $poll = $this->getPoll();
 
     $choices = mgroup($poll->getChoices(), 'getOptionID');
     $choices = count(idx($choices, $option->getID(), array()));
     $count = count(mgroup($poll->getChoices(), 'getAuthorPHID'));
 
     $percent = sprintf('%d%%', $count ? 100 * $choices / $count : 0);
 
-    switch ($poll->getMethod()) {
+    $method = $poll->getMethod();
+    switch ($method) {
       case SlowvotePollVotingMethod::METHOD_PLURALITY:
         $status = pht('%s (%d / %d)', $percent, $choices, $count);
         break;
       case SlowvotePollVotingMethod::METHOD_APPROVAL:
         $status = pht('%s Approval (%d / %d)', $percent, $choices, $count);
         break;
+      default:
+        $status = pht('Unknown ("%s")', $method);
+        break;
     }
 
     return phutil_tag(
       'div',
       array(
         'class' => 'slowvote-status',
       ),
       $status);
   }
 
   private function areResultsVisible() {
     $poll = $this->getPoll();
 
     $visibility = $poll->getResponseVisibility();
     if ($visibility == SlowvotePollResponseVisibility::RESPONSES_VISIBLE) {
       return true;
     }
 
     $viewer = $this->getViewer();
 
     if ($visibility == SlowvotePollResponseVisibility::RESPONSES_OWNER) {
       return ($poll->getAuthorPHID() === $viewer->getPHID());
     }
 
     $choices = mgroup($poll->getChoices(), 'getAuthorPHID');
     return (bool)idx($choices, $viewer->getPHID());
   }
 
 }