diff --git a/election_vote/election_vote.module b/election_vote/election_vote.module
index 29ef180..999124e 100644
--- a/election_vote/election_vote.module
+++ b/election_vote/election_vote.module
@@ -114,15 +114,26 @@ function election_vote_theme() {
  * @param object $post
  *   The election post object.
  * @param object $account
- *   The user account for which to check.
+ *   The user account for which to check (default: the current user).
+ * @param bool $only_open
+ *   Access will be denied if this argument is TRUE (the default), and if voting
+ *   is not currently open for the post.
+ *
+ * @return bool
+ *   TRUE if the user has access, FALSE otherwise.
  */
-function election_vote_access($op, stdClass $post, $account = NULL) {
+function election_vote_access($op, stdClass $post, $account = NULL, $only_open = TRUE) {
 
   // The default account is the current user.
   if ($account === NULL) {
     $account = $GLOBALS['user'];;
   }
 
+  // Check whether the election and post are open for voting.
+  if ($only_open && (!election_voting_open($post->election) || $post->vstatus_inheritance == ELECTION_POST_STATUS_CLOSED)) {
+    return FALSE;
+  }
+
   // If access has already been checked in this page request, return from cache.
   $grants = &drupal_static('election_vote_grants', array());
   if (isset($grants[$post->post_id][$account->uid][$op])) {
@@ -135,19 +146,6 @@ function election_vote_access($op, stdClass $post, $account = NULL) {
     return FALSE;
   }
 
-  // Check whether the election is open.
-  $election = $post->election;
-  if (!election_voting_open($election)) {
-    $grants[$post->post_id][$account->uid][$op] = FALSE;
-    return FALSE;
-  }
-
-  // Check whether the post is individually set to 'closed'.
-  if ($post->vstatus_inheritance == ELECTION_POST_STATUS_CLOSED) {
-    $grants[$post->post_id][$account->uid][$op] = FALSE;
-    return FALSE;
-  }
-
   // Check role access.
   $accounts_roles_with_access = array_intersect(array_keys($account->roles), (array) $post->rids);
   if (!count($accounts_roles_with_access)) {
