diff --git flag.inc flag.inc
index c38e4e1..334c3c3 100644
--- flag.inc
+++ flag.inc
@@ -476,7 +476,7 @@ class flag_flag {
    * @private
    */
   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));
+    $count = db_result(db_query("SELECT COUNT(fc.fcid) FROM {flag_content} fc INNER JOIN {users} u ON fc.uid = u.uid AND u.status >= 1 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);
@@ -1199,6 +1199,15 @@ class flag_user extends flag_flag {
     return $passed;
   }
 
+  /**
+   * Returns the number of non-blocked users a user has flagged has flagged.
+   *
+   * For global flags, pass '0' as the user ID.
+   */
+  function get_user_count($uid) {
+    return db_result(db_query('SELECT COUNT(*) FROM {flag_content} fc INNER JOIN {users} u ON fc.content_id = u.uid AND u.status >= 1 WHERE fc.fid = %d AND fc.uid = %d', $this->fid, $uid));
+  }
+
 }
 
 /**
diff --git flag.module flag.module
index 0529554..f9f45e2 100644
--- flag.module
+++ flag.module
@@ -375,6 +375,9 @@ function flag_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  * Implementation of hook_user().
  */
 function flag_user($op, &$edit, &$account, $category = NULL) {
+  // Static variable used to determine if we need to update counts for all the
+  // all the users flagged content when their status (blocked/unblocked) changes
+  static $update_flags = FALSE;
   switch ($op) {
     case 'delete':
       // Remove flags by this user.
@@ -403,6 +406,22 @@ function flag_user($op, &$edit, &$account, $category = NULL) {
           '#attributes' => array('class' => 'flag-profile-' . $flag->name),
         );
       }
+      break;
+    case 'update':
+      // Check to see if the user's status changed.
+      $update_flags = (isset($edit['status']) && $edit['status'] != $account->status);
+      break;
+    case 'after_update':
+      if ($update_flags) {
+        // Select directly from the flag_content table where uid = $account->uid.
+        $flagged_content = db_query("SELECT fid, content_id FROM {flag_content} WHERE uid = %d", $account->uid);
+        while ($flagged = db_fetch_object($flagged_content)) {
+          // flag_get_flags() static caches, so this isn't too bad.
+          $flag = flag_get_flag(NULL, $flagged->fid);
+          $flag->_update_count($flagged->content_id);
+        }
+      }
+      break;
   }
 }
 
