diff --git a/Spock-core.cabal b/Spock-core.cabal
--- a/Spock-core.cabal
+++ b/Spock-core.cabal
@@ -1,5 +1,5 @@
 name:                Spock-core
-version:             0.13.0.0
+version:             0.14.0.0
 synopsis:            Another Haskell web framework for rapid development
 description:         Barebones high performance type safe web framework
 Homepage:            https://www.spock.li
@@ -8,11 +8,11 @@
 license-file:        LICENSE
 author:              Alexander Thiemann <mail@athiemann.net>
 maintainer:          Alexander Thiemann <mail@athiemann.net>
-copyright:           (c) 2013 - 2017 Alexander Thiemann
+copyright:           (c) 2013 - 2020 Alexander Thiemann
 category:            Web
 build-type:          Simple
-cabal-version:       >=1.8
-tested-with:         GHC==7.10.2, GHC==8.0.1
+cabal-version:       >=2.0
+tested-with:         GHC==8.8.4
 
 extra-source-files:
     README.md
@@ -37,16 +37,16 @@
                        case-insensitive >=1.1,
                        containers >=0.5,
                        cookie >=0.4,
-                       directory >=1.2,
                        hashable >=1.2,
                        http-types >=0.8,
                        hvect >= 0.4,
                        monad-control >= 1.0,
+                       mmorph >= 1.1,
                        mtl >=2.1,
                        http-api-data >= 0.2,
                        old-locale >=1.0,
                        reroute >=0.5,
-                       resourcet >= 0.4,
+                       resourcet >= 1.2.2,
                        stm >=2.4,
                        superbuffer >= 0.2,
                        text >= 0.11.3.1,
@@ -59,6 +59,7 @@
                        wai-extra >=3.0,
                        warp >=3.0
   ghc-options: -Wall -fno-warn-orphans
+  default-language:    Haskell2010
 
 test-suite spockcoretests
   type:                exitcode-stdio-1.0
@@ -88,6 +89,7 @@
                        wai
 
   ghc-options: -Wall -fno-warn-orphans
+  default-language:    Haskell2010
 
 source-repository head
   type:     git
diff --git a/src/Web/Spock/Internal/Wire.hs b/src/Web/Spock/Internal/Wire.hs
--- a/src/Web/Spock/Internal/Wire.hs
+++ b/src/Web/Spock/Internal/Wire.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -Wno-warnings-deprecations #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP #-}
@@ -46,9 +47,9 @@
 #else
 import Prelude hiding (catch)
 #endif
-import System.Directory
 import System.IO
 import Web.Routing.Router
+import qualified Control.Monad.Morph as MM
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.ByteString.Lazy.Char8 as BSLC
@@ -273,6 +274,9 @@
 instance MonadTrans (ActionCtxT ctx) where
     lift = ActionCtxT . lift . lift
 
+instance MM.MFunctor (ActionCtxT ctx) where
+    hoist f m = ActionCtxT (MM.hoist (MM.hoist f) (runActionCtxT m))
+
 instance MonadTransControl (ActionCtxT ctx) where
     type StT (ActionCtxT ctx) a = (Either ActionInterupt a, ResponseState, ())
     liftWith f =
@@ -361,7 +365,7 @@
       notFound = respStateToResponse $ errorResponse status404 "404 - File not found"
 
 makeActionEnvironment ::
-    InternalState -> SpockMethod -> Wai.Request -> IO (RequestInfo (), TVar V.Vault, IO ())
+    InternalState -> SpockMethod -> Wai.Request -> IO (RequestInfo (), TVar V.Vault)
 makeActionEnvironment st stdMethod req =
     do vaultVar <- liftIO $ newTVarIO (Wai.vault req)
        let vaultIf =
@@ -373,7 +377,7 @@
                map (\(k, mV) -> (T.decodeUtf8 k, T.decodeUtf8 $ fromMaybe BS.empty mV)) $ Wai.queryString req
        rbValue <-
            newCacheVar $
-           do let parseBody = Wai.requestBody req
+           do let parseBody = Wai.getRequestBodyChunk req
                   bodyLength = Wai.requestBodyLength req
                   buffStart =
                       case bodyLength of
@@ -423,19 +427,8 @@
                 , ri_context = ()
                 }
               , vaultVar
-              , removeUploadedFiles (rb_files reqBody)
               )
 
-removeUploadedFiles :: CacheVar (HM.HashMap k UploadedFile) -> IO ()
-removeUploadedFiles uploadedFilesRef =
-    do cvals <- loadCacheVarOpt uploadedFilesRef
-       case cvals of
-         Nothing -> return ()
-         Just uploadedFiles ->
-             forM_ (HM.elems uploadedFiles) $ \uploadedFile ->
-             do stillThere <- doesFileExist (uf_tempLocation uploadedFile)
-                when stillThere $ liftIO $ removeFile (uf_tempLocation uploadedFile)
-
 applyAction :: MonadIO m
             => SpockConfigInternal
             -> Wai.Request
@@ -508,7 +501,7 @@
            `catch` \(_ :: SizeException) ->
                return (Right $ getErrorHandler config status413)
        case actEnv of
-         Left (mkEnv, vaultVar, cleanUp) ->
+         Left (mkEnv, vaultVar) ->
              do mRespState <-
                     registryLift (applyAction config req mkEnv allActions) `catches`
                       [ Handler $ \(_ :: SizeException) ->
@@ -519,7 +512,6 @@
                                ++ ": " ++ show e
                            return $ Just $ getErrorHandler config status500
                       ]
-                cleanUp
                 case mRespState of
                   Just (ResponseHandler responseHandler) ->
                       responseHandler >>= \app -> app req respond
@@ -546,7 +538,7 @@
     do currentSize <- newIORef 0
        return $ req
                   { Wai.requestBody =
-                        do bs <- Wai.requestBody req
+                        do bs <- Wai.getRequestBodyChunk req
                            total <-
                                atomicModifyIORef currentSize $ \sz ->
                                let !nextSize = sz + fromIntegral (BS.length bs)
