Ok Having said this is trivial I have found a problem. What should notmuch do if you do something like notmuch show id:<some-id> and that message is marked with a deleted tag? To be consistent with the other cases (where a deleted message is in a matched thread) we might want to return the message with the not-matched flag set (eg in JSON). But my patch doesn't, as it never even sees the thread since it doesn't match. Looking at notmuch-show.c I think we should not apply the exclude tags to do_show_single, but usually should apply it to do_show. One solution which is simple and is at least close to right would be to get do_show to return the number of threads found. If this is zero then retry the query without the excludes (possible setting the match_flag to zero on each message since we know it does not match) This is not a completely correct solution as if you ask notmuch-show to show more than one thread it might threads which only contain deleted messages. I can't see other good possibilities without slowing down the normal path a lot (eg find all threads that match the original query and then apply the argument above). Any thoughts? Incidentally, is there something strange at the end of notmuch-show.c: I can't see how we could ever reach the last half dozen lines. Best wishes Mark