diff --git a/network-api-support.cabal b/network-api-support.cabal
--- a/network-api-support.cabal
+++ b/network-api-support.cabal
@@ -1,5 +1,5 @@
 Name:               network-api-support
-Version:            0.3.0
+Version:            0.3.1
 License:            BSD3
 License-File:       LICENSE
 Author:             Mark Hibberd <mark@hibberd.id.au>
@@ -29,13 +29,13 @@
 Library
   Build-Depends:
                     base                          >= 3          && < 6
-                  , aeson                         >= 0.5        && < 0.13
+                  , aeson                         >= 0.5        && < 1.1
                   , attoparsec                    >= 0.10       && < 0.14
                   , bytestring                    >= 0.9.1.5    && < 0.11
                   , case-insensitive              >= 0.2        && < 1.3
                   , http-types                    >= 0.6        && < 0.10
-                  , http-client                   >= 0.2.2.2    && < 0.5
-                  , http-client-tls               >= 0.2.1.1    && < 0.3
+                  , http-client                   >= 0.2.2.2    && < 0.6
+                  , http-client-tls               >= 0.2.1.1    && < 0.4
                   , text                          >= 0.11       && < 1.3
                   , time                          == 1.*
                   , tls                           >= 1.2.0      && < 1.4
diff --git a/src/Network/Api/Support/Core.hs b/src/Network/Api/Support/Core.hs
--- a/src/Network/Api/Support/Core.hs
+++ b/src/Network/Api/Support/Core.hs
@@ -1,7 +1,9 @@
-{-# LANGUAGE OverloadedStrings, FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings, FlexibleContexts, CPP #-}
 module Network.Api.Support.Core (
   runRequest
 , runRequest'
+, runRequestWith
+, runRequestWith'
 ) where
 
 import Network.Api.Support.Request
@@ -28,6 +30,20 @@
 runRequest settings stdmethod url transform  =
   runRequest' settings url (transform <> setMethod (renderStdMethod stdmethod))
 
+-- | Run a request using the specified settings, method, url and request transformer.
+--
+--   Prefer this to runRequest as recreating the manager every time is very inefficient.
+--
+runRequestWith ::
+  Manager
+  -> StdMethod
+  -> Text
+  -> RequestTransformer
+  -> Responder b
+  -> IO b
+runRequestWith manager stdmethod url transform  =
+  runRequestWith' manager url (transform <> setMethod (renderStdMethod stdmethod))
+
 -- | Run a request using the specified settings, url and request transformer. The method
 -- | can be set using the setMethod transformer. This is only useful if you require a
 -- | custom http method. Prefer runRequest where possible.
@@ -37,9 +53,33 @@
   -> RequestTransformer
   -> Responder b
   -> IO b
-runRequest' settings url transform responder =
-  do url' <- parseRequest $ unpack url
+runRequest' settings url transform responder = do
+  manager <- newManager settings
+  runRequestWith' manager url transform responder
+
+-- | Run a request using the specified manager, url and request transformer. The method
+--   can be set using the setMethod transformer. This is only useful if you require a
+--   custom http method. Prefer runRequest where possible.
+--
+--   Prefer this to runRequest' as recreating the manager every time is very inefficient.
+--
+runRequestWith' ::
+  Manager
+  -> Text
+  -> RequestTransformer
+  -> Responder b
+  -> IO b
+runRequestWith' manager url transform responder =
+-- To achieve backwards compatibility for http-client<0.4.30
+-- parseURL needs to be used and the default `checkStatus` handler
+-- overridden to disable the trapping of non-2xx HTTP response codes.
+-- Thereafter `parseRequest` can be used which does not trap any
+-- reponse codes (the required behaviour).
+#if MIN_VERSION_http_client(0,4,30)
+  do url'' <- parseRequest $ unpack url
+#else
+  do url'  <- parseUrl     $ unpack url
      let url'' = url' { checkStatus = const . const . const $ Nothing } -- handle all response codes.
+#endif
      let req = appEndo transform url''
-     manager <- newManager settings
      liftM (responder req) $ httpLbs req manager
diff --git a/src/Network/Api/Support/Response.hs b/src/Network/Api/Support/Response.hs
--- a/src/Network/Api/Support/Response.hs
+++ b/src/Network/Api/Support/Response.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE OverloadedStrings, FlexibleContexts, CPP #-}
 module Network.Api.Support.Response (
   Responder
 , JsonResult (..)
@@ -5,6 +6,10 @@
 , parseBodyWith
 , basicResponder
 ) where
+
+#if ! MIN_VERSION_base(4,8,0)
+import Control.Applicative
+#endif
 
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Lazy as BL
