Index: flag.inc
===================================================================
--- flag.inc	(revision 526)
+++ flag.inc	(working copy)
@@ -477,10 +477,15 @@
    */
   function _update_count($content_id) {
     $count = db_result(db_query("SELECT COUNT(*) FROM {flag_content} WHERE fid = %d AND content_id = %d", $this->fid, $content_id));
-    $result = db_query("UPDATE {flag_counts} SET count = %d WHERE fid = %d AND content_id = %d", $count, $this->fid, $content_id);
-    if (!db_affected_rows()) {
-      db_query("INSERT INTO {flag_counts} (fid, content_type, content_id, count) VALUES (%d, '%s', %d, %d)", $this->fid, $this->content_type, $content_id, $count);
+    if ($count == 0) {
+      db_query("DELETE FROM {flag_counts} WHERE fid = %d AND content_id = %d", $this->fid, $content_id);
     }
+    else {
+      db_query("UPDATE {flag_counts} SET count = %d WHERE fid = %d AND content_id = %d", $count, $this->fid, $content_id);
+      if (!db_affected_rows()) {
+        db_query("INSERT INTO {flag_counts} (fid, content_type, content_id, count) VALUES (%d, '%s', %d, %d)", $this->fid, $this->content_type, $content_id, $count);
+      }
+    }
   }
 
   /**
Index: flag.install
===================================================================
--- flag.install	(revision 526)
+++ flag.install	(working copy)
@@ -433,6 +433,12 @@
   return $ret;
 }
 
+function flag_update_6004() {
+  $ret = array();
+  $ret[] = update_sql("DELETE FROM {flag_counts} WHERE count = 0");
+  return $ret;
+}
+
 // This is a replacement for update_sql(). The latter doesn't support placeholders.
 function _flag_update_sql($sql) {
   $args = func_get_args();
