diff --git a/papersurfer/papersurfer.py b/papersurfer/papersurfer.py
index 9de8f93ef6aab49173e470df02049f0d9f382da7..4db8226bf77d3983c9aafb2891a8ebce9cc6ec41 100644
--- a/papersurfer/papersurfer.py
+++ b/papersurfer/papersurfer.py
@@ -15,6 +15,7 @@ import re
 from functools import partial
 import json
 import time
+import os
 import requests
 import mattermostdriver
 import urwid
@@ -194,35 +195,58 @@ class Mattermost:
                 or needle.lower() in m.reporter.lower()]
 
 
-class PrettyButton(urwid.Button):
-    button_left = urwid.Text('[')
-    button_right = urwid.Text(']')
+class PrettyButton(urwid.WidgetWrap):
+    def __init__(self, label, on_press=None, user_data=None):
+        self.text = urwid.Text("")
+        self.set_label(label)
+        self.widget = urwid.AttrMap(self.text, '', 'highlight')
 
-    def __init__(self, *args, onclick=lambda *x: x, **kwargs):
-        super(self.__class__, self).__init__(*args, **kwargs)
-        urwid.connect_signal(self, 'click', onclick)
+        # use a hidden button for evt handling
+        self._hidden_btn = urwid.Button(f"hidden {self.label}",
+                                        on_press, user_data)
+
+        super(self.__class__, self).__init__(self.widget)
+
+    def selectable(self):
+        return True
+
+    def keypress(self, *args, **kw):
+        return self._hidden_btn.keypress(*args, **kw)
+
+    def mouse_event(self, *args, **kw):
+        return self._hidden_btn.mouse_event(*args, **kw)
+
+    def get_label(self):
+        return self.label
+
+    def set_label(self, label):
+        self.label = label
+        self.text.set_text(f"[ {label} ]")
 
 
 class Papersurfer:
     """Provide UI and interface with mattermost class."""
+
+    _palette = [
+        ('button', 'default,bold', 'default'),
+        ('I say', 'default,bold', 'default', 'bold'),
+        ('needle', 'default, bold, underline', 'default', 'bold'),
+        ('highlight', 'black', 'dark blue'),
+        ('banner', 'black', 'light gray'),
+        ('selectable', 'white', 'black'),
+        ('focus', 'black', 'light gray'),
+        ('papertitle', 'default,bold', 'default', 'bold')
+    ]
+
     def __init__(self, url, channel, username, password):
         self._screen = urwid.raw_display.Screen()
         self.size = self._screen.get_cols_rows()
         self.filter = ""
 
-        palette = [
-            ('I say', 'default,bold', 'default', 'bold'),
-            ('needle', 'default, bold, underline', 'default', 'bold'),
-            ('highlight', 'black', 'dark blue'),
-            ('banner', 'black', 'light gray'),
-            ('selectable', 'white', 'black'),
-            ('focus', 'black', 'light gray'),
-            ('papertitle', 'default,bold', 'default', 'bold')
-        ]
         ask = urwid.Edit(('I say', u"Filter?\n"))
-        exitbutton = PrettyButton(u'Exit', onclick=self.on_exit_clicked)
+        exitbutton = PrettyButton(u'Exit', on_press=self.on_exit_clicked)
         self.exportbutton = PrettyButton(u'Export filtered list as bibtex',
-                                         onclick=self.on_export_clicked)
+                                         on_press=self.on_export_clicked)
         div = urwid.Divider(u'-')
 
         self.mtm = Mattermost(url, channel, username, password)
@@ -251,7 +275,7 @@ class Papersurfer:
 
         urwid.connect_signal(ask, 'change', self.onchange)
         self.main = pile
-        self.mainloop = urwid.MainLoop(self._over, palette)
+        self.mainloop = urwid.MainLoop(self._over, self._palette)
         self.mainloop.set_alarm_in(.1, self.load_list)
         self.mainloop.run()
 
@@ -294,8 +318,7 @@ class Papersurfer:
         body = urwid.LineBox(body_padding)
 
         # Footer
-        footer = urwid.Button('Okay', self.close_details)
-        footer = urwid.AttrWrap(footer, 'selectable', 'focus')
+        footer = PrettyButton('Okay', self.close_details)
         footer = urwid.GridFlow([footer], 8, 1, 1, 'center')
 
         # Layout
@@ -322,13 +345,13 @@ class Papersurfer:
 
         title = urwid.Text(text_items)
         discuss_button = PrettyButton("Open Discussion",
-                                      onclick=partial(self.h_open_discussion,
-                                                      paper))
+                                      on_press=partial(self.h_open_discussion,
+                                                       paper))
         doi_button = PrettyButton("Open DOI",
-                                  onclick=partial(self.h_open_doi, paper))
+                                  on_press=partial(self.h_open_doi, paper))
         details_button = PrettyButton("Show details",
-                                      onclick=partial(self.h_show_details,
-                                                      paper))
+                                      on_press=partial(self.h_show_details,
+                                                       paper))
 
         button_bar = urwid.Columns([
             discuss_button, doi_button, details_button])
@@ -419,7 +442,6 @@ def get_config_file_paths():
     <class 'list'>
     """
 
-    import os
     env = os.environ
     xdg_home = None
     if 'XDG_CONFIG_HOME' in env: