diff --git 546518_advpoll_resultaccess.patch 546518_advpoll_resultaccess.patch
index 6ff6397..38a5403 100644
--- advpoll.module
+++ advpoll.module
@@ -639,6 +639,13 @@ function advpoll_form_alter(&$form, $form_state, $form_id) {
         '#description' => t('Use a dedicated question field instead of a combined question and title field. It is recommended to rename <em>Title field label</em> above to "Title" if this is checked.'),
         '#default_value' => variable_get('advpoll_use_question_'. $node_type, ADVPOLL_USE_QUESTION),
       );
+      $form['advpoll']['advpoll_redirect'] = array(
+        '#type' => 'select',
+        '#title' => t('Redirect after vote submission'),
+        '#default_value' => variable_get('advpoll_redirect_'. $node_type, 'node'),
+        '#options' => array('node'=>'Poll','current'=>'Current Page'),
+        '#description' => t('The date the poll was created is used as start date for the default duration. This setting can be overridden on the poll edit page.'),
+      );
     }
   }
 }
@@ -1124,7 +1131,8 @@ function advpoll_votes_page($node) {
  */
 function _advpoll_can_view_results($node) {
   $view_results = variable_get('advpoll_view_results_'. $node->type, ADVPOLL_VIEW_RESULTS);
-  return user_access() || (!_advpoll_is_active($node)  // Node is closed
+  return (user_access('inspect all votes') && !$node->voted)
+        || (!_advpoll_is_active($node)  // Node is closed
         || ($node->voted && $view_results == 'aftervote') // User voted
         || ($view_results == 'always')); // All can view
 }
@@ -1133,7 +1141,7 @@ function _advpoll_can_view_results($node) {
  * Helper function to display 'cancel vote' button if user has voted.
  */
 function advpoll_cancel_form(&$form_state, $nid) {
-  $form['#action'] = url('advpoll/cancel/'. $nid);
+  $form['#action'] = url('advpoll/cancel/'. $nid, array('query'=>drupal_get_destination()));
   $form['submit'] = array('#type' => 'submit', '#value' => t('Cancel your vote'));
   return $form;
 }
@@ -1418,7 +1426,21 @@ function advpoll_cancel($node) {
   else {
     drupal_set_message(t('You are not allowed to cancel an invalid choice.'), 'error');
   }
-  drupal_goto('node/'. $node->nid);
+  $redirect =variable_get('advpoll_redirect_'. $node->type, 'node');
+  switch($redirect) {
+    case 'none':
+      break;
+    case 'current':
+      if (isset($_REQUEST['destination'])) {
+        $path = url($_REQUEST['destination']);
+      }
+      break;
+    default:
+       $path = url('node/'. $node->nid);
+    break;
+  }
+  drupal_set_message($path);
+  drupal_goto($path);
 }
 
 /**
diff --git modes/binary.inc modes/binary.inc
index 054d4d5..4d2b9b7 100644
--- modes/binary.inc
+++ modes/binary.inc
@@ -119,9 +119,17 @@ function advpoll_voting_binary_form(&$form_state, $node, $teaser, $page, $status
     $login_message = t('<a href="@login">Login</a> to vote in this poll.', array('@login' => url('user/login', array('query' => drupal_get_destination()))));
     $form['message']['#value'] = isset($user->uid) ? t('You are not eligible to vote in this poll.') : $login_message;
   }
-
-  $form['#action'] = url('node/'. $node->nid);
-  
+  $redirect =variable_get('advpoll_redirect_'. $node->type, 'node');
+  switch($redirect) {
+    case 'none':
+      break;
+    case 'current':
+      $path = isset($_GET['q']) ? $_GET['q'] : '';
+    break;
+    default:
+      $form['#action'] = url('node/'. $node->nid);
+    break;
+  }
   return $form;
 }
 
diff --git modes/ranking.inc modes/ranking.inc
index 0be7883..a435bad 100644
--- modes/ranking.inc
+++ modes/ranking.inc
@@ -155,7 +155,18 @@ function advpoll_voting_ranking_form(&$form_state, &$node, $teaser, $page, $stat
     $form['message']['#value'] = $user->uid ? t('You are not eligible to vote in this poll.') : $login_message;
   }
 
-  $form['#action'] = url('node/'. $node->nid);
+  $redirect =variable_get('advpoll_redirect_'. $node->type, 'node');
+  switch($redirect) {
+    case 'none':
+      break;
+    case 'current':
+      $path = isset($_GET['q']) ? $_GET['q'] : '';
+    break;
+    default:
+      $form['#action'] = url('node/'. $node->nid);
+    break;
+  }
+
   // Set form caching because we could have multiple forms on the page.
   // (from poll.module).
   $form['#cache'] = TRUE;
