diff -urp privatemsg/privatemsg.module privatemsg_inbox/privatemsg.module
--- privatemsg/privatemsg.module	2009-03-09 15:28:24.129498500 +0000
+++ privatemsg_inbox/privatemsg.module	2009-03-09 16:34:51.493698500 +0000
@@ -86,22 +86,14 @@ function privatemsg_menu() {
     'access callback'  => 'privatemsg_user_access',
     'type'             => MENU_NORMAL_ITEM,
   );
-  $items['messages/inbox'] = array(
-    'title'            => 'All messages',
+  $items['messages/list'] = array(
+    'title'            => 'Messages',
     'page callback'    => 'drupal_get_form',
     'page arguments'   => array('privatemsg_list', 'list'),
     'access callback'  => 'privatemsg_user_access',
     'type'             => MENU_DEFAULT_LOCAL_TASK,
     'weight'           => -10,
   );
-  $items['messages/sent'] = array(
-    'title'            => 'Sent messages',
-    'page callback'    => 'drupal_get_form',
-    'page arguments'   => array('privatemsg_list', 'list_sent'),
-    'access callback'  => 'privatemsg_user_access',
-    'type'             => MENU_LOCAL_TASK,
-    'weight'           => -5,
-  );
   $items['messages/view/%privatemsg_thread'] = array(
     'title'            => 'Read message',
     'page callback'    => 'privatemsg_view',
@@ -270,7 +262,7 @@ function private_message_settings() {
   );
 
   $fields = array(
-    'author' => t('Author'),
+    'participants' => t('Participants'),
     'last_updated' => t('Last updated'),
     'thread_started' => t('Started'),
     'count' => t('Answers'),
@@ -280,7 +272,7 @@ function private_message_settings() {
     '#title' => t('Configure fields'),
     '#description' => t('Select which columns/fields should be displayed in the message listings.'),
     '#options' => $fields,
-    '#default_value' => variable_get('privatemsg_display_fields', array('author', 'last_updated')),
+    '#default_value' => variable_get('privatemsg_display_fields', array('participants', 'last_updated')),
   );
 
   $form['#submit'][] = 'private_message_settings_submit';
@@ -372,7 +364,7 @@ function privatemsg_preprocess_privatems
  *
  * @return array Form array
  */
-function privatemsg_list(&$form_state, $query_name = 'list', $uid = NULL) {
+function privatemsg_list(&$form_state, $argument = 'list', $uid = NULL) {
   global $user;
 
   // Setting default behavior...
@@ -389,7 +381,7 @@ function privatemsg_list(&$form_state, $
   }
   // By this point we have figured out for which user we are listing messages and now it is safe to use $account->uid in the listing query.
 
-  $query = _privatemsg_assemble_query($query_name, $account);
+  $query = _privatemsg_assemble_query('list', $account, $argument);
   $result = pager_query($query['query'], variable_get('privatemsg_per_page', 25), 0, $query['count']);
 
   $threads = array();
@@ -400,7 +392,7 @@ function privatemsg_list(&$form_state, $
     $threads[$row['thread_id']] = '';
   }
   if (empty($form['#data'])) {
-    $keys = array('subject', 'author', 'last_updated');
+    $keys = array('subject', 'participants', 'last_updated');
   }
   else {
     // Load the keys of the first row in data, we don't know the key
@@ -695,44 +687,10 @@ function pm_preview($form, &$form_state)
   $form_state['rebuild'] = TRUE; //this forces our form to be rebuilt instead of being submitted.
 }
 
-function privatemsg_sql_list_sent(&$fragments, $account) {
+function privatemsg_sql_list(&$fragments, $account, $argument = 'list') {
   $fragments['primary_table'] = '{pm_message} pm';
 
-  $fragments['select'][]      = 'pmi.thread_id';
-  $fragments['select'][]      = 'pm.subject';
-  if ($GLOBALS['db_type'] == 'pgsql') {
-    $fragments['select'][]      = "array_to_string(array(SELECT DISTINCT textin(int4out(pmia.uid))
-                                                         FROM {pm_index} pmia
-                                                         WHERE pmia.thread_id = pmi.thread_id AND pmia.uid <> %d), ',') AS recipient";
-
-  }
-  else {
-    $fragments['select'][]      = '(SELECT GROUP_CONCAT(DISTINCT pmia.uid SEPARATOR ",")
-                                                         FROM {pm_index} pmia
-                                                         WHERE pmia.thread_id = pmi.thread_id AND pmia.uid <> %d) AS recipient';
-
-  }
-  $fragments['query_args'][] = $account->uid;
-
-  $fragments['select'][]      = 'MAX(pm.timestamp) as last_updated';
-  $fragments['inner_join'][]  = 'INNER JOIN {pm_index} pmi ON pm.mid = pmi.mid';
-  $fragments['where'][]       = 'pmi.uid = %d';
-  $fragments['query_args'][]  = $account->uid;
-  $fragments['where'][]       = 'pm.author = %d';
-  $fragments['query_args'][]  = $account->uid;
-  $fragments['where'][]       = 'pmi.deleted = 0';
-  $fragments['group_by'][]  = 'pmi.thread_id';
-  $fragments['group_by'][]  = 'pm.subject';
-
-  // We can use tablesort_sql now, but we don't need the ORDER BY part of the query.
-  $order_by = drupal_substr(tablesort_sql(_privatemsg_list_headers( FALSE, array('subject', 'recipient', 'last_updated'))), 9);
-  $fragments['order_by'][]  = $order_by;
-}
-
-function privatemsg_sql_list(&$fragments, $account) {
-  $fragments['primary_table'] = '{pm_message} pm';
-
-  $fields = array_filter(variable_get('privatemsg_display_fields', array('author', 'last_updated')));
+  $fields = array_filter(variable_get('privatemsg_display_fields', array('participants', 'last_updated')));
 
   $fragments['select'][]      = 'pmi.thread_id';
   $fragments['select'][]      = 'MIN(pm.subject) as subject';
@@ -740,16 +698,20 @@ function privatemsg_sql_list(&$fragments
     $fragments['select'][]      = 'COUNT(pmi.thread_id) as count';
   }
 
-  if (in_array('author', $fields)) {
+  if (in_array('participants', $fields)) {
     if ($GLOBALS['db_type'] == 'pgsql') {
-      $fragments['select'][]      = "array_to_string(array(SELECT DISTINCT textin(int4out(pma.author))
-                                                           FROM {pm_message} pma
-                                                           INNER JOIN pm_index pmia ON pma.mid = pmia.mid
-                                                           WHERE pmia.thread_id = pmi.thread_id),',') AS author";
+      $fragments['select'][]      = "array_to_string(array(SELECT DISTINCT textin(int4out(pmia.uid))
+                                                           FROM {pm_index} pmia
+                                                           WHERE pmia.thread_id = pmi.thread_id AND pmia.uid <> %d), ',') AS participants";
+
     }
     else {
-      $fragments['select'][]      = 'GROUP_CONCAT(DISTINCT author SEPARATOR ",") as author';
+      $fragments['select'][]      = '(SELECT GROUP_CONCAT(DISTINCT pmia.uid SEPARATOR ",")
+                                                           FROM {pm_index} pmia
+                                                           WHERE pmia.thread_id = pmi.thread_id AND pmia.uid <> %d) AS participants';
+
     }
+    $fragments['query_args'][] = $account->uid;
   }
   if (in_array('last_updated', $fields)) {
     $fragments['select'][]      = 'MAX(pm.timestamp) as last_updated';
diff -urp privatemsg/privatemsg.theme.inc privatemsg_inbox/privatemsg.theme.inc
--- privatemsg/privatemsg.theme.inc	2009-03-09 15:28:24.160698500 +0000
+++ privatemsg_inbox/privatemsg.theme.inc	2009-03-09 16:41:52.087898500 +0000
@@ -9,19 +9,11 @@
 function theme_privatemsg_list_field($thread) {
 }
 
-function phptemplate_privatemsg_list_field__author($thread) {
-  $authors = _privatemsg_generate_user_array($thread['author']);
+function phptemplate_privatemsg_list_field__participants($thread) {
+  $participants = _privatemsg_generate_user_array($thread['participants']);
   $field = array();
-  $field['data'] = _privatemsg_format_participants($authors, 3, TRUE);
-  $field['class'] = 'privatemsg-list-author';
-  return $field;
-}
-
-function phptemplate_privatemsg_list_field__recipient($thread) {
-  $recipients = _privatemsg_generate_user_array($thread['recipient']);
-  $field = array();
-  $field['data'] = _privatemsg_format_participants($recipients, 3, TRUE);
-  $field['class'] = 'privatemsg-list-recipient';
+  $field['data'] = _privatemsg_format_participants($participants, 3, TRUE);
+  $field['class'] = 'privatemsg-list-participants';
   return $field;
 }
 
@@ -76,20 +68,11 @@ function phptemplate_privatemsg_list_hea
   );
 }
 
-function phptemplate_privatemsg_list_header__author() {
-  return array(
-      'data'    => t('Authors'),
-      'key'     => 'author',
-      'class'   => 'privatemsg-header-authors',
-      '#weight' => -30,
-  );
-}
-
-function phptemplate_privatemsg_list_header__recipient() {
+function phptemplate_privatemsg_list_header__participants() {
   return array(
-      'data'    => t('Recipients'),
-      'key'     => 'recipient',
-      'class'   => 'privatemsg-header-recipients',
+      'data'    => t('Participants'),
+      'key'     => 'participants',
+      'class'   => 'privatemsg-header-participants',
       '#weight' => -30,
   );
 }
diff -urp privatemsg/privatemsg_filter/privatemsg_filter.module privatemsg_inbox/privatemsg_filter/privatemsg_filter.module
--- privatemsg/privatemsg_filter/privatemsg_filter.module	2009-03-09 15:28:24.191898500 +0000
+++ privatemsg_inbox/privatemsg_filter/privatemsg_filter.module	2009-03-09 16:20:21.647098500 +0000
@@ -36,6 +36,30 @@ function privatemsg_filter_menu() {
     'access arguments' => array('administer privatemsg settings'),
     'type'             => MENU_LOCAL_TASK,
   );
+  $items['messages/list/all'] = array(
+    'title'            => 'All messages',
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('privatemsg_list', 'list'),
+    'access callback'  => 'privatemsg_user_access',
+    'type'             => MENU_DEFAULT_LOCAL_TASK,
+    'weight'           => -10,
+  );
+  $items['messages/list/inbox'] = array(
+    'title'            => 'Inbox',
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('privatemsg_list', 'inbox'),
+    'access callback'  => 'privatemsg_user_access',
+    'type'             => MENU_LOCAL_TASK,
+    'weight'           => -10,
+  );
+  $items['messages/list/sent'] = array(
+    'title'            => 'Sent Messages',
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('privatemsg_list', 'sent'),
+    'access callback'  => 'privatemsg_user_access',
+    'type'             => MENU_LOCAL_TASK,
+    'weight'           => -10,
+  );
   return $items;
 }
 
@@ -267,7 +291,7 @@ function privatemsg_filter_dropdown(&$fo
 
   $form['filter']['author'] = array(
       '#type' => 'select',
-      '#title' => t('Authors'),
+      '#title' => t('Users'),
       '#options' => privatemsg_filter_get_author_data($account),
       '#multiple' => TRUE,
       '#size' => 5,
@@ -347,14 +371,14 @@ function privatemsg_filter_dropdown_subm
       $_SESSION['privatemsg_filter'] = $filter;
       break;
     case t('Filter'):
-      drupal_goto('messages', privatemsg_filter_create_get_query($form_state['values']));
+      drupal_goto($_GET['q'], privatemsg_filter_create_get_query($form_state['values']));
       return;
       break;
     case t('Reset'):
       $_SESSION['privatemsg_filter'] = array();
       break;
   }
-  $form_state['redirect'] = 'messages';
+  $form_state['redirect'] = $_GET['q'];
 }
 
 function privatemsg_filter_create_get_query($filter)
@@ -415,12 +439,22 @@ function privatemsg_filter_form_privatem
 /**
  * Hook into the query builder to add the tagging info to the correct query
  */
-function privatemsg_filter_privatemsg_sql_list_alter(&$fragments, $account) {
+function privatemsg_filter_privatemsg_sql_list_alter(&$fragments, $account, $argument) {
+
+  // Check if its a filtered view.
+  if ($argument == 'sent') {
+    $fragments['where'][]       = "pm.author = %d";
+    $fragments['query_args'][]   = $account->uid;
+  }
+  if ($argument == 'inbox') {
+    $fragments['where'][]       = "pm.author <> %d";
+    $fragments['query_args'][]   = $account->uid;
+  }
+
   // Filter the message listing by any set tags.
   if ($filter = privatemsg_filter_get_filter($account)) {
-
+    $count = 0;
     if (isset($filter['tags']) && !empty($filter['tags'])) {
-      $count = 0;
       foreach ($filter['tags'] as $tag) {
         $fragments['inner_join'][]  = "INNER JOIN {pm_tags_index} pmti$count ON (pmti$count.thread_id = pmi.thread_id AND pmti$count.uid = pmi.uid)";
         $fragments['where'][]       = "pmti$count.tag_id = %d";
@@ -430,10 +464,9 @@ function privatemsg_filter_privatemsg_sq
     }
 
     if (isset($filter['author']) && !empty($filter['author'])) {
-      $count = 0;
       foreach ($filter['author'] as $author) {
-        $fragments['inner_join'][]  = "INNER JOIN {users} u$count ON (u$count.uid = pm.author)";
-        $fragments['where'][]       = "u$count.uid = %d";
+        $fragments['inner_join'][]  = "INNER JOIN {pm_index} pmi$count ON (pmi$count.mid = pm.mid)";
+        $fragments['where'][]       = "pmi$count.uid = %d";
         $fragments['query_args'][]   = $author;
         $count++;
       }
