return ret;
 }
 
-static int
-_message_is_unread (notmuch_message_t *message)
-{
-    notmuch_tags_t *tags;
-    const char *tag;
-
-    for (tags = notmuch_message_get_tags (message);
-        notmuch_tags_has_more (tags);
-        notmuch_tags_advance (tags))
-    {
-       tag = notmuch_tags_get (tags);
-
-       if (strcmp (tag, "unread") == 0)
-           return 1;
-    }
-
-    return 0;
-}
-
 static int
 show_command (void *ctx, unused (int argc), unused (char *argv[]))
 {
     notmuch_messages_t *messages;
     notmuch_message_t *message;
     int ret = 0;
-    int unread;
 
     const char *headers[] = {
        "Subject", "From", "To", "Cc", "Bcc", "Date"
         notmuch_messages_advance (messages))
     {
        message = notmuch_messages_get (messages);
-       unread = _message_is_unread (message);
 
-       printf ("\fmessage{ ID: %s %s\n",
-               notmuch_message_get_message_id (message),
-               unread ? "unread" : "");
+       printf ("\fmessage{ ID: %s\n",
+               notmuch_message_get_message_id (message));
 
        printf ("\fheader{\n");
 
 
 (defvar notmuch-show-part-end-regexp         "\fpart}")
 (defvar notmuch-show-marker-regexp "\f\\(message\\|header\\|body\\|attachment\\|part\\)[{}].*$")
 
-(defvar notmuch-show-id-regexp "ID: \\([^ ]*\\)")
+(defvar notmuch-show-id-regexp "ID: \\(.*\\)$")
 (defvar notmuch-show-tags-regexp "(\\([^)]*\\))$")
 
 (defun notmuch-show-get-message-id ()
            (goto-char end)))
       (next-line))))
 
-(defun notmuch-show-markup-body (unread)
+(defun notmuch-show-markup-body ()
   (re-search-forward notmuch-show-body-begin-regexp)
   (next-line 1)
   (beginning-of-line)
   (let ((beg (point)))
     (re-search-forward notmuch-show-body-end-regexp)
-    (if (not unread)
-       (overlay-put (make-overlay beg (match-beginning 0))
-                    'invisible 'notmuch-show-body-read))
-    (notmuch-show-markup-citations-region beg (point))
-    ))
+    (let ((end (match-beginning 0)))
+      (if (not (member "unread" (notmuch-show-get-tags)))
+         (overlay-put (make-overlay beg end)
+                      'invisible 'notmuch-show-body-read))
+      (notmuch-show-markup-citations-region beg end))))
 
 (defun notmuch-show-markup-header ()
   (re-search-forward notmuch-show-header-begin-regexp)
 (defun notmuch-show-markup-message ()
   (if (re-search-forward notmuch-show-message-begin-regexp nil t)
       (progn
-       (let ((unread (looking-at ".*unread$")))
-         (notmuch-show-markup-header)
-         (notmuch-show-markup-body unread)))
+       (notmuch-show-markup-header)
+       (notmuch-show-markup-body))
     (goto-char (point-max))))
 
 (defun notmuch-show-hide-markers ()