diff --git a/GUI/App.hs b/GUI/App.hs
--- a/GUI/App.hs
+++ b/GUI/App.hs
@@ -1,6 +1,3 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE TemplateHaskell #-}
-
 -------------------------------------------------------------------------------
 -- | Module : GUI.App
 --
@@ -9,33 +6,9 @@
 
 module GUI.App (initApp) where
 
--- Mac OS X-specific GTK imports
-#if defined(darwin_HOST_OS)
-import qualified Graphics.UI.Gtk as Gtk
-import qualified Graphics.UI.Gtk.OSX as OSX
-import GUI.DataFiles (loadLogo)
-#endif
-
 -------------------------------------------------------------------------------
 
-#if defined(darwin_HOST_OS)
-
 -- | Initialize application
--- Perform Mac OS X-specific application initialization
-initApp :: IO ()
-initApp = do
-  app <- OSX.applicationNew
-  menuBar <- Gtk.menuBarNew
-  OSX.applicationSetMenuBar app menuBar
-  logo <- $loadLogo
-  OSX.applicationSetDockIconPixbuf app (Just logo)
-  OSX.applicationReady app
-
-#else
-
--- | Initialize application
 -- Perform application initialization for non-Mac OS X platforms
 initApp :: IO ()
 initApp = return ()
-
-#endif
diff --git a/GUI/DataFiles.hs b/GUI/DataFiles.hs
--- a/GUI/DataFiles.hs
+++ b/GUI/DataFiles.hs
@@ -1,13 +1,16 @@
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TemplateHaskell #-}
 module GUI.DataFiles
   ( ui
   , loadLogo
   ) where
+import Control.Exception (IOException, Handler(..), catches)
 import System.IO
 
 import Data.FileEmbed
 import Graphics.UI.Gtk (Pixbuf, pixbufNewFromFile)
 import Language.Haskell.TH
+import System.Glib (GError)
 import System.IO.Temp
 import qualified Data.ByteString as B
 import qualified Data.Text.Encoding as TE
@@ -22,12 +25,17 @@
 ui :: Q Exp
 ui = [| TE.decodeUtf8 $(makeRelativeToProject uiFile >>= embedFile) |]
 
-renderLogo :: B.ByteString -> IO Pixbuf
+renderLogo :: B.ByteString -> IO (Maybe Pixbuf)
 renderLogo bytes =
   withSystemTempFile logoFile $ \path h -> do
     B.hPut h bytes
     hClose h
-    pixbufNewFromFile path
+    Just <$> pixbufNewFromFile path
+  `catches`
+    -- in case of a failure in the file IO or pixbufNewFromFile, return Nothing
+    [ Handler $ \(_ :: IOException) -> return Nothing
+    , Handler $ \(_ :: GError) -> return Nothing
+    ]
 
 -- | Load the logo file as a 'Pixbuf'.
 loadLogo :: Q Exp
diff --git a/GUI/Dialogs.hs b/GUI/Dialogs.hs
--- a/GUI/Dialogs.hs
+++ b/GUI/Dialogs.hs
@@ -28,7 +28,7 @@
                                   "Mikolaj Konarski <mikolaj@well-typed.com>",
                                   "Nicolas Wu <nick@well-typed.com>",
                                   "Eric Kow <eric@well-typed.com>"],
-         aboutDialogLogo      := Just logo,
+         aboutDialogLogo      := logo,
          aboutDialogWebsite   := "http://www.haskell.org/haskellwiki/ThreadScope",
          windowTransientFor   := toWindow parent
         ]
diff --git a/GUI/MainWindow.hs b/GUI/MainWindow.hs
--- a/GUI/MainWindow.hs
+++ b/GUI/MainWindow.hs
@@ -134,19 +134,14 @@
   zoomOutButton      <- getWidget castToToolButton "cpus_zoomout"
   zoomFitButton      <- getWidget castToToolButton "cpus_zoomfit"
 
-  --TODO: this is currently not used, but it'be nice if it were!
-  eventsTextEntry    <- getWidget castToEntry      "events_entry"
-
   ------------------------------------------------------------------------
   -- Show everything
   widgetShowAll mainWindow
 
-  widgetHide eventsTextEntry  -- for now we hide it, see above.
-
   ------------------------------------------------------------------------
 
   logo <- $loadLogo
-  set mainWindow [ windowIcon := Just logo ]
+  set mainWindow [ windowIcon := logo ]
 
   ------------------------------------------------------------------------
   -- Status bar functionality
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 # ThreadScope
+
 [![Hackage](https://img.shields.io/hackage/v/threadscope.svg)](https://hackage.haskell.org/package/threadscope)
 [![Hackage-Deps](https://img.shields.io/hackage-deps/v/threadscope.svg)](http://packdeps.haskellers.com/feed?needle=threadscope)
 [![Build Status](https://travis-ci.org/haskell/ThreadScope.svg?branch=master)](https://travis-ci.org/haskell/ThreadScope)
@@ -9,20 +10,23 @@
 Currently [pre-built binaries](https://github.com/haskell/ThreadScope/releases) for the following platforms are provided:
 
 * Ubuntu Trusty (64-bit)
-* OS X
+* macOS (XCode 11)
 * Windows (x64)
 
 GTK+2 needs to be installed for those binaries to work.
 
-On OS X, `gtk-mac-integration` also needs to be installed.
-```
+On OS X, [`gtk-mac-integration`](https://github.com/jralls/gtk-mac-integration) also needs to be installed:
+
+```sh
 brew install gtk+ gtk-mac-integration
 ```
 
 On Windows, the [MSYS2](http://www.msys2.org) is the recommended way to install GTK+2. In MSYS2 MINGW64 shell:
-```
+
+```sh
 pacman -S $MINGW_PACKAGE_PREFIX-gtk2
 ```
+
 then you can run the threadscope binary from the shell.
 
 ## Building from source
@@ -38,11 +42,13 @@
 ```
 
 Then you can build threadscope using cabal:
+
 ```sh
-cabal new-build
+cabal v2-build
 ```
 
 Or using stack:
+
 ```sh
 stack setup
 stack install
@@ -50,18 +56,20 @@
 
 ### OS X
 
-GTK+ and gtk-mac-integration are required.
+GTK+, gtk-mac-integration and GCC 9 are required:
 
 ```sh
-brew install gtk+ gtk-mac-integration
+brew install gtk+ gtk-mac-integration gcc@9
 ```
 
 Then you can build threadscope using cabal:
+
 ```sh
-cabal new-build --constraint="gtk +have-quartz-gtk"
+cabal v2-build --project-file=cabal.project.osx
 ```
 
 Or using stack:
+
 ```sh
 stack setup
 stack install --flag gtk:have-quartz-gtk
@@ -81,7 +89,7 @@
 then you can build threadscope using cabal:
 
 ```sh
-cabal new-build
+cabal v2-build
 ```
 
 Or you can use stack instead.
@@ -89,6 +97,7 @@
 CAVEAT: gtk2 needs to be installed twice: one for stack's MSYS2 environment and another for local MSYS2 environment.
 
 In command prompt:
+
 ```sh
 stack setup
 stack exec -- pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel
@@ -99,6 +108,7 @@
 ```
 
 Then in MSYS2 MINGW64 shell:
+
 ```sh
 pacman -S $MINGW_PACKAGE_PREFIX-gtk2
 echo 'export PATH=$APPDATA/local/bin:$PATH' >> .profile
diff --git a/threadscope.cabal b/threadscope.cabal
--- a/threadscope.cabal
+++ b/threadscope.cabal
@@ -1,5 +1,5 @@
 Name:                threadscope
-Version:             0.2.11.1
+Version:             0.2.12
 Category:            Development, Profiling, Trace
 Synopsis:            A graphical tool for profiling parallel Haskell programs.
 Description:         ThreadScope is a graphical viewer for thread profile
@@ -35,10 +35,10 @@
 Data-files:          threadscope.ui, threadscope.png
 Extra-source-files:  include/windows_cconv.h
                      README.md
-Tested-with:         GHC == 7.10.2
-                     GHC == 8.0.2
-                     GHC == 8.2.2
-                     GHC == 8.4.2
+Tested-with:         GHC == 8.2.2
+                     GHC == 8.4.4
+                     GHC == 8.6.5
+                     GHC == 8.8.2
 
 source-repository head
   type:     git
@@ -46,26 +46,24 @@
 
 Executable threadscope
   Main-is:           Main.hs
-  Build-Depends:     base >= 4.6 && < 5,
-                     gtk >= 0.12 && < 0.15,
+  Build-Depends:     base >= 4.10 && < 5,
+                     gtk >= 0.12 && < 0.16,
                      cairo < 0.14,
                      glib < 0.14,
                      pango < 0.14,
-                     binary < 0.10,
+                     binary < 0.11,
                      array < 0.6,
                      mtl < 2.3,
                      filepath < 1.5,
-                     ghc-events >= 0.5 && < 0.9,
+                     ghc-events >= 0.5 && < 0.13,
                      containers >= 0.2 && < 0.7,
                      deepseq >= 1.1,
                      text < 1.3,
                      time >= 1.1 && < 1.10,
                      bytestring < 0.11,
                      file-embed < 0.1,
-                     template-haskell < 2.14,
+                     template-haskell < 2.16,
                      temporary >= 1.1 && < 1.4
-  if os(osx)
-    build-depends:   gtk-mac-integration < 0.4
 
   include-dirs:      include
   Extensions:        RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards
diff --git a/threadscope.ui b/threadscope.ui
--- a/threadscope.ui
+++ b/threadscope.ui
@@ -1693,21 +1693,6 @@
                       <object class="GtkVBox" id="eventsbox_old">
                         <property name="visible">True</property>
                         <child>
-                          <object class="GtkEntry" id="events_entry">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="invisible_char">●</property>
-                            <property name="width_chars">20</property>
-                            <property name="secondary_icon_stock">gtk-find</property>
-                            <property name="secondary_icon_tooltip_text">Search for event</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
                           <object class="GtkHBox" id="eventsHBox">
                             <property name="height_request">120</property>
                             <property name="visible">True</property>
