           wants.push coauthors: regex
       when 'root:'
         if negate
-          wants.push root: $ne: token
-        else
-          wants.push root: token
+          wants.push $and: [
+            root: $ne: token
+          ,
+            _id: $ne: token
+          ]
+        else
+          wants.push $or: [
+            root: token
+          ,
+            _id: token
+          ]
       when 'is:', 'isnt:', 'not:'
         negate = not negate if colon == 'isnt:' or colon == 'not:'
         switch token

    if root == null
      "root message"
    else
      "in thread #{formatMessageSearch root}"
  else if _.isEqual keys, ['file']
    if _.isEqual query.file, null
      'not a file'

    parts = (formatParsedSearch part for part in query.$and)
    if (emojis = checkAllEmoji parts, group) and emojis.prefix == 'no '
      return "no emoji#{emojis.suffix}"
    if parts.length == 2 and
       _.isEqual(['root'], _.keys query.$and[0]) and
       _.isEqual(['_id'], _.keys query.$and[1]) and
       _.isEqual query.$and[0].root, query.$and[1]._id
      return parts[0].replace /strictly /, ''
    if parts.length > 1
      parts =
        for part in parts
