diff --git a/application/models/rows/ApprovalActionQueue.php b/application/models/rows/ApprovalActionQueue.php
index 75814e2b6901d8a306104f04ef018c7eb0bca54a..5e040aa1908a6089e54b95555a2530a1d2f92939 100644
--- a/application/models/rows/ApprovalActionQueue.php
+++ b/application/models/rows/ApprovalActionQueue.php
@@ -110,7 +110,7 @@ class ApprovalActionQueue extends ApprovalAction
      */
     public function userMadeDecision(Request $request, User $user, $decision)
     {
-        $vote = ApproverVotes::getInstance()->fetchByRequestUserAndAction($request, $user, $this);
+        $vote = $this->getUserDecision($request, $user);
         if ($vote) {
             $vote->vote = $decision;
         } else {
diff --git a/application/models/rows/ApprovalActionVote.php b/application/models/rows/ApprovalActionVote.php
index b80d556de97868d9716f7e6fcfef560d582d83b2..26e61a6d5cf004ab6cbe4046a2bb9e5719ee5452 100644
--- a/application/models/rows/ApprovalActionVote.php
+++ b/application/models/rows/ApprovalActionVote.php
@@ -69,6 +69,12 @@ class ApprovalActionVote extends ApprovalActionQueue
      */
     public function userMadeDecision(Request $request, User $user, $decision)
     {
+        $vote = $this->getUserDecision($request, $user);
+        if ($vote) {
+            // TODO: don't fail silently when someone tries to vote again.
+            return;
+        }
+
         parent::userMadeDecision($request, $user, $decision);
     }