diff --git a/flag.inc b/flag.inc
index 1eb474b..cc44783 100644
--- a/flag.inc
+++ b/flag.inc
@@ -725,18 +725,13 @@ class flag_flag {
       db_delete('flag_counts')->condition('fid', $this->fid)->condition('content_id', $content_id)->execute();
     }
     else {
-      $num_updated = db_update('flag_counts')->fields(array('count' => $count))
-        ->condition('fid', $this->fid)
-        ->condition('content_id', $content_id)
+      db_merge('flag_counts')
+        ->key(array('fid' => $this->fid, 'content_id' => $content_id))
+        ->fields(array(
+            'content_type' => $this->content_type,
+            'count' => $count,
+        ))
         ->execute();
-      if (!$num_updated) {
-        db_insert('flag_counts')->fields(array(
-          'fid' => $this->fid,
-          'content_type' => $this->content_type,
-          'content_id' => $content_id,
-          'count' => $count))
-          ->execute();
-      }
     }
   }
 
