diff --git privatemsg.module privatemsg.module
index fbff9e5..7879365 100644
--- privatemsg.module
+++ privatemsg.module
@@ -778,6 +778,9 @@ function privatemsg_message_change_status($pmid, $status, $account = NULL) {
   }
   $query = "UPDATE {pm_index} SET is_new = %d WHERE mid = %d AND recipient = %d AND type IN ('user', 'hidden')";
   db_query($query, $status, $pmid, $account->uid);
+
+  // Reset the unread count static cache.
+  privatemsg_unread_count(NULL, TRUE);
 }
 
 /**
@@ -785,15 +788,20 @@ function privatemsg_message_change_status($pmid, $status, $account = NULL) {
  *
  * @param $account
  *   Specifiy the user for which the unread count should be loaded.
+ * @param $reset
+ *   Reset the static $counts variable.
  *
  * @ingroup api
  */
-function privatemsg_unread_count($account = NULL) {
+function privatemsg_unread_count($account = NULL, $reset = FALSE) {
   static $counts = array();
   if (!$account || $account->uid == 0) {
     global $user;
     $account = $user;
   }
+  if ($reset) {
+    $counts = array();
+  }
   if (!isset($counts[$account->uid])) {
     $query = _privatemsg_assemble_query('unread_count', $account);
     $counts[$account->uid] = db_result(db_query($query['query']));
@@ -2065,6 +2073,9 @@ function privatemsg_thread_change_status($threads, $status, $account = NULL) {
   $params = array_merge(array($status, $account->uid), $threads);
   db_query("UPDATE {pm_index} SET is_new = %d WHERE recipient = %d and type IN ('user', 'hidden') AND thread_id IN (" . db_placeholders($threads) . ')', $params);
 
+  // Reset the unread count static cache().
+  privatemsg_unread_count(NULL, TRUE);
+
   if ($status == PRIVATEMSG_UNREAD) {
     drupal_set_message(format_plural(count($threads), 'Marked 1 thread as unread.', 'Marked @count threads as unread.'));
   }
