diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015-2016, Rudy Matela
+Copyright (c) 2015-2017, Rudy Matela
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
 FitSpec
 =======
 
+[![FitSpec Build Status][build-status]][build-log]
+[![FitSpec on Hackage][hackage-version]][fitspec-on-hackage]
+
 FitSpec provides automated assistance in the task of refining test properties
 for Haskell functions.  FitSpec tests mutant variations of functions under test
 against a given property set, recording any surviving mutants that pass all
@@ -149,3 +152,8 @@
 
 [TH]:    https://wiki.haskell.org/Template_Haskell
 [Cabal]: https://www.haskell.org/cabal
+
+[build-status]: https://travis-ci.org/rudymatela/fitspec.svg?branch=master
+[build-log]:    https://travis-ci.org/rudymatela/fitspec
+[hackage-version]: https://img.shields.io/hackage/v/fitspec.svg
+[fitspec-on-hackage]: https://hackage.haskell.org/package/fitspec
diff --git a/TODO.md b/TODO.md
--- a/TODO.md
+++ b/TODO.md
@@ -21,23 +21,7 @@
   (cabal install, cabal from sandbox, source include)
 
 
-v0.4.1
+v0.4.2
 ------
 
-* Fix `thread killed` when first run takes longer than timeout:
-
-	$ ./bench/haskell-src -t5 -m500 -n1000
-	haskell-src: thread killed
-
-  As it takes more than 5 seconds to run this example (at least on my machine),
-  the thread will be killed before concluding.  I *think* this is the source of
-  the bug, but could be something else.
-
-  EDIT (after re-reading the code and doing some tests): maybe the Thread
-  Killed exception somehow "infects" `x` as it may share some structure with
-  elements of `xs`.
-
-  To solve this, maybe re-implement by probing (every 100ms) whether the IORef
-  was ever written to --- for that I will need a second boolean IORef.  This has
-  the advantage of, by adding a *third* boolean IORef we can also exit earlier
-  when test cases and mutants are exhausted.
+* implement `toplibs` hack (from LeanCheck and Speculate);
diff --git a/bench/haskell-src-exts.hs b/bench/haskell-src-exts.hs
deleted file mode 100644
--- a/bench/haskell-src-exts.hs
+++ /dev/null
@@ -1,38 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-import Test.FitSpec
-import Language.Haskell.Exts
-import Language.Haskell.Exts.Pretty
-
-instance Eq a => Eq (ParseResult a) where
-  ParseOk x == ParseOk y = x == y
-  ParseFailed l1 s1 == ParseFailed l2 s2 = l1 == l2 && s1 == s2
-  _ == _ = False
-
-deriveMutableCascading ''ParseResult
-deriveMutableCascading ''Module
-deriveMutableCascading ''SrcSpanInfo
-
-properties :: (String -> ParseResult (Module SrcSpanInfo)
-              ,Module SrcSpanInfo -> String)
-           -> [Property]
-properties (parseFileContents,prettyPrint) =
-  [ property $ case parseFileContents "" of
-                 ParseOk (Module _ _ _ _ _) -> True
-                 _ -> False
-  , property $ case parseFileContents "a" of
-                 ParseFailed (SrcLoc "<unknown>.hs" 2 1) _ -> True
-                 _ -> False
-  , property $ \m -> case parseFileContents (prettyPrint m) of
-                       ParseOk m' -> case parseFileContents (prettyPrint m') of
-                                       ParseOk m'' -> m' == m''
-                                       _ -> False
-                       _ -> True
--- Not true:
---, property $ \s -> case parseFileContents s of
---                     ParseOk m' -> prettyPrint m' == s
---                     _ -> True
-  ]
-
-main = mainWith args { names = ["parseFileContents f", "prettyPrint m"] }
-                (parseFileContents,prettyPrint)
-                properties
diff --git a/bench/haskell-src.hs b/bench/haskell-src.hs
deleted file mode 100644
--- a/bench/haskell-src.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE TemplateHaskell, StandaloneDeriving #-}
-import Test.FitSpec
-import Language.Haskell.Parser
-import Language.Haskell.Pretty as P
-import Language.Haskell.Syntax
-import Data.Ratio
-import Data.List (intercalate)
-import Data.Function (on)
-import Data.Char
-
-deriving instance Eq HsModule -- needed for Mutable
-
-deriveMutableCascading ''HsModule
-
--- change ``take 5'' below to ``take n'' where n `elem` [1,2,3,4]
--- to see surviving mutants for different refinements
---
--- All 5 properties should be reported as ``apparently complete''
--- so no surviving mutants.
-properties :: (HsModule -> String) -> [Property]
-properties prettyPrint = take 5
-  [ property $
-      \nm loc -> (prettyPrint $ HsModule loc (Module nm) Nothing [] [])
-              == "module " ++ nm ++ " where"
-
-  , property $
-      \nm loc -> (prettyPrint $ HsModule loc (Module nm) (Just []) [] [])
-              == "module " ++ nm ++ " () where"
-
-  , property $
-      \nm loc -> (prettyPrint $ HsModule loc (Module nm) Nothing [] [HsFunBind []])
-              == "module " ++ nm ++ " where"
-
-  , property $
-      \nm loc imports decls ->
-           (prettyPrint $ HsModule loc (Module nm) Nothing imports decls)
-       === unlines (("module " ++ nm ++ " where")
-                   :(map P.prettyPrint imports
-                  ++ map P.prettyPrint decls))
-
-  , property $
-      \nm loc imports exports decls ->
-           (prettyPrint $ HsModule loc (Module nm) (Just exports) imports decls)
-       === unlines (["module " ++ nm ++ " ("
-                               ++ intercalate ", " (map P.prettyPrint exports)
-                               ++ ") where"]
-                 ++ map P.prettyPrint imports
-                 ++ map P.prettyPrint decls)
-  ]
-  where
-  (===) :: String -> String -> Bool
-  (===) = (==) `on` (filter (not . null) . lines)
-
-main = mainWith args { names = ["prettyPrint"]
-                     , timeout = 0
-                     }
-                prettyPrint
-                properties
diff --git a/fitspec.cabal b/fitspec.cabal
--- a/fitspec.cabal
+++ b/fitspec.cabal
@@ -1,5 +1,5 @@
 name:                fitspec
-version:             0.4.0
+version:             0.4.1
 synopsis:            refining property sets for testing Haskell programs
 description:
   FitSpec provides automated assistance in the task of refining test properties
@@ -38,7 +38,7 @@
 source-repository this
   type:            git
   location:        https://github.com/rudymatela/fitspec
-  tag:             v0.4.0
+  tag:             v0.4.1
 
 
 library
@@ -110,19 +110,23 @@
   default-language:  Haskell2010
   type:              exitcode-stdio-1.0
 
-benchmark haskell-src
-  main-is:           haskell-src.hs
-  build-depends: base >= 4 && < 5, leancheck, cmdargs, template-haskell, haskell-src
-  hs-source-dirs:    src, bench
-  default-language:  Haskell2010
-  type:              exitcode-stdio-1.0
-
-benchmark haskell-src-exts
-  main-is:           haskell-src-exts.hs
-  build-depends: base >= 4 && < 5, leancheck, cmdargs, template-haskell, haskell-src-exts
-  hs-source-dirs:    src, bench
-  default-language:  Haskell2010
-  type:              exitcode-stdio-1.0
+-- The haskell-src and haskell-src-exts are commented out as they pull a lot of
+-- dependencies.  Ultimately a flag could be added to optionally activate them,
+-- but better not make this cabal file too much complex.
+--
+--benchmark haskell-src
+--  main-is:           haskell-src.hs
+--  build-depends: base >= 4 && < 5, leancheck, cmdargs, template-haskell, haskell-src
+--  hs-source-dirs:    src, bench
+--  default-language:  Haskell2010
+--  type:              exitcode-stdio-1.0
+--
+--benchmark haskell-src-exts
+--  main-is:           haskell-src-exts.hs
+--  build-depends: base >= 4 && < 5, leancheck, cmdargs, template-haskell, haskell-src-exts
+--  hs-source-dirs:    src, bench
+--  default-language:  Haskell2010
+--  type:              exitcode-stdio-1.0
 
 benchmark heaps
   main-is:           heaps.hs
diff --git a/src/Test/FitSpec.hs b/src/Test/FitSpec.hs
--- a/src/Test/FitSpec.hs
+++ b/src/Test/FitSpec.hs
@@ -1,4 +1,10 @@
--- | __ FitSpec: refining property-sets for functional testing __
+-- |
+-- Module      : Test.FitSpec
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- __ FitSpec: refining property-sets for functional testing __
 --
 -- FitSpec provides automated assistance in the task of refining test properties
 -- for Haskell functions.  FitSpec tests mutant variations of functions under test
diff --git a/src/Test/FitSpec/Derive.hs b/src/Test/FitSpec/Derive.hs
--- a/src/Test/FitSpec/Derive.hs
+++ b/src/Test/FitSpec/Derive.hs
@@ -1,4 +1,10 @@
--- | Experimental module for deriving 'Mutable' and 'ShowMutable' instances
+-- |
+-- Module      : Test.FitSpec.Derive
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Experimental module for deriving 'Mutable' and 'ShowMutable' instances
 --
 -- Needs GHC and Template Haskell
 -- (tested on GHC 7.4, 7.6, 7.8, 7.10 and 8.0)
diff --git a/src/Test/FitSpec/Dot.hs b/src/Test/FitSpec/Dot.hs
--- a/src/Test/FitSpec/Dot.hs
+++ b/src/Test/FitSpec/Dot.hs
@@ -1,5 +1,11 @@
--- | Experimental module to generate dotfiles (for graphviz) with implications
---   between property sub-sets.
+-- |
+-- Module      : Test.FitSpec.Dot
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Experimental module to generate dotfiles (for graphviz) with implications
+-- between property sub-sets.
 module Test.FitSpec.Dot where
 
 import Test.FitSpec
diff --git a/src/Test/FitSpec/Engine.hs b/src/Test/FitSpec/Engine.hs
--- a/src/Test/FitSpec/Engine.hs
+++ b/src/Test/FitSpec/Engine.hs
@@ -1,4 +1,10 @@
--- | FitSpec: refining property-sets for functional testing
+-- |
+-- Module      : Test.FitSpec.Engine
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- FitSpec: refining property-sets for functional testing
 --
 -- This is the main engine, besides "Test.FitSpec.Mutable".
 module Test.FitSpec.Engine
diff --git a/src/Test/FitSpec/Main.hs b/src/Test/FitSpec/Main.hs
--- a/src/Test/FitSpec/Main.hs
+++ b/src/Test/FitSpec/Main.hs
@@ -1,4 +1,10 @@
--- | Exports "main" functions for FitSpec.
+-- |
+-- Module      : Test.FitSpec.Main
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Exports "main" functions for FitSpec.
 -- They work exactly by 'report' and 'reportWith' but can be customized by
 -- command line arguments.
 --
diff --git a/src/Test/FitSpec/Mutable.hs b/src/Test/FitSpec/Mutable.hs
--- a/src/Test/FitSpec/Mutable.hs
+++ b/src/Test/FitSpec/Mutable.hs
@@ -1,4 +1,10 @@
--- | Enumeration of function mutations
+-- |
+-- Module      : Test.FitSpec.Mutable
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Enumeration of function mutations
 module Test.FitSpec.Mutable
   ( Mutable (..)
   , mutiersEq
diff --git a/src/Test/FitSpec/Mutable/Tuples.hs b/src/Test/FitSpec/Mutable/Tuples.hs
--- a/src/Test/FitSpec/Mutable/Tuples.hs
+++ b/src/Test/FitSpec/Mutable/Tuples.hs
@@ -1,4 +1,10 @@
--- | Mutable instances: septuples up to 12-tuples
+-- |
+-- Module      : Test.FitSpec.Mutable.Tuples
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Mutable instances: septuples up to 12-tuples
 --
 -- This is partly a Hack that allows those instances to be hidden from Haddock.
 -- Otherwise Haddock documentation will look very ugly.
diff --git a/src/Test/FitSpec/PrettyPrint.hs b/src/Test/FitSpec/PrettyPrint.hs
--- a/src/Test/FitSpec/PrettyPrint.hs
+++ b/src/Test/FitSpec/PrettyPrint.hs
@@ -1,4 +1,10 @@
--- | A very simple pretty printing library used to generate 'Test.FitSpec' reports.
+-- |
+-- Module      : Test.FitSpec.PrettyPrint
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- A very simple pretty printing library used to generate 'Test.FitSpec' reports.
 module Test.FitSpec.PrettyPrint
   ( beside
   , above
diff --git a/src/Test/FitSpec/Report.hs b/src/Test/FitSpec/Report.hs
--- a/src/Test/FitSpec/Report.hs
+++ b/src/Test/FitSpec/Report.hs
@@ -1,4 +1,10 @@
--- | Generate 'Test.FitSpec' reports.
+-- |
+-- Module      : Test.FitSpec.Report
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Generate 'Test.FitSpec' reports.
 module Test.FitSpec.Report
   ( report
   , reportWith
diff --git a/src/Test/FitSpec/ShowMutable.hs b/src/Test/FitSpec/ShowMutable.hs
--- a/src/Test/FitSpec/ShowMutable.hs
+++ b/src/Test/FitSpec/ShowMutable.hs
@@ -1,4 +1,10 @@
--- | Show mutant variations
+-- |
+-- Module      : Test.FitSpec.ShowMutable
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- Exports a typeclass to show mutant variations.
 module Test.FitSpec.ShowMutable
   ( ShowMutable (..)
   , mutantSEq
@@ -18,6 +24,7 @@
 import Data.List (intercalate,tails)
 import Data.Char (isLetter)
 import Data.Ratio (Ratio)
+import Data.Word (Word) -- for GHC <= 7.10
 
 
 -- | Show a Mutant as a tuple of lambdas.
@@ -26,10 +33,10 @@
 -- > ( \p q -> case (p,q) of
 -- >            (False,False) -> True
 -- >            _ -> p && q
--- >, \p -> case p of
--- >          False -> False
--- >          True -> True
--- >          _ -> not p )
+-- > , \p -> case p of
+-- >           False -> False
+-- >           True -> True
+-- >           _ -> not p )
 --
 -- Can be easily copy pasted into an interactive session for manipulation.
 -- On GHCi, use @:{@ and @:}@ to allow multi-line expressions and definitions.
diff --git a/src/Test/FitSpec/ShowMutable/Tuples.hs b/src/Test/FitSpec/ShowMutable/Tuples.hs
--- a/src/Test/FitSpec/ShowMutable/Tuples.hs
+++ b/src/Test/FitSpec/ShowMutable/Tuples.hs
@@ -1,4 +1,10 @@
--- | ShowMutable instances: septuples up to 12-tuples
+-- |
+-- Module      : Test.FitSpec.Tuples
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- ShowMutable instances: septuples up to 12-tuples
 --
 -- This is partly a Hack that allows those instances to be hidden from Haddock.
 -- Otherwise Haddock documentation will look very ugly.
diff --git a/src/Test/FitSpec/TestTypes.hs b/src/Test/FitSpec/TestTypes.hs
--- a/src/Test/FitSpec/TestTypes.hs
+++ b/src/Test/FitSpec/TestTypes.hs
@@ -1,4 +1,10 @@
--- | FitSpec's Test Types:
+-- |
+-- Module      : Test.FitSpec.TestTypes
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- FitSpec's Test Types:
 -- 'Nat',
 -- 'Int2', 'Int3', 'Int4',
 -- 'UInt2', 'UInt3', 'UInt4'.
diff --git a/src/Test/FitSpec/Utils.hs b/src/Test/FitSpec/Utils.hs
--- a/src/Test/FitSpec/Utils.hs
+++ b/src/Test/FitSpec/Utils.hs
@@ -1,4 +1,10 @@
--- | General purpose utility functions for FitSpec
+-- |
+-- Module      : Test.FitSpec.Utils
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- General purpose utility functions for FitSpec
 {-# LANGUAGE CPP #-}
 module Test.FitSpec.Utils
   ( (...)
@@ -38,7 +44,7 @@
 import Data.Function (on)
 import Data.Ord (comparing)
 import Data.List (groupBy,sortBy)
-import Data.IORef (newIORef, readIORef, writeIORef)
+import Data.IORef (IORef, newIORef, readIORef, writeIORef)
 import Control.Concurrent (forkIO, threadDelay, killThread)
 import Control.Monad (liftM)
 
@@ -111,22 +117,30 @@
 takeWhileIncreasingOn :: Ord b => (a -> b) -> [a] -> [a]
 takeWhileIncreasingOn f = takeWhileIncreasing (compare `on` f)
 
+readIORefUntil :: (a -> Bool) -> IORef a -> IO a
+readIORefUntil p r = do
+  x <- readIORef r
+  if p x
+    then return x
+    else threadDelay 100000 -- 100ms
+      >> readIORefUntil p r
 
 -- | @lastTimeout s xs@ will take the last value of @xs@ it is able evaluate
 --   before @s@ seconds elapse.
 lastTimeout :: Int -> [a] -> IO a
 lastTimeout _ []     = error "lastTimeout: empty list"
 lastTimeout 0 (x:_)  = return x  -- no time to lose
-lastTimeout s (x:xs) = do
-  r <- newIORef x
+lastTimeout s xs = do
+  r <- newIORef (undefined,False)
   tid <- forkIO $ keepImproving r xs
   threadDelay (s*1000000) -- TODO: change to waitForThread!!!
+  (x,_) <- readIORefUntil snd r
   killThread tid
-  readIORef r
+  return x
   where keepImproving _ []     = return ()
         keepImproving r (x:xs) = do
           evaluate x
-          writeIORef r x
+          writeIORef r (x,True)
           keepImproving r xs
 
 (***) :: (a -> b) -> (c -> d) -> (a,c) -> (b,d)
diff --git a/tests/test-derive.hs b/tests/test-derive.hs
--- a/tests/test-derive.hs
+++ b/tests/test-derive.hs
@@ -1,3 +1,5 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
 {-# LANGUAGE TemplateHaskell #-}
 import System.Exit (exitFailure)
 import Data.List (elemIndices,sort)
diff --git a/tests/test-mutate.hs b/tests/test-mutate.hs
--- a/tests/test-mutate.hs
+++ b/tests/test-mutate.hs
@@ -1,3 +1,5 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
 import System.Exit (exitFailure)
 import Data.List (elemIndices, sort)
 import Data.Tuple (swap)
@@ -8,6 +10,7 @@
 import Test.LeanCheck.Function.ListsOfPairs (functionPairs, defaultFunPairsToFunction)
 
 import Data.Monoid ((<>))
+import Data.Word (Word) -- for GHC <= 7.10
 
 polyAppend :: [a] -> [b] -> [Either a b]
 polyAppend xs ys = map Left xs ++ map Right ys
diff --git a/tests/test-showmutable.hs b/tests/test-showmutable.hs
--- a/tests/test-showmutable.hs
+++ b/tests/test-showmutable.hs
@@ -1,3 +1,5 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
 {-# LANGUAGE NoMonomorphismRestriction #-}
 import System.Exit (exitFailure)
 import System.Environment (getArgs)
diff --git a/tests/test-utils.hs b/tests/test-utils.hs
--- a/tests/test-utils.hs
+++ b/tests/test-utils.hs
@@ -1,3 +1,5 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
 import System.Exit (exitFailure)
 import Data.List (elemIndices,sortBy)
 
