diff --git a/privatemsg.install b/privatemsg.install
index ed83c20..9856a5b 100644
--- a/privatemsg.install
+++ b/privatemsg.install
@@ -52,6 +52,13 @@ function privatemsg_schema() {
         'not null' => TRUE,
         'default' => 'user'
       ),
+      'is_replied'     => array(
+        'description'   => 'Whether the user has replied to this message',
+        'type'          => 'int',
+        'default'       => PRIVATEMSG_NOT_REPLIED,
+        'not null'      => TRUE,
+        'unsigned'      => TRUE,
+      ),
     ),
     'primary key'     => array('mid', 'recipient', 'type'),
     'indexes'         => array(
@@ -336,3 +343,18 @@ function privatemsg_update_7006() {
   variable_set("date_format_privatemsg_current_year", 'M j');
   variable_set("date_format_privatemsg_years", 'n/j/y');
 }
+
+/**
+ * Add replied field to track whether anyone has replied to a message.
+ */
+function privatemsg_update_7200() {
+  db_add_field('pm_index', 'is_replied',
+    array(
+      'description'   => 'Whether the user has replied to this message',
+      'type'          => 'int',
+      'default'       => PRIVATEMSG_NOT_REPLIED,
+      'not null'      => TRUE,
+      'unsigned'      => TRUE,
+    )
+  );
+}
diff --git a/privatemsg.module b/privatemsg.module
index d8286f6..70306fb 100644
--- a/privatemsg.module
+++ b/privatemsg.module
@@ -17,6 +17,14 @@ define('PRIVATEMSG_UNREAD', 1);
  * Show unlimited messages in a thread.
  */
 define('PRIVATEMSG_UNLIMITED', 'unlimited');
+/**
+ * Status constant for unreplied messages.
+ */
+define('PRIVATEMSG_NOT_REPLIED', 0);
+/**
+ * Status constant for replied messages.
+ */
+define('PRIVATEMSG_REPLIED', 1);
 
 /**
  * Implements hook_permission().
@@ -1667,6 +1675,16 @@ function privatemsg_reply($thread_id, $body, $options = array()) {
       _privatemsg_handle_recipients($validated['message']->mid, $validated['message']->recipients, FALSE);
     }
   }
+
+  // If this is a reply, mark the last message appropriately.
+  if (isset($message->reply_to_mid)) {
+    db_update('pm_index')
+      ->fields(array('is_replied' => PRIVATEMSG_REPLIED))
+      ->condition('mid', $reply_to_mid)
+      ->condition('recipient', $author->uid)
+      ->execute();
+  }
+
   return $validated;
 }
 
diff --git a/privatemsg.pages.inc b/privatemsg.pages.inc
index 243e5d9..cc0b37b 100644
--- a/privatemsg.pages.inc
+++ b/privatemsg.pages.inc
@@ -394,6 +394,13 @@ function privatemsg_form_reply($form, &$form_state, $thread) {
     '#weight' => 20,
   );
 
+  // Include the mid of the message we're responding to so we can mark it as
+  // replied when the form is submitted.
+  $reply_to_mid = end($thread['messages'])->mid;
+  $form['reply_to_mid'] = array(
+    '#type' => 'value',
+    '#value' => $reply_to_mid,
+  );
   $form['thread_id'] = array(
     '#type' => 'value',
     '#value' => $thread['thread_id'],
