diff -urp --strip-trailing-cr ../privatemsg/privatemsg.module ./privatemsg.module
--- ../privatemsg/privatemsg.module	2009-06-08 16:27:53.000000000 +0200
+++ ./privatemsg.module	2009-06-13 14:32:46.000000000 +0200
@@ -826,7 +826,7 @@ function privatemsg_sql_list(&$fragments
   $fragments['select'][]      = 'MAX(pmi.is_new) as is_new';
 
   if (in_array('count', $fields)) {
-    $fragments['select'][]      = 'COUNT(pmi.thread_id) as count';
+    $fragments['select'][]      = 'COUNT(DISTINCT pmi.mid) as count';
   }
   if (in_array('participants', $fields)) {
     // Query for a string with uid's, for example "1,6,7". This needs a subquery on PostgreSQL.
@@ -870,17 +870,18 @@ function privatemsg_sql_load(&$fragments
   $fragments['primary_table'] = '{pm_message} pm'; // Our primary table
 
   $fragments['select'][]      = "pm.mid";
-  $fragments['select'][]      = "pm.author";
-  $fragments['select'][]      = "pm.subject";
-  $fragments['select'][]      = "pm.body";
-  $fragments['select'][]      = "pm.timestamp";
-  $fragments['select'][]      = "pmi.is_new";
+  $fragments['select'][]      = "MAX(pm.author) as author";
+  $fragments['select'][]      = "MAX(pm.subject) as subject";
+  $fragments['select'][]      = "MAX(pm.body) as body";
+  $fragments['select'][]      = "MAX(pm.timestamp) as timestamp";
+  $fragments['select'][]      = "MAX(pmi.is_new) as is_new";
 
   $fragments['inner_join'][]  = 'INNER JOIN {pm_index} pmi ON pm.mid = pmi.mid';
   $fragments['where'][]       = 'pmi.mid = %d';
   $fragments['query_args']['where'][]  = $pmid;
   $fragments['where'][]       = 'pmi.uid = %d';
   $fragments['query_args']['where'][]  = $account->uid;
+  $fragments['group_by'][]    = 'pmi.mid, pmi.uid';
 }
 /**
  * Query definition to load messages of one or multiple threads.
