diff --git a/papersurfer.py b/papersurfer.py
index 434bd90bc1027d53ac40a68885b8ed96cda25abe..77a62289bc64f1cefa24a65076a83a62bc658bc6 100644
--- a/papersurfer.py
+++ b/papersurfer.py
@@ -79,7 +79,9 @@ class Papersurfer:
         self._screen = urwid.raw_display.Screen()
         self.size = self._screen.get_cols_rows()
 
-        palette = [('I say', 'default,bold', 'default', 'bold')]
+        palette = [
+            ('I say', 'default,bold', 'default', 'bold'),
+            ('needle', 'default, bold, underline', 'default', 'bold')]
         ask = urwid.Edit(('I say', u"Filter?\n"))
         exitbutton = urwid.Button(u'Exit')
         div = urwid.Divider(u'-')
@@ -88,9 +90,7 @@ class Papersurfer:
         papers = self.mtm.retrieve()
         body = []
         for paper in papers:
-            button = urwid.Button(f"{paper.message} ({paper.reporter})")
-            urwid.connect_signal(button, 'click',
-                                 partial(self.handle_paper, paper))
+            button = self.highlight(paper)
             body.append(urwid.AttrMap(button, None, focus_map='reversed'))
 
         self.listcontent = urwid.SimpleFocusListWalker(body)
@@ -104,12 +104,31 @@ class Papersurfer:
 
         urwid.MainLoop(top, palette).run()
 
+    def highlight(self, paper, needle=""):
+        """Create highlighted text entry."""
+        text_items = []
+        import re
+        needle = needle or "ßß"
+        msg = f"{paper.message} ({paper.reporter})"
+        needles = re.findall(needle, msg, flags=re.IGNORECASE)
+        hay = re.split(needle, msg, flags=re.IGNORECASE)
+        for i, item in enumerate(hay):
+            text_items.append(item)
+            if i < len(needles):
+                text_items.append(('needle', needles[i]))
+
+        button = urwid.Button(text_items)
+        urwid.connect_signal(button, 'click',
+                             partial(self.handle_paper, paper))
+
+        return button
+
     def onchange(self, _, new_edit_text):
         """Handle filter change."""
-        papers = [msg.message for msg in self.mtm.get_filtered(new_edit_text)]
+        papers = self.mtm.get_filtered(new_edit_text)
         self.listcontent.clear()
         for paper in papers:
-            button = urwid.Button(paper)
+            button = self.highlight(paper, new_edit_text)
             self.listcontent.append(urwid.AttrMap(button, None,
                                                   focus_map='reversed'))