diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2014 Simon Hengel <sol@typeful.net>
+Copyright (c) 2011-2015 Simon Hengel <sol@typeful.net>
 Copyright (c) 2011-2012 Trystan Spangler <trystan.s@comcast.net>
 Copyright (c) 2011-2011 Greg Weber <greg@gregweber.info>
 
diff --git a/hspec-core.cabal b/hspec-core.cabal
--- a/hspec-core.cabal
+++ b/hspec-core.cabal
@@ -1,8 +1,8 @@
 name:             hspec-core
-version:          2.1.5
+version:          2.1.6
 license:          MIT
 license-file:     LICENSE
-copyright:        (c) 2011-2014 Simon Hengel,
+copyright:        (c) 2011-2015 Simon Hengel,
                   (c) 2011-2012 Trystan Spangler,
                   (c) 2011 Greg Weber
 maintainer:       Simon Hengel <sol@typeful.net>
@@ -22,10 +22,26 @@
   subdir: hspec-core
 
 library
-  ghc-options:
-      -Wall
-  hs-source-dirs:
-      src
+  hs-source-dirs: src
+  exposed-modules:
+      Test.Hspec.Core.Spec
+      Test.Hspec.Core.Hooks
+      Test.Hspec.Core.Runner
+      Test.Hspec.Core.Formatters
+      Test.Hspec.Core.QuickCheck
+      Test.Hspec.Core.Util
+  other-modules:
+      Test.Hspec.Compat
+      Test.Hspec.Config
+      Test.Hspec.Core.Example
+      Test.Hspec.Core.Formatters.Internal
+      Test.Hspec.Core.QuickCheckUtil
+      Test.Hspec.Core.Runner.Eval
+      Test.Hspec.Core.Spec.Monad
+      Test.Hspec.Core.Tree
+      Test.Hspec.FailureReport
+      Test.Hspec.Options
+      Test.Hspec.Timer
   build-depends:
       base >= 4.3 && < 5
     , random
@@ -40,34 +56,13 @@
     , quickcheck-io
     , hspec-expectations
     , async >= 2
-  exposed-modules:
-      Test.Hspec.Core.Spec
-      Test.Hspec.Core.Hooks
-      Test.Hspec.Core.Runner
-      Test.Hspec.Core.Formatters
-      Test.Hspec.Core.QuickCheck
-      Test.Hspec.Core.Util
-  other-modules:
-      Test.Hspec.Compat
-      Test.Hspec.Core.Example
-      Test.Hspec.Core.Tree
-      Test.Hspec.Core.Spec.Monad
-      Test.Hspec.Core.QuickCheckUtil
-      Test.Hspec.Config
-      Test.Hspec.Options
-      Test.Hspec.FailureReport
-      Test.Hspec.Core.Runner.Eval
-      Test.Hspec.Core.Formatters.Internal
-      Test.Hspec.Timer
+  ghc-options: -Wall
   default-language: Haskell2010
 
 test-suite spec
-  type:
-      exitcode-stdio-1.0
-  hs-source-dirs:
-      src, test
-  main-is:
-      Spec.hs
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test, src
+  main-is: Spec.hs
   other-modules:
       Helper
       Mock
@@ -82,24 +77,23 @@
       Test.Hspec.FailureReportSpec
       Test.Hspec.OptionsSpec
       Test.Hspec.TimerSpec
-  ghc-options:
-      -Wall
   build-depends:
-      base == 4.*
+      base >= 4.3 && < 5
     , random
     , tf-random
     , setenv
-    , ansi-terminal
+    , ansi-terminal >= 0.5
     , time
-    , transformers
+    , transformers >= 0.2.2.0
     , deepseq
-    , HUnit
-    , QuickCheck
+    , HUnit >= 1.2.5
+    , QuickCheck >= 2.5.1
     , quickcheck-io
     , hspec-expectations
-    , async
+    , async >= 2
 
-    , hspec-meta >= 1.12
+    , hspec-meta >= 2.1.5
     , silently >= 1.2.4
     , process
+  ghc-options: -Wall
   default-language: Haskell2010
diff --git a/src/Test/Hspec/Compat.hs b/src/Test/Hspec/Compat.hs
--- a/src/Test/Hspec/Compat.hs
+++ b/src/Test/Hspec/Compat.hs
@@ -5,10 +5,45 @@
 , readMaybe
 , lookupEnv
 , module Data.IORef
+
+, module Prelude
+, module Control.Applicative
+, module Data.Foldable
+, module Data.Traversable
+, module Data.Monoid
+
 #if !MIN_VERSION_base(4,6,0)
 , modifyIORef'
 #endif
 ) where
+
+import           Control.Applicative
+import           Data.Foldable
+import           Data.Traversable
+import           Data.Monoid
+
+import           Prelude hiding (
+    all
+  , and
+  , any
+  , concat
+  , concatMap
+  , elem
+  , foldl
+  , foldl1
+  , foldr
+  , foldr1
+  , mapM
+  , mapM_
+  , maximum
+  , minimum
+  , notElem
+  , or
+  , product
+  , sequence
+  , sequence_
+  , sum
+  )
 
 #if !MIN_VERSION_base(4,3,0)
 import           Control.Monad.Trans.Error () -- for Monad (Either e)
diff --git a/src/Test/Hspec/Config.hs b/src/Test/Hspec/Config.hs
--- a/src/Test/Hspec/Config.hs
+++ b/src/Test/Hspec/Config.hs
@@ -42,7 +42,10 @@
 
     matchFilter = configFilterPredicate opts
 
-    rerunFilter = flip elem . failureReportPaths <$> mFailureReport
+    rerunFilter = case failureReportPaths <$> mFailureReport of
+      Just [] -> Nothing
+      Just xs -> Just (`elem` xs)
+      Nothing -> Nothing
 
 configQuickCheckArgs :: Config -> QC.Args
 configQuickCheckArgs c = qcArgs
diff --git a/src/Test/Hspec/Core/Formatters.hs b/src/Test/Hspec/Core/Formatters.hs
--- a/src/Test/Hspec/Core/Formatters.hs
+++ b/src/Test/Hspec/Core/Formatters.hs
@@ -49,13 +49,14 @@
 , formatException
 ) where
 
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           Data.Maybe
 import           Test.Hspec.Core.Util
 import           Test.Hspec.Core.Spec (Location(..), LocationAccuracy(..))
 import           Text.Printf
 import           Control.Monad (when, unless)
-import           Data.Foldable (forM_)
-import           Control.Applicative
 import           System.IO (hPutStr, hFlush)
 
 -- We use an explicit import list for "Test.Hspec.Formatters.Internal", to make
diff --git a/src/Test/Hspec/Core/Formatters/Internal.hs b/src/Test/Hspec/Core/Formatters/Internal.hs
--- a/src/Test/Hspec/Core/Formatters/Internal.hs
+++ b/src/Test/Hspec/Core/Formatters/Internal.hs
@@ -35,10 +35,12 @@
 , finally_
 ) where
 
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import qualified System.IO as IO
 import           System.IO (Handle)
 import           Control.Monad
-import           Control.Applicative
 import           Control.Exception (SomeException, AsyncException(..), bracket_, try, throwIO)
 import           System.Console.ANSI
 import           Control.Monad.Trans.State hiding (gets, modify)
@@ -47,7 +49,6 @@
 import           Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
 
 import           Test.Hspec.Core.Util (Path)
-import           Test.Hspec.Compat
 import           Test.Hspec.Core.Spec (Progress, Location)
 
 -- | A lifted version of `Control.Monad.Trans.State.gets`
diff --git a/src/Test/Hspec/Core/QuickCheckUtil.hs b/src/Test/Hspec/Core/QuickCheckUtil.hs
--- a/src/Test/Hspec/Core/QuickCheckUtil.hs
+++ b/src/Test/Hspec/Core/QuickCheckUtil.hs
@@ -1,9 +1,10 @@
 {-# LANGUAGE CPP #-}
 module Test.Hspec.Core.QuickCheckUtil where
 
-import           Control.Applicative
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           Data.Int
-import           Data.IORef
 import           Test.QuickCheck hiding (Result(..))
 import           Test.QuickCheck as QC
 import           Test.QuickCheck.Property hiding (Result(..))
diff --git a/src/Test/Hspec/Core/Runner.hs b/src/Test/Hspec/Core/Runner.hs
--- a/src/Test/Hspec/Core/Runner.hs
+++ b/src/Test/Hspec/Core/Runner.hs
@@ -16,9 +16,10 @@
 , configAddFilter
 ) where
 
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           Control.Monad
-import           Control.Applicative
-import           Data.Monoid
 import           Data.Maybe
 import           System.IO
 import           System.Environment (getProgName, getArgs, withArgs)
@@ -29,7 +30,6 @@
 import qualified Test.QuickCheck as QC
 import           Control.Monad.IO.Class (liftIO)
 
-import           Test.Hspec.Compat (lookupEnv)
 import           Test.Hspec.Core.Util (Path)
 import           Test.Hspec.Core.Spec
 import           Test.Hspec.Config
diff --git a/src/Test/Hspec/Core/Runner/Eval.hs b/src/Test/Hspec/Core/Runner/Eval.hs
--- a/src/Test/Hspec/Core/Runner/Eval.hs
+++ b/src/Test/Hspec/Core/Runner/Eval.hs
@@ -1,7 +1,9 @@
 module Test.Hspec.Core.Runner.Eval (runFormatter) where
 
-import           Control.Applicative
-import           Control.Monad
+import           Prelude ()
+import           Test.Hspec.Compat
+
+import           Control.Monad (unless, when)
 import qualified Control.Exception as E
 import           Control.Concurrent
 import           System.IO (Handle)
diff --git a/src/Test/Hspec/Core/Spec/Monad.hs b/src/Test/Hspec/Core/Spec/Monad.hs
--- a/src/Test/Hspec/Core/Spec/Monad.hs
+++ b/src/Test/Hspec/Core/Spec/Monad.hs
@@ -13,7 +13,9 @@
 , modifyParams
 ) where
 
-import           Control.Applicative
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           Control.Monad.Trans.Writer
 import           Control.Monad.IO.Class (liftIO)
 
diff --git a/src/Test/Hspec/Core/Tree.hs b/src/Test/Hspec/Core/Tree.hs
--- a/src/Test/Hspec/Core/Tree.hs
+++ b/src/Test/Hspec/Core/Tree.hs
@@ -11,10 +11,8 @@
 , specItem
 ) where
 
-import           Control.Applicative
-import           Data.Foldable
-import           Data.Traversable
-import           Data.Monoid
+import           Prelude ()
+import           Test.Hspec.Compat
 
 import           Test.Hspec.Core.Example
 
diff --git a/src/Test/Hspec/Options.hs b/src/Test/Hspec/Options.hs
--- a/src/Test/Hspec/Options.hs
+++ b/src/Test/Hspec/Options.hs
@@ -6,14 +6,14 @@
 , parseOptions
 ) where
 
-import           Control.Applicative
-import           Data.List
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           System.IO
 import           System.Exit
 import           System.Console.GetOpt
 
 import           Test.Hspec.Core.Formatters
-import           Test.Hspec.Compat
 import           Test.Hspec.Core.Util
 import           Test.Hspec.Core.Example (Params(..), defaultParams)
 
diff --git a/test/Helper.hs b/test/Helper.hs
--- a/test/Helper.hs
+++ b/test/Helper.hs
@@ -1,7 +1,7 @@
 module Helper (
   module Test.Hspec.Meta
+, module Test.Hspec.Compat
 , module Test.QuickCheck
-, module Control.Applicative
 , module System.IO.Silently
 , sleep
 , timeout
@@ -20,11 +20,12 @@
 , shouldUseArgs
 ) where
 
+import           Prelude ()
+import           Test.Hspec.Compat
+
 import           Data.List
 import           Data.Char
-import           Data.IORef
 import           Control.Monad
-import           Control.Applicative
 import           System.Environment (withArgs)
 import           System.Exit
 import           Control.Concurrent
diff --git a/test/Mock.hs b/test/Mock.hs
--- a/test/Mock.hs
+++ b/test/Mock.hs
@@ -1,7 +1,7 @@
 module Mock where
 
-import           Control.Applicative
-import           Data.IORef
+import           Prelude ()
+import           Test.Hspec.Compat
 
 newtype Mock = Mock (IORef Int)
 
diff --git a/test/Test/Hspec/CompatSpec.hs b/test/Test/Hspec/CompatSpec.hs
--- a/test/Test/Hspec/CompatSpec.hs
+++ b/test/Test/Hspec/CompatSpec.hs
@@ -3,8 +3,6 @@
 
 import           Helper
 import           System.SetEnv
-
-import           Test.Hspec.Compat
 import           Data.Typeable
 
 data SomeType = SomeType
diff --git a/test/Test/Hspec/Core/ExampleSpec.hs b/test/Test/Hspec/Core/ExampleSpec.hs
--- a/test/Test/Hspec/Core/ExampleSpec.hs
+++ b/test/Test/Hspec/Core/ExampleSpec.hs
@@ -4,7 +4,6 @@
 import           Helper
 import           Mock
 import           Data.List
-import           Data.IORef
 
 import qualified Test.Hspec.Core.Example as H
 import qualified Test.Hspec.Core.Spec as H
diff --git a/test/Test/Hspec/Core/FormattersSpec.hs b/test/Test/Hspec/Core/FormattersSpec.hs
--- a/test/Test/Hspec/Core/FormattersSpec.hs
+++ b/test/Test/Hspec/Core/FormattersSpec.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP #-}
 module Test.Hspec.Core.FormattersSpec (main, spec) where
 
+import           Prelude ()
 import           Helper
 
 import qualified Test.Hspec.Core.Spec as H
diff --git a/test/Test/Hspec/Core/HooksSpec.hs b/test/Test/Hspec/Core/HooksSpec.hs
--- a/test/Test/Hspec/Core/HooksSpec.hs
+++ b/test/Test/Hspec/Core/HooksSpec.hs
@@ -1,7 +1,7 @@
 module Test.Hspec.Core.HooksSpec (main, spec) where
 
+import           Prelude ()
 import           Helper
-import           Data.IORef
 
 import qualified Test.Hspec.Core.Spec as H
 import qualified Test.Hspec.Core.Runner as H
diff --git a/test/Test/Hspec/Core/RunnerSpec.hs b/test/Test/Hspec/Core/RunnerSpec.hs
--- a/test/Test/Hspec/Core/RunnerSpec.hs
+++ b/test/Test/Hspec/Core/RunnerSpec.hs
@@ -1,15 +1,16 @@
 module Test.Hspec.Core.RunnerSpec (main, spec) where
 
+import           Prelude ()
 import           Helper
+
 import           System.IO (stderr)
-import           Control.Monad
+import           Control.Monad (replicateM_)
 import           System.Environment (withArgs, withProgName, getArgs)
 import           System.Exit
 import           Control.Concurrent
 import qualified Control.Exception as E
 import           Mock
 import           System.SetEnv
-import           Test.Hspec.Compat
 
 import           Test.Hspec.FailureReport (FailureReport(..))
 import qualified Test.Hspec.Core.Spec as H
@@ -95,33 +96,46 @@
 
       it "reuses the same seed" $ do
         r <- runPropFoo ["--seed", "42"]
-        runPropFoo ["-r"] `shouldReturn` r
+        runPropFoo ["--rerun"] `shouldReturn` r
 
       forM_ quickCheckOptions $ \(flag, accessor) -> do
         it ("reuses same " ++ flag) $ do
           [flag, "23"] `shouldUseArgs` ((== 23) . accessor)
           ["--rerun"] `shouldUseArgs` ((== 23) . accessor)
 
+      context "when no examples failed previously" $ do
+        it "runs all examples" $ do
+          let run = capture_ . H.hspec $ do
+                H.it "example 1" True
+                H.it "example 2" True
+                H.it "example 3" True
+
+          r0 <- run
+          r0 `shouldContain` "3 examples, 0 failures"
+
+          r1 <- withArgs ["--rerun"] run
+          r1 `shouldContain` "3 examples, 0 failures"
+
       context "when there is no failure report in the environment" $ do
         it "runs everything" $ do
           unsetEnv "HSPEC_FAILURES"
-          r <- hSilence [stderr] $ withArgs ["-r"] runSpec
+          r <- hSilence [stderr] $ withArgs ["--rerun"] runSpec
           r `shouldSatisfy` elem "5 examples, 3 failures"
 
         it "prints a warning to stderr" $ do
           unsetEnv "HSPEC_FAILURES"
-          r <- hCapture_ [stderr] $ withArgs ["-r"] runSpec
+          r <- hCapture_ [stderr] $ withArgs ["--rerun"] runSpec
           r `shouldBe` "WARNING: Could not read environment variable HSPEC_FAILURES; `--rerun' is ignored!\n"
 
       context "when parsing of failure report fails" $ do
         it "runs everything" $ do
           setEnv "HSPEC_FAILURES" "some invalid report"
-          r <- hSilence [stderr] $ withArgs ["-r"] runSpec
+          r <- hSilence [stderr] $ withArgs ["--rerun"] runSpec
           r `shouldSatisfy` elem "5 examples, 3 failures"
 
         it "prints a warning to stderr" $ do
           setEnv "HSPEC_FAILURES" "some invalid report"
-          r <- hCapture_ [stderr] $ withArgs ["-r"] runSpec
+          r <- hCapture_ [stderr] $ withArgs ["--rerun"] runSpec
           r `shouldBe` "WARNING: Could not read environment variable HSPEC_FAILURES; `--rerun' is ignored!\n"
 
 
diff --git a/test/Test/Hspec/Core/SpecSpec.hs b/test/Test/Hspec/Core/SpecSpec.hs
--- a/test/Test/Hspec/Core/SpecSpec.hs
+++ b/test/Test/Hspec/Core/SpecSpec.hs
@@ -1,5 +1,6 @@
 module Test.Hspec.Core.SpecSpec (main, spec) where
 
+import           Prelude ()
 import           Helper
 
 import           Test.Hspec.Core.Spec (Item(..), Result(..))
