diff --git a/fivestar.module b/fivestar.module
index 1b9db2c..82f4b5d 100644
--- a/fivestar.module
+++ b/fivestar.module
@@ -60,6 +60,9 @@ function fivestar_microdata_suggestions() {
     'average_rating' => array(
       '#itemprop' => array('ratingValue'),
     ),
+    'rating_count' => array(
+      '#itemprop' => array('ratingCount'),
+    ),
   );
 
   return $mappings;
diff --git a/includes/fivestar.field.inc b/includes/fivestar.field.inc
index 53cda56..671b719 100644
--- a/includes/fivestar.field.inc
+++ b/includes/fivestar.field.inc
@@ -727,6 +727,11 @@ function fivestar_property_info_callback(&$info, $entity_type, $field, $instance
       'type' => 'text',
       'microdata' => TRUE,
     ),
+    'rating_count' => array(
+      'label' => t('Rating count'),
+      'type' => 'text',
+      'microdata' => TRUE,
+    ),
   );
 }
 
diff --git a/includes/fivestar.theme.inc b/includes/fivestar.theme.inc
index 8038abc..0f14349 100644
--- a/includes/fivestar.theme.inc
+++ b/includes/fivestar.theme.inc
@@ -245,6 +245,7 @@ function theme_fivestar_summary($variables) {
   $output = '';
   $div_class = '';
   $average_rating_microdata = '';
+  $rating_count_microdata = '';
   if (isset($user_rating)) {
     $div_class = isset($votes) ? 'user-count' : 'user';
     $user_stars = round(($user_rating * $stars) / 100, 1);
@@ -254,27 +255,44 @@ function theme_fivestar_summary($variables) {
     $output .= ' ';
   }
   if (isset($average_rating)) {
-    $div_class = isset($votes) ? 'average-count' : 'average';
+    if (isset($user_rating)) {
+      $div_class = 'combo';
+    }
+    else {
+      $div_class = isset($votes) ? 'average-count' : 'average';
+    }
+
     $average_stars = round(($average_rating * $stars) / 100, 1);
     if (!empty($microdata['average_rating']['#attributes'])) {
       $average_rating_microdata = drupal_attributes($microdata['average_rating']['#attributes']);
     }
-    $output .= '<span class="average-rating">'. t('Average: <span !microdata>!stars</span>', array('!stars' => $average_stars, '!microdata' => $average_rating_microdata)) .'</span>';
-  }
-  if (isset($user_rating) && isset($average_rating)) {
-    $div_class = 'combo';
+    $output .= '<span class="average-rating">' . t('Average: !stars',
+      array('!stars' => "<span $average_rating_microdata>$average_stars</span>")) . '</span>';
   }
 
-  if (isset($votes) && !(isset($user_rating) || isset($average_rating))) {
-    $output .= ' <span class="total-votes">'. format_plural($votes, '<span>@count</span> vote', '<span>@count</span> votes') .'</span>';
-    $div_class = 'count';
-  }
-  elseif (isset($votes)) {
-    $output .= ' <span class="total-votes">('. format_plural($votes, '<span>@count</span> vote', '<span>@count</span> votes') .')</span>';
-  }
+  if (isset($votes)) {
+    if (!isset($user_rating) && !isset($average_rating)) {
+      $div_class = 'count';
+    }
 
-  if ($votes === 0) {
-    $output = '<span class="empty">'. t('No votes yet') .'</span>';
+    if ($votes === 0) {
+      $output = '<span class="empty">'. t('No votes yet') .'</span>';
+    }
+    else {
+      if (!empty($microdata['rating_count']['#attributes'])) {
+        $rating_count_microdata = drupal_attributes($microdata['rating_count']['#attributes']);
+      }
+      // We don't directly substitute $votes (i.e. use '@count') in format_plural,
+      // because it has a span around it which is not translatable.
+      $votes_str = format_plural($votes, '!cnt vote', '!cnt votes', array(
+        '!cnt' => '<span ' . $rating_count_microdata . '>' . intval($votes) . '</span>'));
+      if (isset($user_rating) || isset($average_rating)) {
+        $output .= ' <span class="total-votes">(' . $votes_str . ')</span>';
+      }
+      else {
+        $output .= ' <span class="total-votes">' . $votes_str . '</span>';
+      }
+    }
   }
 
   $output = '<div class="fivestar-summary fivestar-summary-'. $div_class . '">'. $output .'</div>';
