diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 # Changelog
 
-### 0.5.1.1
+### 0.5.2
+
+* Add `toLbs` function to be used by rest-gen.
+
+#### 0.5.1.1
 
 * Allow http-conduit 2.2.*
 
diff --git a/rest-client.cabal b/rest-client.cabal
--- a/rest-client.cabal
+++ b/rest-client.cabal
@@ -1,5 +1,5 @@
 name:                rest-client
-version:             0.5.1.1
+version:             0.5.2.1
 description:         Utility library for use in generated API client libraries.
 synopsis:            Utility library for use in generated API client libraries.
 maintainer:          code@silk.co
@@ -31,8 +31,8 @@
     , data-default >= 0.5 && < 0.8
     , exceptions == 0.8.*
     , http-client >= 0.3 && < 0.6
-    , http-conduit >= 2.1 && < 2.3
-    , http-types >= 0.7 && < 0.10
+    , http-conduit >= 2.1 && < 2.4
+    , http-types >= 0.7 && < 0.12
     , hxt >= 9.2 && < 9.4
     , hxt-pickle-utils == 0.1.*
     , monad-control (>= 0.3.3.1 && < 0.4) || (>= 1.0.0.3 && < 1.1)
diff --git a/src/Rest/Client/Base.hs b/src/Rest/Client/Base.hs
--- a/src/Rest/Client/Base.hs
+++ b/src/Rest/Client/Base.hs
@@ -1,4 +1,7 @@
-{-# OPTIONS -fno-warn-orphans -fno-warn-deprecations #-}
+{-# OPTIONS_GHC
+  -fno-warn-deprecations
+  -fno-warn-orphans
+  #-}
 {-# LANGUAGE
     CPP
   , DeriveFunctor
@@ -9,6 +12,10 @@
   , TypeFamilies
   , UndecidableInstances
   #-}
+#if MIN_VERSION_base(4,9,0)
+{-# OPTIONS_GHC -Wno-redundant-constraints #-}
+#endif
+
 module Rest.Client.Base
   ( ApiInfo(..)
   , ApiState(..)
@@ -26,7 +33,6 @@
 import Prelude hiding (catch)
 #endif
 
-import Control.Applicative
 import Control.Monad.Base
 import Control.Monad.Catch (MonadCatch (catch))
 import Control.Monad.Cont hiding (mapM)
@@ -42,6 +48,7 @@
 import Data.ByteString
 import Data.CaseInsensitive
 import Network.HTTP.Conduit hiding (method, responseBody)
+import Network.HTTP.Client (defaultManagerSettings)
 
 import Rest.Types.Error
 
@@ -53,10 +60,11 @@
    , headers :: [(String, String)]
    }
 
-data ApiState = ApiState { cookies :: CookieJar }
+newtype ApiState = ApiState { cookies :: CookieJar }
 
 newtype ApiT m a = ApiT { unApiT :: StateT ApiState (ReaderT ApiInfo (ResourceT m)) a }
-  deriving ( Functor, Applicative
+  deriving ( Applicative
+           , Functor
            , Monad
            , MonadIO
            )
@@ -92,8 +100,8 @@
 #else
 instance MonadTransControl ApiT where
   newtype StT ApiT a = StTApiT { unStTApiT :: StT ResourceT (StT (ReaderT ApiInfo) (StT (StateT ApiState) a)) }
-  liftWith f = ApiT (liftWith (\runs -> liftWith (\runrr -> liftWith (\runrs -> f (liftM StTApiT . runrs . runrr . runs . unApiT)))))
-  restoreT = ApiT . restoreT . restoreT . restoreT . liftM unStTApiT
+  liftWith f = ApiT (liftWith (\runs -> liftWith (\runrr -> liftWith (\runrs -> f (fmap StTApiT . runrs . runrr . runs . unApiT)))))
+  restoreT = ApiT . restoreT . restoreT . restoreT . fmap unStTApiT
 
 instance MonadBaseControl v m => MonadBaseControl v (ApiT m) where
   newtype StM (ApiT m) a = StMApiT { unStMApiT :: ComposeSt ApiT m a }
@@ -143,15 +151,16 @@
   askApiInfo  = lift askApiInfo
   putApiState = lift . putApiState
 
-runT :: (MonadBaseControl IO m, Monad m) => ApiInfo -> ApiState -> ApiT m a -> ResourceT m a
+runT :: MonadBaseControl IO m => ApiInfo -> ApiState -> ApiT m a -> ResourceT m a
 runT inf st api = runReaderT (evalStateT (unApiT api) st) inf
 
 run :: String -> ApiT IO a -> IO a
 run = flip runWithPort 80
 
 runWithPort :: String -> Int -> ApiT IO a -> IO a
-runWithPort hst prt api =
-  withManager $ \m ->
+runWithPort hst prt api = do
+  m <- newManager defaultManagerSettings
+  runResourceT $ do
     runT (ApiInfo m hst prt []) (ApiState (createCookieJar [])) api
 
 data ApiResponse e a  =
diff --git a/src/Rest/Client/Internal.hs b/src/Rest/Client/Internal.hs
--- a/src/Rest/Client/Internal.hs
+++ b/src/Rest/Client/Internal.hs
@@ -1,10 +1,12 @@
 {-# LANGUAGE
     CPP
   , FlexibleInstances
-  , OverlappingInstances
   , OverloadedStrings
   , UndecidableInstances
   #-}
+
+#include "overlapping-compat.h"
+
 module Rest.Client.Internal
   ( module Control.Monad
   , module Data.String
@@ -26,6 +28,7 @@
   , toJSON
   , fromXML
   , toXML
+  , toLbs
 
   , makeReq
   , doReq
@@ -39,7 +42,6 @@
 import Data.Default (def)
 #endif
 import Data.List
-import Data.Monoid
 import Data.String
 import Data.String.ToString
 import Network.HTTP.Conduit hiding (method, responseBody, responseHeaders)
@@ -58,6 +60,8 @@
 
 import Rest.Client.Base
 
+{-# ANN module ("HLint: ignore Use import/export shortcut"::String) #-}
+
 data ApiRequest = ApiRequest
   { method         :: String
   , uri            :: String
@@ -88,9 +92,9 @@
 splitHost = break (== '/')
 
 doRequest :: ApiStateC m => (L.ByteString -> Rest.Types.Error.Reason e) -> (L.ByteString -> a) -> ApiRequest -> m (ApiResponse e a)
-doRequest a b = liftM (parseResult a b) . doReq
+doRequest a b = fmap (parseResult a b) . doReq
 
-doReq :: (ApiStateC m, MonadIO m) => ApiRequest -> m (Response L.ByteString)
+doReq :: ApiStateC m => ApiRequest -> m (Response L.ByteString)
 doReq (ApiRequest m ur ps rhds bd) =
   do mn  <- fmap manager askApiInfo
      hst <- fmap apiHost askApiInfo
@@ -139,6 +143,9 @@
 toJSON :: ToJSON a => a -> L.ByteString
 toJSON = encode
 
+toLbs :: String -> L.ByteString
+toLbs = L.fromString
+
 class XmlStringToType a where
   fromXML :: L.ByteString -> a
   toXML :: a -> L.ByteString
@@ -147,7 +154,7 @@
   fromXML = L.toString
   toXML = L.fromString
 
-instance XmlPickler a => XmlStringToType a where
+instance OVERLAPPABLE_ XmlPickler a => XmlStringToType a where
   fromXML v = ( either err id
               . P.eitherFromXML
               . L.toString
@@ -158,4 +165,3 @@
 
 makeReq :: String -> String -> [[String]] -> [(String, String)] -> Network.HTTP.Types.Header.RequestHeaders -> L.ByteString -> ApiRequest
 makeReq meth v ls = ApiRequest meth (intercalate "/" (v : map URI.encode (concat ls)))
-
