Index: fivestar.module
===================================================================
--- fivestar.module	(revision 37)
+++ fivestar.module	(working copy)
@@ -826,7 +826,7 @@
           case 'below_static':
             $stars = variable_get('fivestar_stars_'. $node->type, 5);
             $node->content['fivestar_widget'] = array(
-              '#value' => fivestar_static('node', $node->nid, $node->type),
+              '#value' => fivestar_static('node', _get_translated_nid($node), $node->type),
               '#weight' => $position == 'above_static' ? -10 : 50,
             );
             break;
@@ -884,7 +884,13 @@
 }
 
 function fivestar_widget_form($node) {
-  return drupal_get_form('fivestar_form_node_'. $node->nid, 'node', $node->nid);
+  $id = _get_translated_nid($node);
+  return drupal_get_form('fivestar_form_node_'. $id, 'node', $id);
+}
+
+// Patch to always use the source node in a translation set, so all votes are tallied across translations
+function _get_translated_nid($node) {
+  return ($node->trid > 0) ? db_result(db_query("SELECT min(nid) FROM {i18n_node} WHERE trid = %d", $node->trid)) : $node->nid;
 }
 
 /**
