diff -urp privatemsg/privatemsg.install privatemsg_delete/privatemsg.install
--- privatemsg/privatemsg.install	2008-07-27 02:42:01.000000000 +0100
+++ privatemsg_delete/privatemsg.install	2008-09-09 03:54:26.255901700 +0100
@@ -42,6 +42,22 @@ function privatemsg_schema() {
         'not null'      => TRUE,
         'unsigned'      => TRUE,
       ),
+      'author_del' => array(
+        'description'   => t('Whether the author has deleted this message'),
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'size' => 'tiny',
+        'default' => 0
+      ),
+      'recipient_del' => array(
+        'description'   => t('Whether the recipient has deleted this message'),
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'size' => 'tiny',
+        'default' => 0
+      ),
     ),
     'indexes'         => array(
       '`mid`'               => array('`mid`'),
diff -urp privatemsg/privatemsg.module privatemsg_delete/privatemsg.module
--- privatemsg/privatemsg.module	2008-09-09 03:54:09.111501700 +0100
+++ privatemsg_delete/privatemsg.module	2008-09-09 03:53:48.049901700 +0100
@@ -674,6 +674,7 @@ 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';
+  $fragments['where'][]       = 'pmi.author_del = 0';
   $fragments['group_by'][]  = 'pmi.thread_id';
   $order = 'MAX(pmi.timestamp)';
   $sort = 'desc';
@@ -712,6 +713,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['where'][]       = 'pmi.recipient_del = 0';
   $fragments['group_by'][]  = 'pmi.thread_id';
   $order = 'pmi.new';
   $sort = 'desc';
@@ -758,12 +760,17 @@ function privatemsg_privatemsg_messages_
   $fragments['select'][]      = 'DISTINCT(pmi.mid) as mid';
   $fragments['where'][]       = 'pmi.thread_id = %d';
   $fragments['query_args'][]  = $thread_id;
-  if (!(user_access('read all private messages'))) {
+  if (user_access('read all private messages')) {
+  $fragments['where'][]       = 'pmi.author_del = 0 OR pmi.recipient_del = 0';
+  }
+  else {
     $fragments['where'][]       = 'pmi.author = %d';
+    $fragments['where'][]       = 'pmi.author_del = 0';
     $fragments['query_args'][]  = $uid;
     $fragments['union_select'][]      = 'DISTINCT(pmi.mid) as mid';
     $fragments['union_where'][]       = 'pmi.thread_id = %d';
     $fragments['union_where'][]       = 'pmi.recipient = %d';
+    $fragments['union_where'][]       = 'pmi.recipient_del = 0';
     $fragments['query_args'][]  = $thread_id;
     $fragments['query_args'][]  = $uid;
   }
