diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
 ghcprofview README
 ==================
 
+[![Build Status](https://travis-ci.org/portnov/ghcprofview-hs.svg?branch=master)](https://travis-ci.org/portnov/ghcprofview-hs) 
+
 This is GHC `.prof` files viewer, implemented in Haskell + Gtk3.
 
 Unlike [profiterole][1] and [profiteur][2], `ghcprofview` uses a traditional
diff --git a/ghcprofview.cabal b/ghcprofview.cabal
--- a/ghcprofview.cabal
+++ b/ghcprofview.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.1.
+-- This file has been generated from package.yaml by hpack version 0.33.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: b1508baa3bc5a0e04f53b8a9b3d8f2faca0079ca881ff61113d2b31c5f472e93
+-- hash: 1af11545e3da13219f5e775588be3ada381d8abd4cee98035bc3d0891a341388
 
 name:           ghcprofview
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       GHC .prof files viewer
 description:    Please see the README on GitHub at <https://github.com/portnov/ghcprofview-hs#readme>
 category:       Development
@@ -50,8 +50,8 @@
     , ghc-prof
     , gi-gtk
     , haskell-gi-base
+    , mtl >=2.2
     , regex-tdfa
-    , regex-tdfa-text
     , scientific
     , text
   default-language: Haskell2010
diff --git a/src/Gui/Page.hs b/src/Gui/Page.hs
--- a/src/Gui/Page.hs
+++ b/src/Gui/Page.hs
@@ -67,7 +67,7 @@
       let subtrees = ccdFindIncoming mod src name ccd
           result = ccdSum subtrees
       showTree ("Calls to " <> name) result
-      
+
   return menu
 
 mkPage :: Statusbar -> T.Text -> CostCentreData -> ShowTree -> IO Page
@@ -75,6 +75,8 @@
   vbox <- boxNew OrientationVertical 0
   searchHbox <- boxNew OrientationHorizontal 0
   filterBox <- boxNew OrientationHorizontal 0
+  filterSettingsBox <- flowBoxNew
+  flowBoxSetSelectionMode filterSettingsBox SelectionModeNone
 
   entry <- searchEntryNew
   boxPackStart searchHbox entry True True 0
@@ -93,27 +95,29 @@
 
   on entry #activate $ buttonClicked searchButton
 
-  let addFilterPercent name = do
+  let mkEntry :: IsWidget w => T.Text -> w -> IO (Box, w)
+      mkEntry name widget = do
         lbl <- labelNew (Just name)
-        spin <- spinButtonNewWithRange 0 100 1
+        box <- boxNew OrientationHorizontal 0
+        boxPackStart box lbl False False 0
+        boxPackStart box widget True True 10
+        return (box, widget)
+
+  let addFilterPercent name = do
+        (box, spin) <- mkEntry name =<< spinButtonNewWithRange 0 100 1
         spinButtonSetDigits spin 2
-        boxPackStart filterBox lbl False False 10
-        boxPackStart filterBox spin True True 0
+        containerAdd filterSettingsBox box
         return spin
 
   let addFilterNumber name = do
-        lbl <- labelNew (Just name)
-        spin <- spinButtonNewWithRange 0 (1e38) 1
+        (box, spin) <- mkEntry name =<< spinButtonNewWithRange 0 (1e38) 1
         spinButtonSetDigits spin 0
-        boxPackStart filterBox lbl False False 10
-        boxPackStart filterBox spin True True 0
+        containerAdd filterSettingsBox box
         return spin
 
   let addFilterText name = do
-        lbl <- labelNew (Just name)
-        entry <- entryNew
-        boxPackStart filterBox lbl False False 10
-        boxPackStart filterBox entry True True 0
+        (box, spin) <- mkEntry name =<< entryNew
+        containerAdd filterSettingsBox box
         return entry
 
   fltrEntries <- addFilterNumber "Entries:"
@@ -126,6 +130,7 @@
 
   filterButton <- buttonNewWithLabel "Filter"
 
+  boxPackStart filterBox filterSettingsBox True True 0
   boxPackStart filterBox filterButton False False 0
   boxPackStart vbox filterBox False False 0
 
diff --git a/src/Gui/TreeWidget.hs b/src/Gui/TreeWidget.hs
--- a/src/Gui/TreeWidget.hs
+++ b/src/Gui/TreeWidget.hs
@@ -4,15 +4,18 @@
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE MonoLocalBinds #-}
 
 module Gui.TreeWidget where
 
 import Control.Monad
 import qualified Data.Text as T
+import Data.Int
 
 import Data.GI.Base.GType
 import Data.GI.Base.GValue
-import GI.Gtk 
+import Data.GI.Base.Signals
+import GI.Gtk
 
 import Types
 
@@ -47,7 +50,7 @@
       forM_ (zip [0..] (twcColumns cfg)) $ \(i, column) ->
           treeStoreSetValue store item i =<< columnData column cc
       forM_ (treeChildren node) $ fill store (Just item)
-  
+
 mkTreeView :: forall t a . IsTree t a => TreeWidgetConfig a -> t -> IO TreeView
 mkTreeView cfg@(TreeWidgetConfig columns) tree = do
     srcStore <- mkTreeStore cfg tree
@@ -59,6 +62,11 @@
 
     return view
   where
+    addColumn :: TreeView
+                   -> Int32
+                   -> ColumnType
+                   -> T.Text
+                   -> IO SignalHandlerId
     addColumn view i ctype title = do
       column <- treeViewColumnNew
       treeViewColumnSetTitle column title
@@ -81,7 +89,7 @@
               return True
           else return False
 
-    withRenderer :: ColumnType -> (forall r. IsCellRenderer r => r -> IO x) -> IO x
+    withRenderer :: forall x. ColumnType -> (forall r. IsCellRenderer r => r -> IO Int32) -> IO Int32
     withRenderer TextColumn f = cellRendererTextNew >>= f
     withRenderer PercentColumn f = cellRendererProgressNew >>= f
 
