diff --git a/gertty/app.py b/gertty/app.py
index d5f66bd..29abf32 100644
--- a/gertty/app.py
+++ b/gertty/app.py
@@ -212,7 +212,7 @@ class App(object):
         if hasattr(widget, 'title'):
             self.status.update(title=widget.title)
         self.loop.widget = widget
-        self.refresh()
+        self.refresh(force=True)
 
     def findChangeList(self):
         for widget in reversed(self.screens):
@@ -226,17 +226,21 @@ class App(object):
             widget = self.screens.pop()
             self.loop.widget = widget
 
-    def refresh(self, data=None):
+    def refresh(self, data=None, force=False):
         self.status.refresh()
         widget = self.loop.widget
         while isinstance(widget, urwid.Overlay):
             widget = widget.contents[0][0]
+        interested = force
         try:
             while True:
                 event = self.sync.result_queue.get(0)
-                widget.refresh(event)
+                if widget.interested(event):
+                    interested = True
         except Queue.Empty:
             pass
+        if interested:
+            widget.refresh()
 
     def popup(self, widget,
               relative_width=50, relative_height=25,
diff --git a/gertty/view/change.py b/gertty/view/change.py
index b107452..39359dd 100644
--- a/gertty/view/change.py
+++ b/gertty/view/change.py
@@ -502,15 +502,18 @@ class ChangeView(urwid.WidgetWrap):
             if not succeeded:
                 raise gertty.view.DisplayError("Git commits not present in local repository")
 
-    def refresh(self, event=None):
-        if event and not ((isinstance(event, sync.ChangeAddedEvent) and
-                           self.change_key in event.related_change_keys)
-                          or
-                          (isinstance(event, sync.ChangeUpdatedEvent) and
-                           self.change_key in event.related_change_keys)):
+    def interested(self, event):
+        if not ((isinstance(event, sync.ChangeAddedEvent) and
+                 self.change_key in event.related_change_keys)
+                or
+                (isinstance(event, sync.ChangeUpdatedEvent) and
+                 self.change_key in event.related_change_keys)):
             self.log.debug("Ignoring refresh change due to event %s" % (event,))
-            return
+            return False
         self.log.debug("Refreshing change due to event %s" % (event,))
+        return True
+
+    def refresh(self):
         change_info = []
         with self.app.db.getSession() as session:
             change = session.getChange(self.change_key)
diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py
index 7870ed6..7f5d74c 100644
--- a/gertty/view/change_list.py
+++ b/gertty/view/change_list.py
@@ -142,20 +142,22 @@ class ChangeListView(urwid.WidgetWrap):
         self._w.contents.append((self.listbox, ('weight', 1)))
         self._w.set_focus(3)
 
-    def refresh(self, event=None):
-        if event and not ((self.project_key is not None and
-                           isinstance(event, sync.ChangeAddedEvent) and
-                           self.project_key == event.project_key)
-                          or
-                          (self.project_key is None and
-                           isinstance(event, sync.ChangeAddedEvent))
-                          or
-                          (isinstance(event, sync.ChangeUpdatedEvent) and
-                           event.change_key in self.change_rows.keys())):
+    def interested(self, event):
+        if not ((self.project_key is not None and
+                 isinstance(event, sync.ChangeAddedEvent) and
+                 self.project_key == event.project_key)
+                or
+                (self.project_key is None and
+                 isinstance(event, sync.ChangeAddedEvent))
+                or
+                (isinstance(event, sync.ChangeUpdatedEvent) and
+                 event.change_key in self.change_rows.keys())):
             self.log.debug("Ignoring refresh change list due to event %s" % (event,))
-            return
+            return False
         self.log.debug("Refreshing change list due to event %s" % (event,))
+        return True
 
+    def refresh(self):
         unseen_keys = set(self.change_rows.keys())
         with self.app.db.getSession() as session:
             lst = session.getChanges(self.query, self.unreviewed,
diff --git a/gertty/view/diff.py b/gertty/view/diff.py
index 9630a7d..f4ee7b7 100644
--- a/gertty/view/diff.py
+++ b/gertty/view/diff.py
@@ -341,17 +341,20 @@ class BaseDiffView(urwid.WidgetWrap):
     def makeFileHeader(self, diff, comment_lists):
         raise NotImplementedError
 
-    def refresh(self, event=None):
-        if event and not ((isinstance(event, sync.ChangeAddedEvent) and
-                           self.change_key in event.related_change_keys)
-                          or
-                          (isinstance(event, sync.ChangeUpdatedEvent) and
-                           self.change_key in event.related_change_keys)):
+    def interested(self, event):
+        if not ((isinstance(event, sync.ChangeAddedEvent) and
+                 self.change_key in event.related_change_keys)
+                or
+                (isinstance(event, sync.ChangeUpdatedEvent) and
+                 self.change_key in event.related_change_keys)):
             #self.log.debug("Ignoring refresh diff due to event %s" % (event,))
-            return
+            return False
         #self.log.debug("Refreshing diff due to event %s" % (event,))
+        return True
+
+    def refresh(self, event=None):
         #TODO
-        return
+        pass
 
     def keypress(self, size, key):
         old_focus = self.listbox.focus
diff --git a/gertty/view/project_list.py b/gertty/view/project_list.py
index 5fa1eab..8be0601 100644
--- a/gertty/view/project_list.py
+++ b/gertty/view/project_list.py
@@ -97,17 +97,19 @@ class ProjectListView(urwid.WidgetWrap):
         self._w.contents.append((self.listbox, ('weight', 1)))
         self._w.set_focus(3)
 
-    def refresh(self, event=None):
-        if event and not (isinstance(event, sync.ProjectAddedEvent)
-                          or
-                          isinstance(event, sync.ChangeAddedEvent)
-                          or
-                          (isinstance(event, sync.ChangeUpdatedEvent) and
-                           (event.status_changed or event.review_flag_changed))):
+    def interested(self, event):
+        if not (isinstance(event, sync.ProjectAddedEvent)
+                or
+                isinstance(event, sync.ChangeAddedEvent)
+                or
+                (isinstance(event, sync.ChangeUpdatedEvent) and
+                 (event.status_changed or event.review_flag_changed))):
             self.log.debug("Ignoring refresh project list due to event %s" % (event,))
-            return
+            return False
         self.log.debug("Refreshing project list due to event %s" % (event,))
+        return True
 
+    def refresh(self):
         if self.subscribed:
             self.title = u'Subscribed projects'
             if self.unreviewed: