diff -urp privatemsg/privatemsg.module privatemsg_thread/privatemsg.module
--- privatemsg/privatemsg.module	2008-09-03 06:33:29.000000000 +0100
+++ privatemsg_thread/privatemsg.module	2008-09-04 05:29:15.636505700 +0100
@@ -389,21 +389,31 @@ function privatemsg_set_new_status($acco
 
 function privatemsg_view($pmid) {
   global $user;
+  $output = '';
   // Loads the message object.
-  $message = _privatemsg_load($pmid, $user->uid);
-  privatemsg_set_new_status($user, $pmid);
-  // Loads the list of recipients.
-  $query = _privatemsg_assemble_query('privatemsg_recipients', $message['thread_id']);
-  $result = db_query($query);
-  while ($row = db_fetch_object($result)) {
-    $message['recipients'][] = user_load($row->uid);
+  $conversation = db_query('SELECT DISTINCT(pmi.mid) FROM {pm_index} pmi, {pm_index} pmi1 WHERE pmi.thread_id = pmi1.thread_id AND pmi1.mid = %d ORDER BY pmi.mid ASC', $pmid);
+  $message_count = 0;
+  while ($result = db_fetch_array($conversation)) {
+    $pmid = $result['mid'];
+    $message = _privatemsg_load($pmid, $user->uid);
+    privatemsg_set_new_status($user, $pmid);
+    //loads the list of recipients
+    $query = _privatemsg_assemble_query('privatemsg_recipients', $message['thread_id']);
+    $result = db_query($query);
+    //while ($row = db_fetch_object($result)) {
+    //  $message['recipients'][] = user_load($row->uid); 
+    //}
+    if ($message_count == 0) {
+    $subject = $message['subject'];
+    drupal_set_title($subject);
+    }
+
+    $message['author'] = user_load($message['author']);
+    $output .= theme('privatemsg_view', $message);
+    $message_count++;
   }
 
-  $message['author'] = user_load($message['author']);
-//  $message['recipient'] = user_load($message['recipient']);
-//  $output =  '<pre>'. print_r($message, 1) .'</pre>';
-  $output = theme('privatemsg_to', $message);
-  return $output . theme('privatemsg_view', $message);
+  return $output;
 }
 
 function privatemsg_new(&$form_state, $user = NULL) {
@@ -510,6 +520,9 @@ function pm_send_validate($form, &$form_
   $message['subject']   = $form_values['subject'];
   $message['author']    = $user;
   $message['timestamp'] = time();
+  if (isset($form_values['thread_id']) && $form_values['thread_id']) {
+    $message['thread_id'] = $form_values['thread_id'];
+  }
 
 //  drupal_set_message('<pre>'. print_r('one', 1) .' </pre>');
 
@@ -601,7 +614,6 @@ function pm_send($form, &$form_state) {
   }
 
   drupal_set_message('A private message has been sent to '. $form_state['values']['recipient']);
-//  $form_state['rebuild'] = TRUE; // Rebuild this message for ease of use.
 }
 
 function privatemsg_render_preview($message) {
@@ -645,7 +657,7 @@ function pm_preview($form, &$form_state)
 function privatemsg_privatemsg_list_sent_alter(&$fragments, $account) {
   $fragments['primary_table'] = '{pm_message} pm';
 
-  $fragments['select'][]      = 'pm.mid as id';
+  $fragments['select'][]      = 'MAX(pm.mid) as id';
   $fragments['select'][]      = 'pm.subject';
   if ($account->uid != $GLOBALS['user']->uid) {
     $fragments['select'][] = 'pmi.author';
@@ -654,7 +666,8 @@ function privatemsg_privatemsg_list_sent
   $fragments['select'][] = 'pmi.timestamp';
   $fragments['inner_join'][]  = 'INNER JOIN {pm_index} pmi ON pm.mid = pmi.mid';
   $fragments['where'][]       = 'pmi.author = %d';
-  $order = 'pmi.timestamp';
+  $fragments['group_by'][]  = 'pmi.thread_id';
+  $order = 'MAX(pmi.timestamp)';
   $sort = 'desc';
   if (isset($_GET['order'])) {
     switch ($_GET['order']) {
@@ -680,7 +693,7 @@ function privatemsg_privatemsg_list_sent
 function privatemsg_privatemsg_list_alter(&$fragments, $account) {
   $fragments['primary_table'] = '{pm_message} pm';
 
-  $fragments['select'][]      = 'pmi.mid as id';
+  $fragments['select'][]      = 'MAX(pmi.mid) as id';
   $fragments['select'][]      = 'pm.subject';
   $fragments['select'][]      = 'pmi.author';
   if ($account->uid != $GLOBALS['user']->uid) {
@@ -690,6 +703,7 @@ function privatemsg_privatemsg_list_alte
   $fragments['select'][] = 'pmi.new';
   $fragments['inner_join'][]  = 'INNER JOIN {pm_index} pmi ON pm.mid = pmi.mid';
   $fragments['where'][]       = 'pmi.recipient = %d';
+  $fragments['group_by'][]  = 'pmi.thread_id';
   $order = 'pmi.new';
   $sort = 'desc';
   if (isset($_GET['order'])) {
@@ -705,11 +719,11 @@ function privatemsg_privatemsg_list_alte
         break;
       case ('received'):
       default:
-        $order = 'pmi.timestamp';
+        $order = 'MAX(pmi.timestamp)';
     }
     $sort = isset($_GET['sort']) && ($_GET['sort'] == 'asc' || $_GET['sort'] == 'desc') ? $_GET['sort'] : 'desc';
   }
-  $fragments['order_by'][]  = $order . ' ' . $sort . ', pmi.mid DESC';
+  $fragments['order_by'][]  = $order . ' ' . $sort . ', MAX(pmi.mid) DESC';
   $fragments['query_args'][]  = $account->uid;
 
 }
