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/src/Test/Hspec/Compat.hs b/hspec-core/src/Test/Hspec/Compat.hs
--- a/hspec-core/src/Test/Hspec/Compat.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Config.hs b/hspec-core/src/Test/Hspec/Config.hs
--- a/hspec-core/src/Test/Hspec/Config.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Formatters.hs b/hspec-core/src/Test/Hspec/Core/Formatters.hs
--- a/hspec-core/src/Test/Hspec/Core/Formatters.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Formatters/Internal.hs b/hspec-core/src/Test/Hspec/Core/Formatters/Internal.hs
--- a/hspec-core/src/Test/Hspec/Core/Formatters/Internal.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Hooks.hs b/hspec-core/src/Test/Hspec/Core/Hooks.hs
--- a/hspec-core/src/Test/Hspec/Core/Hooks.hs
+++ b/hspec-core/src/Test/Hspec/Core/Hooks.hs
@@ -4,6 +4,7 @@
 , before_
 , beforeWith
 , beforeAll
+, beforeAll_
 , after
 , after_
 , afterAll
@@ -36,6 +37,13 @@
   mvar <- runIO (newMVar Nothing)
   let action_ = memoize mvar action
   before action_ spec
+
+-- | Run a custom action before the first spec item.
+beforeAll_ :: IO () -> SpecWith a -> SpecWith a
+beforeAll_ action spec = do
+  mvar <- runIO (newMVar Nothing)
+  let action_ = memoize mvar action
+  before_ action_ spec
 
 memoize :: MVar (Maybe a) -> IO a -> IO a
 memoize mvar action = modifyMVar mvar $ \ma -> case ma of
diff --git a/hspec-core/src/Test/Hspec/Core/QuickCheckUtil.hs b/hspec-core/src/Test/Hspec/Core/QuickCheckUtil.hs
--- a/hspec-core/src/Test/Hspec/Core/QuickCheckUtil.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Runner.hs b/hspec-core/src/Test/Hspec/Core/Runner.hs
--- a/hspec-core/src/Test/Hspec/Core/Runner.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Runner/Eval.hs b/hspec-core/src/Test/Hspec/Core/Runner/Eval.hs
--- a/hspec-core/src/Test/Hspec/Core/Runner/Eval.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Spec/Monad.hs b/hspec-core/src/Test/Hspec/Core/Spec/Monad.hs
--- a/hspec-core/src/Test/Hspec/Core/Spec/Monad.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Core/Tree.hs b/hspec-core/src/Test/Hspec/Core/Tree.hs
--- a/hspec-core/src/Test/Hspec/Core/Tree.hs
+++ b/hspec-core/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/hspec-core/src/Test/Hspec/Options.hs b/hspec-core/src/Test/Hspec/Options.hs
--- a/hspec-core/src/Test/Hspec/Options.hs
+++ b/hspec-core/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/hspec-meta.cabal b/hspec-meta.cabal
--- a/hspec-meta.cabal
+++ b/hspec-meta.cabal
@@ -1,8 +1,8 @@
 name:             hspec-meta
-version:          2.1.5
+version:          2.1.7
 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>
diff --git a/src/Test/Hspec.hs b/src/Test/Hspec.hs
--- a/src/Test/Hspec.hs
+++ b/src/Test/Hspec.hs
@@ -33,6 +33,7 @@
 , before_
 , beforeWith
 , beforeAll
+, beforeAll_
 , after
 , after_
 , afterAll
diff --git a/src/Test/Hspec/Discover.hs b/src/Test/Hspec/Discover.hs
--- a/src/Test/Hspec/Discover.hs
+++ b/src/Test/Hspec/Discover.hs
@@ -10,10 +10,11 @@
 , describe
 ) where
 
+import           Prelude hiding (mapM)
 import           Control.Applicative
 import           Data.Maybe
 import           Data.List
-import           Data.Traversable hiding (mapM)
+import           Data.Traversable
 import           Control.Monad.Trans.State
 
 import           Test.Hspec.Core.Spec
diff --git a/src/Test/Hspec/Meta.hs b/src/Test/Hspec/Meta.hs
--- a/src/Test/Hspec/Meta.hs
+++ b/src/Test/Hspec/Meta.hs
@@ -1,5 +1,10 @@
 {-# OPTIONS_GHC -fno-warn-deprecations #-}
-module Test.Hspec.Meta (module Test.Hspec, module Test.Hspec.Discover) where
+module Test.Hspec.Meta (
+  module Test.Hspec
+, module Test.Hspec.Discover
+, hspecResult
+) where
 
 import           Test.Hspec
+import           Test.Hspec.Runner
 import           Test.Hspec.Discover
