diff --git a/hspec.cabal b/hspec.cabal
--- a/hspec.cabal
+++ b/hspec.cabal
@@ -1,5 +1,5 @@
 name:             hspec
-version:          1.11.1
+version:          1.11.2
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2011-2014 Simon Hengel,
diff --git a/src/Test/Hspec.hs b/src/Test/Hspec.hs
--- a/src/Test/Hspec.hs
+++ b/src/Test/Hspec.hs
@@ -23,6 +23,7 @@
 , pending
 , pendingWith
 , before
+, beforeAll
 , after
 , around
 , parallel
@@ -33,6 +34,7 @@
 ) where
 
 import           Control.Exception (finally)
+import           Control.Concurrent.MVar
 
 import           Test.Hspec.Core.Type hiding (describe, it)
 import           Test.Hspec.Runner
@@ -88,6 +90,22 @@
 -- | Run a custom action before every spec item.
 before :: IO () -> Spec -> Spec
 before action = around (action >>)
+
+-- | Run a custom action before all spec items.
+beforeAll :: IO () -> Spec -> Spec
+beforeAll action = fromSpecList . return . BuildSpecs . go
+  where
+    go spec = do
+      mvar <- newMVar Nothing
+      let action_ = memoize mvar action
+      runSpecM $ before action_ spec
+
+memoize :: MVar (Maybe a) -> IO a -> IO a
+memoize mvar action = modifyMVar mvar $ \ma -> case ma of
+  Just a -> return (ma, a)
+  Nothing -> do
+    a <- action
+    return (Just a, a)
 
 -- | Run a custom action after every spec item.
 after :: IO () -> Spec -> Spec
diff --git a/test/Test/HspecSpec.hs b/test/Test/HspecSpec.hs
--- a/test/Test/HspecSpec.hs
+++ b/test/Test/HspecSpec.hs
@@ -111,6 +111,21 @@
           H.it "foo" $ do
             readIORef ref `shouldReturn` 2
 
+  describe "beforeAll" $ do
+    it "runs an action before the first spec item" $ do
+      ref <- newIORef ([] :: [String])
+      let append n = modifyIORef ref (++ return n)
+      silence $ H.hspec $ H.beforeAll (append "beforeAll") $ do
+        H.it "foo" $ do
+          append "foo"
+        H.it "bar" $ do
+          append "bar"
+      readIORef ref `shouldReturn` [
+          "beforeAll"
+        , "foo"
+        , "bar"
+        ]
+
   describe "after" $ do
     it "runs an action after each spec item" $ do
       mock <- newMock
