diff --git a/core/includes/common.inc b/core/includes/common.inc
index 52ff5d9..e293bf5 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -6604,6 +6604,9 @@ function drupal_common_theme() {
     'table' => array(
       'variables' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE, 'empty' => ''),
     ),
+    'meter' => array(
+      'variables' => array('display_value' => NULL, 'form' => NULL, 'high' => NULL, 'low' => NULL, 'max' => NULL, 'min' => NULL, 'optimum' => NULL, 'value' => NULL, 'attributes' => array()),
+    ),
     'tablesort_indicator' => array(
       'variables' => array('style' => NULL),
     ),
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 68dd70b..732f21b 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2120,6 +2120,39 @@ function theme_progress_bar($variables) {
 }
 
 /**
+ * Returns HTML for an meter.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - display_value: The textual representation of the meter bar.
+ *   - form: A string specifying one or more forms to which the <meter> element
+ *     belongs separated by spaces.
+ *   - high: A number specifying the range that is considered to be a high
+ *     value.
+ *   - low: A number specifying the range that is considered to be a low value.
+ *   - max: A number specifying the maximum value of the range.
+ *   - min: A number specifying the minimum value of the range.
+ *   - optimum: A number specifying what value is the optimal value for the
+ *     gauge.
+ *   - value: A number specifying the current value of the gauge.
+ *   - attributes: Associative array of attributes to be placed in the meter
+ *     tag.
+ */
+function theme_meter($variables) {
+  $attributes = $variables['attributes'];
+
+  foreach (array('form', 'high', 'low', 'max', 'min', 'optimum', 'value') as $attrib) {
+    if (!is_null($variables[$attrib])) {
+      $attributes[$attrib] = $variables[$attrib];
+    }
+  }
+
+  $output = '<meter' . drupal_attributes($attributes) . '>' . $variables['display_value'] . '</meter>';
+
+  return $output;
+}
+
+/**
  * Returns HTML for an indentation div; used for drag and drop tables.
  *
  * @param $variables
diff --git a/core/modules/poll/poll-bar--block.tpl.php b/core/modules/poll/poll-bar--block.tpl.php
deleted file mode 100644
index 3b91afc..0000000
--- a/core/modules/poll/poll-bar--block.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the bar for a single choice in a
- * poll.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $votes: The number of votes for this choice
- * - $total_votes: The number of votes for this choice
- * - $percentage: The percentage of votes for this choice.
- * - $vote: The choice number of the current user's vote.
- * - $voted: Set to TRUE if the user voted for this choice.
- *
- * @see template_preprocess_poll_bar()
- */
-?>
-
-<div class="text"><?php print $title; ?></div>
-<div class="bar">
-  <div style="width: <?php print $percentage; ?>%;" class="foreground"></div>
-</div>
-<div class="percent">
-  <?php print $percentage; ?>%
-</div>
diff --git a/core/modules/poll/poll-bar.tpl.php b/core/modules/poll/poll-bar.tpl.php
deleted file mode 100644
index 9426ff5..0000000
--- a/core/modules/poll/poll-bar.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the bar for a single choice in a
- * poll.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $votes: The number of votes for this choice
- * - $total_votes: The number of votes for this choice
- * - $percentage: The percentage of votes for this choice.
- * - $vote: The choice number of the current user's vote.
- * - $voted: Set to TRUE if the user voted for this choice.
- *
- * @see template_preprocess_poll_bar()
- */
-?>
-
-<div class="text"><?php print $title; ?></div>
-<div class="bar">
-  <div style="width: <?php print $percentage; ?>%;" class="foreground"></div>
-</div>
-<div class="percent">
-  <?php print $percentage; ?>% (<?php print format_plural($votes, '1 vote', '@count votes'); ?>)
-</div>
diff --git a/core/modules/poll/poll-results--block.tpl.php b/core/modules/poll/poll-results--block.tpl.php
deleted file mode 100644
index f8387f5..0000000
--- a/core/modules/poll/poll-results--block.tpl.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * @file
- * Default theme implementation to display the poll results in a block.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $results: The results of the poll.
- * - $votes: The total results in the poll.
- * - $links: Links in the poll.
- * - $nid: The nid of the poll
- * - $cancel_form: A form to cancel the user's vote, if allowed.
- * - $raw_links: The raw array of links. Should be run through theme('links')
- *   if used.
- * - $vote: The choice number of the current user's vote.
- *
- * @see template_preprocess_poll_results()
- */
-?>
-
-<div class="poll">
-  <div class="title"><?php print $title ?></div>
-  <?php print $results ?>
-  <div class="total">
-    <?php print t('Total votes: @votes', array('@votes' => $votes)); ?>
-  </div>
-</div>
-<div class="links"><?php print $links; ?></div>
diff --git a/core/modules/poll/poll-results.tpl.php b/core/modules/poll/poll-results.tpl.php
index 5e14dec..9fdfbd6 100644
--- a/core/modules/poll/poll-results.tpl.php
+++ b/core/modules/poll/poll-results.tpl.php
@@ -17,7 +17,10 @@
  * @see template_preprocess_poll_results()
  */
 ?>
-<div class="poll">
+<article class="poll">
+  <?php if ($block): ?>
+    <h3 class="poll-title"><?php print $title; ?></h3>
+  <?php endif; ?>
   <?php print $results; ?>
   <div class="total">
     <?php print t('Total votes: @votes', array('@votes' => $votes)); ?>
@@ -25,4 +28,7 @@
   <?php if (!empty($cancel_form)): ?>
     <?php print $cancel_form; ?>
   <?php endif; ?>
-</div>
+</article>
+<?php if($block): ?>
+  <div class="links"><?php print $links; ?></div>
+<?php endif; ?>
diff --git a/core/modules/poll/poll-rtl.css b/core/modules/poll/poll-rtl.css
index 14d42e6..4a46526 100644
--- a/core/modules/poll/poll-rtl.css
+++ b/core/modules/poll/poll-rtl.css
@@ -5,6 +5,3 @@
 .poll .percent {
   text-align: left;
 }
-.poll .vote-form .choices {
-  text-align: right;
-}
diff --git a/core/modules/poll/poll-vote.tpl.php b/core/modules/poll/poll-vote.tpl.php
index 068ff7c..a749f91 100644
--- a/core/modules/poll/poll-vote.tpl.php
+++ b/core/modules/poll/poll-vote.tpl.php
@@ -14,16 +14,16 @@
  * @see template_preprocess_poll_vote()
  */
 ?>
-<div class="poll">
+<article class="poll">
   <div class="vote-form">
-    <div class="choices">
-      <?php if ($block): ?>
-        <div class="title"><?php print $title; ?></div>
-      <?php endif; ?>
-      <?php print $choice; ?>
-    </div>
+
+    <?php if ($block): ?>
+      <h3 class="poll-title"><?php print $title; ?></h3>
+    <?php endif; ?>
+    <?php print $choice; ?>
+
     <?php print $vote; ?>
   </div>
   <?php // This is the 'rest' of the form, in case items have been added. ?>
   <?php print $rest ?>
-</div>
+</article>
diff --git a/core/modules/poll/poll.css b/core/modules/poll/poll.css
index 8b04e38..8e71ac2 100644
--- a/core/modules/poll/poll.css
+++ b/core/modules/poll/poll.css
@@ -3,14 +3,7 @@
   overflow: hidden;
 }
 .poll .bar {
-  height: 1em;
-  margin: 1px 0;
-  background-color: #ddd;
-}
-.poll .bar .foreground {
-  background-color: #000;
-  height: 1em;
-  float: left; /* LTR */
+  width: 100%;
 }
 .poll .links {
   text-align: center;
@@ -24,12 +17,7 @@
 .poll .vote-form {
   text-align: center;
 }
-.poll .vote-form .choices {
-  text-align: left; /* LTR */
-  margin: 0 auto;
-  display: table;
-}
-.poll .vote-form .choices .title {
+.poll .vote-form .poll-title {
   font-weight: bold;
 }
 .node-form #edit-poll-more {
diff --git a/core/modules/poll/poll.module b/core/modules/poll/poll.module
index ec5452e..a1cffad 100644
--- a/core/modules/poll/poll.module
+++ b/core/modules/poll/poll.module
@@ -42,25 +42,8 @@ function poll_theme() {
       'template' => 'poll-results',
       'variables' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
     ),
-    'poll_bar' => array(
-      'template' => 'poll-bar',
-      'variables' => array('title' => NULL, 'votes' => NULL, 'total_votes' => NULL, 'vote' => NULL, 'block' => NULL),
-    ),
-  );
-  // The theme system automatically discovers the theme's functions and
-  // templates that implement more targeted "suggestions" of generic theme
-  // hooks. But suggestions implemented by a module must be explicitly
-  // registered.
-  $theme_hooks += array(
-    'poll_results__block' => array(
-      'template' => 'poll-results--block',
-      'variables' => $theme_hooks['poll_results']['variables'],
-    ),
-    'poll_bar__block' => array(
-      'template' => 'poll-bar--block',
-      'variables' => $theme_hooks['poll_bar']['variables'],
-    ),
   );
+
   return $theme_hooks;
 }
 
@@ -818,15 +801,23 @@ function poll_view_results($node, $view_mode, $block = FALSE) {
     }
   }
 
-  $poll_results = '';
+  $poll_results = array();
   foreach ($node->choice as $i => $choice) {
-    if (!empty($choice['chtext'])) {
-      $chvotes = isset($choice['chvotes']) ? $choice['chvotes'] : NULL;
-      $poll_results .= theme('poll_bar', array('title' => $choice['chtext'], 'votes' => $chvotes, 'total_votes' => $total_votes, 'vote' => isset($node->vote) && $node->vote == $i, 'block' => $block));
-    }
+    $chvotes = isset($choice['chvotes']) ? $choice['chvotes'] : NULL;
+    $percentage = round($chvotes * 100 / max($total_votes, 1));
+    $display_votes = $block ? '(' . format_plural($votes, '1 vote', '@count votes') . ')' : '';
+
+    $poll_results[] = array(
+      '#theme' => 'meter',
+      '#display_value' => $percentage . $display_votes,
+      '#min' => 0,
+      '#max' => $total_votes,
+      '#value' => $chvotes,
+      '#attributes' => array('class' => 'bar'),
+    );
   }
 
-  return theme('poll_results', array('raw_title' => $node->title, 'results' => $poll_results, 'votes' => $total_votes, 'raw_links' => isset($node->links) ? $node->links : array(), 'block' => $block, 'nid' => $node->nid, 'vote' => isset($node->vote) ? $node->vote : NULL));
+  return theme('poll_results', array('raw_title' => $node->title, 'results' => drupal_render($poll_results), 'votes' => $total_votes, 'raw_links' => isset($node->links) ? $node->links : array(), 'block' => $block, 'nid' => $node->nid, 'vote' => isset($node->vote) ? $node->vote : NULL));
 }
 
 
@@ -903,10 +894,6 @@ function template_preprocess_poll_results(&$variables) {
     $variables['cancel_form'] = drupal_render($elements);
   }
   $variables['title'] = check_plain($variables['raw_title']);
-
-  if ($variables['block']) {
-    $variables['theme_hook_suggestions'][] = 'poll_results__block';
-  }
 }
 
 /**
@@ -919,9 +906,6 @@ function template_preprocess_poll_results(&$variables) {
  * @see theme_poll_bar()
  */
 function template_preprocess_poll_bar(&$variables) {
-  if ($variables['block']) {
-    $variables['theme_hook_suggestions'][] = 'poll_bar__block';
-  }
   $variables['title'] = check_plain($variables['title']);
   $variables['percentage'] = round($variables['votes'] * 100 / max($variables['total_votes'], 1));
 }
