diff --git a/hspec-wai.cabal b/hspec-wai.cabal
--- a/hspec-wai.cabal
+++ b/hspec-wai.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.2.
+-- This file has been generated from package.yaml by hpack version 0.39.1.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: cdec1913966ee86da27fb743e19bf06bc5822fe4611e017391f8d476ef5a6cc5
 
 name:             hspec-wai
-version:          0.10.1
+version:          0.12.0
 homepage:         https://github.com/hspec/hspec-wai#readme
 bug-reports:      https://github.com/hspec/hspec-wai/issues
 license:          MIT
@@ -35,7 +33,7 @@
   ghc-options: -Wall
   build-depends:
       QuickCheck
-    , base ==4.*
+    , base >=4.9.1.0 && <5
     , base-compat
     , bytestring >=0.10
     , case-insensitive
@@ -45,7 +43,7 @@
     , text
     , transformers
     , wai >=3
-    , wai-extra >=3
+    , wai-extra >=3.1.14
   exposed-modules:
       Test.Hspec.Wai
       Test.Hspec.Wai.QuickCheck
@@ -63,9 +61,11 @@
       src
       test
   ghc-options: -Wall
+  build-tool-depends:
+      hspec-discover:hspec-discover
   build-depends:
       QuickCheck
-    , base ==4.*
+    , base >=4.9.1.0 && <5
     , base-compat
     , bytestring >=0.10
     , case-insensitive
@@ -75,8 +75,8 @@
     , http-types
     , text
     , transformers
-    , wai >=3
-    , wai-extra >=3
+    , wai >=3.2.2
+    , wai-extra >=3.1.14
   other-modules:
       Test.Hspec.Wai
       Test.Hspec.Wai.Internal
diff --git a/src/Test/Hspec/Wai.hs b/src/Test/Hspec/Wai.hs
--- a/src/Test/Hspec/Wai.hs
+++ b/src/Test/Hspec/Wai.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PackageImports #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE ConstraintKinds #-}
@@ -36,15 +37,17 @@
 , getState
 , pending
 , pendingWith
+, SResponse(..)
 ) where
 
 import           Prelude ()
-import           Prelude.Compat
+import "base-compat" Prelude.Compat
 
 import           Data.Foldable
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy as LB
 import           Control.Monad.IO.Class
+import           Control.Monad.Trans.Class (lift)
 import           Network.Wai (Request(..))
 import           Network.HTTP.Types
 import           Network.Wai.Test hiding (request)
@@ -141,7 +144,7 @@
 -- | Perform a request to the application under test, with specified HTTP
 -- method, request path, headers and body.
 request :: Method -> ByteString -> [Header] -> LB.ByteString -> WaiSession st SResponse
-request method path headers body = getApp >>= liftIO . runSession (Wai.srequest $ SRequest req body)
+request method path headers = WaiSession . lift . Wai.srequest . SRequest req
   where
     req = setPath defaultRequest {requestMethod = method, requestHeaders = headers} path
 
diff --git a/src/Test/Hspec/Wai/Internal.hs b/src/Test/Hspec/Wai/Internal.hs
--- a/src/Test/Hspec/Wai/Internal.hs
+++ b/src/Test/Hspec/Wai/Internal.hs
@@ -14,9 +14,6 @@
 , formatHeader
 ) where
 
-import           Prelude ()
-import           Prelude.Compat
-
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Class
 import           Control.Monad.Trans.Reader
@@ -25,7 +22,7 @@
 import           Test.Hspec.Core.Spec
 import           Test.Hspec.Wai.Util (formatHeader)
 
-#if MIN_VERSION_base(4,9,0)
+#if MIN_VERSION_base(4,9,0) && !MIN_VERSION_base(4,13,0)
 import           Control.Monad.Fail
 #endif
 
diff --git a/src/Test/Hspec/Wai/Matcher.hs b/src/Test/Hspec/Wai/Matcher.hs
--- a/src/Test/Hspec/Wai/Matcher.hs
+++ b/src/Test/Hspec/Wai/Matcher.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PackageImports #-}
 {-# LANGUAGE ViewPatterns #-}
 module Test.Hspec.Wai.Matcher (
   ResponseMatcher(..)
@@ -11,7 +12,7 @@
 ) where
 
 import           Prelude ()
-import           Prelude.Compat
+import "base-compat" Prelude.Compat
 
 import           Control.Monad
 import           Data.Maybe
diff --git a/src/Test/Hspec/Wai/Util.hs b/src/Test/Hspec/Wai/Util.hs
--- a/src/Test/Hspec/Wai/Util.hs
+++ b/src/Test/Hspec/Wai/Util.hs
@@ -12,8 +12,8 @@
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as B8
 import qualified Data.ByteString.Lazy as LB
-import           Data.ByteString.Lazy.Builder (Builder)
-import qualified Data.ByteString.Lazy.Builder as Builder
+import           Data.ByteString.Builder (Builder)
+import qualified Data.ByteString.Builder as Builder
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import qualified Data.CaseInsensitive as CI
diff --git a/test/Test/Hspec/WaiSpec.hs b/test/Test/Hspec/WaiSpec.hs
--- a/test/Test/Hspec/WaiSpec.hs
+++ b/test/Test/Hspec/WaiSpec.hs
@@ -23,7 +23,7 @@
   requestMethod req `shouldBe` method
   rawPathInfo req `shouldBe` path
   requestHeaders req `shouldBe` headers
-  rawBody <- requestBody req
+  rawBody <- getRequestBodyChunk req
   rawBody `shouldBe` body
   respond $ responseLBS status200 [] ""
 
