diff --git a/flag.module b/flag.module
index e3aad88..a9ada29 100644
--- a/flag.module
+++ b/flag.module
@@ -872,10 +872,18 @@ function flag_flag_access_multiple($flag, $content_ids, $account) {
  *   The number of flaggings allowed. Any flaggings beyond that will be trimmed.
  */
 function flag_trim_flag($flag, $account, $cutoff_size) {
-  $result = db_query("SELECT * FROM {flag_content} WHERE fid = %d AND (uid = %d OR uid = 0) ORDER BY timestamp DESC", $flag->fid, $account->uid);
-  $i = 1;
+  if ($flag->content_type == 'node' && module_exists('translation_helpers') && empty($flag->i18n)) {
+    $result = db_query("SELECT flag_content.content_id, node.language AS language FROM {flag_content} INNER JOIN {node} ON flag_content.content_id = node.nid WHERE fid = %d AND (flag_content.uid = %d OR flag_content.uid = 0) ORDER BY timestamp DESC", $flag->fid, $account->uid);
+  }
+  else {
+    $result = db_query("SELECT flag_content.content_id, 1 AS language FROM {flag_content} WHERE fid = %d AND (uid = %d OR uid = 0) ORDER BY timestamp DESC", $flag->fid, $account->uid);
+  }
+  $i = array();
   while ($row = db_fetch_object($result)) {
-    if ($i++ > $cutoff_size) {
+    if (!isset($i[$row->language])) {
+      $i[$row->language] = 1;
+    }
+    if ($i[$row->language]++ > $cutoff_size) {
       flag('unflag', $flag->name, $row->content_id, $account);
     }
   }
