diff --git a/application/models/rows/ApprovalActionQueue.php b/application/models/rows/ApprovalActionQueue.php
index 514b272e64a4ada0a1ead17034112c92976dd85d..75814e2b6901d8a306104f04ef018c7eb0bca54a 100644
--- a/application/models/rows/ApprovalActionQueue.php
+++ b/application/models/rows/ApprovalActionQueue.php
@@ -69,31 +69,33 @@ class ApprovalActionQueue extends ApprovalAction
      */
     public function updateFromForm($formData)
     {
-        foreach ($formData['schedule'] as $scheduleId => $scheduleData) {
-            if($scheduleId < 0) {
-                $schedule = ApprovalActionsQueueDates::getInstance()->fetchNew();
-                $schedule->approvalAction = $this;
-            } else {
-                $schedule = ApprovalActionsQueueDates::getInstance()->findOne($scheduleId);
-                if ($scheduleData['delete'] == 1) {
-                    $schedule->delete();
-                    CronJobs::unscheduleJob($date, 'ApprovalActionsQueue', 'advanceQueues');
-                    continue;
+        if (is_array($formData['schedule'])) {
+            foreach ($formData['schedule'] as $scheduleId => $scheduleData) {
+                if($scheduleId < 0) {
+                    $schedule = ApprovalActionsQueueDates::getInstance()->fetchNew();
+                    $schedule->approvalAction = $this;
+                } else {
+                    $schedule = ApprovalActionsQueueDates::getInstance()->findOne($scheduleId);
+                    if ($scheduleData['delete'] == 1) {
+                        $schedule->delete();
+                        CronJobs::unscheduleJob($date, 'ApprovalActionsQueue', 'advanceQueues');
+                        continue;
+                    }
+                }
+                $date = new Zend_Date();
+                $date->setYear($scheduleData['year']);
+                $date->setMonth($scheduleData['month']);
+                $date->setDay($scheduleData['day']);
+                $date->setHour(0);
+                $date->setMinute(0);
+                $date->setSecond(0);
+                $schedule->date = $date;
+                $schedule->save();
+                try {
+                    CronJobs::scheduleJob($date, 'ApprovalActionsQueue', 'advanceQueues');
+                } catch(Zend_Db_Exception $e) {
+                    // TODO: we should only ignore duplicate record exceptions
                 }
-            }
-            $date = new Zend_Date();
-            $date->setYear($scheduleData['year']);
-            $date->setMonth($scheduleData['month']);
-            $date->setDay($scheduleData['day']);
-            $date->setHour(0);
-            $date->setMinute(0);
-            $date->setSecond(0);
-            $schedule->date = $date;
-            $schedule->save();
-            try {
-                CronJobs::scheduleJob($date, 'ApprovalActionsQueue', 'advanceQueues');
-            } catch(Zend_Db_Exception $e) {
-                // TODO: we should only ignore duplicate record exceptions
             }
         }
     }
diff --git a/application/models/rows/ApprovalActionVote.php b/application/models/rows/ApprovalActionVote.php
index 62d7fdebbfb24eba0e294335b2a9d6af3c6f41ea..b80d556de97868d9716f7e6fcfef560d582d83b2 100644
--- a/application/models/rows/ApprovalActionVote.php
+++ b/application/models/rows/ApprovalActionVote.php
@@ -7,8 +7,7 @@ require_once 'ApprovalActionRow/Interface.php';
  * @tableClass ApprovalActionsVote
  *
  */
-class ApprovalActionVote extends ApprovalAction
-                         implements Application_ApprovalActionRow_Interface
+class ApprovalActionVote extends ApprovalActionQueue
 {
     public function _init()
     {
@@ -23,37 +22,15 @@ class ApprovalActionVote extends ApprovalAction
         );
         $this->_registerRelation($votingBodyRelation);
 
-        $datesRelation = new Nmc_Db_Table_Relation_HasMany(
-            ApprovalActionsVoteDates::getInstance(),
-            $this,
-            'approvalAction',
-            'dates'
-        );
-        $datesRelation->setSaveChildRows(false);
-        $this->_registerRelation($datesRelation);
 
-        /*
         $votesRelation = new Nmc_Db_Table_Relation_HasMany(
-            ApprovalActionsVoteVotes::getInstance(),
+            ApproverVotes::getInstance(),
             $this,
             'approvalAction',
             'votes'
         );
-        $this->_registerRelation($votesRelation);*/
-    }
-
-    /**
-     * Reutrns an array of strings, corresponding to the possible
-     * results of performing this action.  If a customized action can only
-     * result a subset of the possible results, return that subset.
-     *
-     * @return array
-     */
-    public function getResultStatusStrings()
-    {
-        return array('Approve' => 'Approve',
-                     'Deny'    => 'Deny',
-                     'Table'   => 'Table');
+        $votesRelation->setSaveChildRows(false);
+        $this->_registerRelation($votesRelation);
     }
 
     /**
@@ -65,7 +42,7 @@ class ApprovalActionVote extends ApprovalAction
      */
     public function consider(Request $request, ApprovalChain $parentChain)
     {
-        //
+        //parent::consider($request, $parentChain);
     }
 
     /**
@@ -79,28 +56,7 @@ class ApprovalActionVote extends ApprovalAction
         $this->votingRole = ApprovalBodyRoles::getInstance()->findOne($votingRoleId);
         $this->quorum = Zend_Filter_Int::filter($formData['quorum']);
 
-        foreach ($formData['schedule'] as $scheduleId => $scheduleData) {
-            if($scheduleId < 0) {
-                $schedule = ApprovalActionsVoteDates::getInstance()->fetchNew();
-                $schedule->approvalAction = $this;
-            } else {
-                $schedule = ApprovalActionsVoteDates::getInstance()->findOne($scheduleId);
-                if ($scheduleData['delete'] == 1) {
-                    $schedule->delete();
-                    continue;
-                }
-            }
-            $date = new Zend_Date();
-            $date->setYear($scheduleData['year']);
-            $date->setMonth($scheduleData['month']);
-            $date->setDay($scheduleData['day']);
-            $date->setHour(0);
-            $date->setMinute(0);
-            $date->setSecond(0);
-            $schedule->date = $date;
-            $schedule->type = $scheduleData['type'];
-            $schedule->save();
-        }
+        parent::updateFromForm($formData);
     }
 
     /**
@@ -113,26 +69,57 @@ class ApprovalActionVote extends ApprovalAction
      */
     public function userMadeDecision(Request $request, User $user, $decision)
     {
-        $vote = ApprovalActionsVoteVotes::getInstance()->fetchByRequestUserAndAction($request, $user, $this);
-        if ($vote) {
-            $vote->vote = $decision;
-        } else {
-            $vote = ApprovalActionsVoteVotes::getInstance()->fetchNew();
-            $vote->vote = $decision;
-            $vote->request = $request;
-            $vote->user = $user;
-            $vote->approvalAction = $this;
-        }
-        $vote->save();
+        parent::userMadeDecision($request, $user, $decision);
     }
 
-    public function getUserDecision(Request $request, User $user)
+    public function advanceQueue()
     {
-        $vote = ApprovalActionsVoteVotes::getInstance()->fetchByRequestUserAndAction($request, $user, $this);
-        if ($vote) {
-            return $vote->vote;
-        } else {
-            return null;
+
+        $requests = Requests::getInstance()->fetchAllWithCurrentAction($this);
+        foreach ($requests as $request) {
+
+            $queuedRequestStatus = ApprovalActionsQueueRequests::getInstance()->getStatusForRequestInQueue($request, $this);
+            if ($queuedRequestStatus == ApprovalActionsQueueRequests::STATUS_ACTIVE) {
+
+                // check to see if quorum is met, tally votes, etc
+                $voteTally = array();
+                foreach ($this->votes as $vote) {
+                    if (!array_key_exists($vote->vote, $voteTally)) {
+                        $voteTally[$vote->vote] = 0;
+                    }
+                    $voteTally[$vote->vote]++;
+                }
+                $maxVotes = max($voteTally);
+                $winningVotes = array_keys($voteTally, $maxVotes);
+
+                if (count($winningVotes) > 1) {
+                    // tie
+                    $winningVote = 'Table';
+                } else if (count($voteTally) < $this->quorum) {
+                    // quorum not met
+                    $winningVote = 'Table';
+                } else {
+                    $winningVote = $winningVotes[0];
+                }
+
+                // update request to reflect result of voting
+                $request->state = $winningVote;
+
+                // if the request is tabled, roll it back to STATUS_HOLDING so that when the
+                // queue advances, this request will go right back to being active.
+                if ($request->state == 'Table') {
+                    ApprovalActionsQueueRequests::getInstance()->setStatusForRequestInQueue(
+                        $request, $this, ApprovalActionsQueueRequests::STATUS_HOLDING
+                    );
+                }
+            }
+
+
+
+
         }
+
+        parent::advanceQueue();
     }
+
 }
\ No newline at end of file
diff --git a/application/models/tables/ApprovalActionsVote.php b/application/models/tables/ApprovalActionsVote.php
index 586efe151014f56cacfc5339b1deaf2e56fa4649..08912188203437799389fe0929ded1a426edb37a 100644
--- a/application/models/tables/ApprovalActionsVote.php
+++ b/application/models/tables/ApprovalActionsVote.php
@@ -72,7 +72,8 @@ class ApprovalActionsVote extends Nmc_Db_Table
 
         $new = parent::fetchNew();
         $new->className = 'ApprovalActionVote';
-        $new->closed = 'No';
+        $new->quorum = 0;
+        //$new->closed = 'No';
         return $new;
     }
 }
\ No newline at end of file
diff --git a/application/views/approval_actions/ApprovalActionVote.xhtml b/application/views/approval_actions/ApprovalActionVote.xhtml
index 1302d3dcda236b1f7c13e1e8751d265d42ab9343..225c22a8d1cdf210838cebbb0ca0a45ca02799fe 100644
--- a/application/views/approval_actions/ApprovalActionVote.xhtml
+++ b/application/views/approval_actions/ApprovalActionVote.xhtml
@@ -4,12 +4,8 @@ $currentSave = $current;
 
 $current['id'] = '';
 $current['value'] = null;
-$current['approvalRoles'] = $this->chain->ownerBody->roles->columnToArray('name', 'approvalBodyRoleId');
 $current['selectedRoleId'] = null;
 if ($approvalAction) {
-    if ($approvalAction->votingRole) {
-        $current['selectedRoleId'] = $approvalAction->votingRole->getPrimaryKey();
-    }
     $current['keyPrefix'] = 'edit[' . $approvalAction->getPrimaryKey() . '][';
     $current['keySuffix'] = ']';
     $current['quorum'] = $approvalAction->quorum;
@@ -23,46 +19,33 @@ if ($approvalAction) {
 }
 ?>
 <div>
-    <label>
-        Voting Role: <br />
-        <?php echo $this->formSelect($current['keyPrefix'] . 'votingRole' . $current['keySuffix'],
-                                     $current['selectedRoleId'], null,
-                                     array('-1' => '--Select a Role--') + $current['approvalRoles']);
-        ?>
-    </label>
-    <label>
-        Quorum: <br />
-        <?php echo $this->formText($current['keyPrefix'] . 'quorum' . $current['keySuffix'],
-                                   $current['quorum']);
-        ?>
-    </label>
+    <label for="<?php echo $current['keyPrefix'] . 'quorum' . $current['keySuffix']; ?>">Quorum:</label>
+    <?php echo $this->formText($current['keyPrefix'] . 'quorum' . $current['keySuffix'],
+                               $current['quorum']);
+    ?>
 </div>
+
 <div class="clear"></div>
+
 <div>
     <table>
         <tr>
-            <th>Mode</th>
             <th>Year</th>
             <th>Month</th>
             <th>Day</th>
         </tr>
-        <?php foreach ($current['dates'] as $scheduledVote) { ?>
+        <?php foreach ($current['dates'] as $scheduledAdvance) { ?>
         <tr>
-            <td><?php echo $this->formSelect($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledVote->getPrimaryKey() . '][type]',
-                                             $scheduledVote->type, null,
-                                             array('View' => 'View', 'Vote' => 'Vote')); ?></td>
-            <td><?php echo $this->formSelectYear($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledVote->getPrimaryKey() . '][year]',
-                                                 $scheduledVote->date->get(Zend_Date::YEAR)); ?></td>
-            <td><?php echo $this->formSelectMonth($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledVote->getPrimaryKey() . '][month]',
-                                                  $scheduledVote->date->get(Zend_Date::MONTH)); ?></td>
-            <td><?php echo $this->formSelectDay($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledVote->getPrimaryKey() . '][day]',
-                                                $scheduledVote->date->get(Zend_Date::DAY)); ?></td>
-            <td><?php echo $this->formCheckbox($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledVote->getPrimaryKey() . '][delete]'); ?></td>
+            <td><?php echo $this->formSelectYear($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledAdvance->getPrimaryKey() . '][year]',
+                                                 $scheduledAdvance->date->get(Zend_Date::YEAR)); ?></td>
+            <td><?php echo $this->formSelectMonth($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledAdvance->getPrimaryKey() . '][month]',
+                                                  $scheduledAdvance->date->get(Zend_Date::MONTH)); ?></td>
+            <td><?php echo $this->formSelectDay($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledAdvance->getPrimaryKey() . '][day]',
+                                                $scheduledAdvance->date->get(Zend_Date::DAY)); ?></td>
+            <td><?php echo $this->formCheckbox($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[' . $scheduledAdvance->getPrimaryKey() . '][delete]'); ?></td>
         </tr>
         <?php } ?>
         <tr class="hidden_new_record">
-            <td> <?php echo $this->formSelect($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[__key__][type]', null, array('disabled' => 'disabled'),
-                                             array('View' => 'View', 'Vote' => 'Vote')); ?> </td>
             <td> <?php echo $this->formSelectYear($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[__key__][year]', null, array('disabled' => 'disabled')); ?> </td>
             <td> <?php echo $this->formSelectMonth($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[__key__][month]', null, array('disabled' => 'disabled')); ?> </td>
             <td> <?php echo $this->formSelectDay($current['keyPrefix'] . 'schedule' . $current['keySuffix'] . '[__key__][day]', null, array('disabled' => 'disabled')); ?> </td>
@@ -70,11 +53,8 @@ if ($approvalAction) {
         </tr>
         <tr>
             <td colspan="4">
-                <a href="#" class="add_record_button">Add Scheduled Vote</a>
+                <a href="#" class="add_record_button">Add Scheduled Advance</a>
             </td>
         </tr>
     </table>
-</div>
-<?php
-
-$current = $currentSave;
+</div>
\ No newline at end of file