diff --git a/advpoll.module b/advpoll.module
index 5891260..abd219e 100644
--- a/advpoll.module
+++ b/advpoll.module
@@ -149,6 +149,10 @@ function advpoll_permission() {
       'title' => t('Show vote results'),
       'description' => t('User may view poll results in cases where access to results is restricted by node settings.'),
     ),
+    'preview vote results' => array(
+      'title' => t('Preview vote results'),
+      'description' => t('User may preview poll results before voting.'),
+    ),
     'access electoral list' => array(
       'title' => t('Access electoral list'),
       'description' => t('User may see electoral lists associated with each poll.'),
@@ -579,6 +583,8 @@ function advpoll_choice_form($form, &$form_state, $values) {
   $options = array();
 
   $form['#id'] = 'advpoll-form-' . $values->nid;
+  $form['#prefix'] = '<div id="advpoll-form-' . $values->nid . '-wrapper">';
+  $form['#suffix'] = '</div>';
   for ($i = 0; $i < $count; $i++) {
     if (!$data->choices[$i]['write_in']) {
       $options[] = strip_tags($data->choices[$i]['choice']);
@@ -650,6 +656,39 @@ function advpoll_choice_form($form, &$form_state, $values) {
     '#value' => t('Vote'),
   );
 
+  $show_results = !empty($form_state['advpoll_form_results_toggle']);
+  if ($show_results) {
+    foreach (element_children($form) as $key) {
+      $form[$key]['#access'] = FALSE;
+    }
+    $form['results']['output']['#markup'] = advpoll_display_results($values->nid, $data);
+  }
+  $form['results']['toggle'] = array(
+    '#type' => 'submit',
+    '#submit' => array('advpoll_form_results_toggle_submit'),
+    '#ajax' => array(
+      'callback' => 'advpoll_form_results_toggle_callback',
+      'wrapper' => 'advpoll-form-' . $values->nid . '-wrapper',
+    ),
+    '#attributes' => array(
+      'class' => array(
+        'advpoll-toggle',
+        'advpoll-toggle-' . ($show_results ? 'poll' : 'results'),
+      ),
+    ),
+    '#value' => $show_results ? t('Show poll') : t('Show results'),
+    '#access' => !in_array($data->show_results, array('never', 'afterclose')) && user_access('preview vote results'),
+  );
+
+  return $form;
+}
+
+function advpoll_form_results_toggle_submit($form, &$form_state) {
+  $form_state['advpoll_form_results_toggle'] = empty($form_state['advpoll_form_results_toggle']);
+  $form_state['rebuild'] = TRUE;
+}
+
+function advpoll_form_results_toggle_callback($form, &$form_state) {
   return $form;
 }
 
