diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## 0.3.0.0
+
+* Replace runT' -> runT, use runResourceT (runT ...) if you want the old behavior
+
+* Allow `http-conduit == 2.1.*
+
 #### 0.2.3.5
 
 * Allow `mtl == 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.2.3.5
+version:             0.3.0.0
 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,13 +31,15 @@
     , case-insensitive >= 0.4 && < 1.3
     , data-default == 0.5.*
     , exception-transformers == 0.3.*
-    , http-conduit >= 1.9.2.1 && < 2.2
+    , http-conduit == 2.1.*
     , http-types >= 0.7 && < 0.9
     , hxt >= 9.2 && < 9.4
     , hxt-pickle-utils == 0.1.*
     , monad-control == 0.3.*
     , mtl >= 2.0 && < 2.3
-    , resourcet >= 0.4 && < 0.5
+    , resourcet == 1.1.*
+    , primitive == 0.5.*
+    , exceptions >= 0.5 && < 0.7
     , rest-types == 1.10.*
     , tostring == 0.2.*
     , transformers-base == 0.4.*
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
@@ -32,6 +32,7 @@
 import Control.Monad.Error hiding (mapM)
 import Control.Monad.Exception
 import Control.Monad.List hiding (mapM)
+import Control.Monad.Primitive (PrimMonad)
 import Control.Monad.RWS hiding (mapM)
 import Control.Monad.Reader hiding (mapM)
 import Control.Monad.State hiding (mapM)
@@ -62,12 +63,12 @@
 
 type Api = ApiT IO
 
-class (MonadResource m, MonadBaseControl IO m, Monad m, Functor m, MonadUnsafeIO m) => ApiStateC m where
+class (MonadResource m, MonadBaseControl IO m, Monad m, Functor m, MonadBase IO m, PrimMonad IO) => ApiStateC m where
   getApiState     :: m ApiState
   putApiState     :: ApiState -> m ()
   askApiInfo      :: m ApiInfo
 
-instance (MonadBaseControl IO m, Monad m, Functor m, MonadUnsafeIO m, MonadIO m, MonadThrow m) => ApiStateC (ApiT m) where
+instance (MonadBaseControl IO m, Monad m, Functor m, MonadBase IO m, PrimMonad IO, MonadIO m, MonadThrow m) => ApiStateC (ApiT m) where
   getApiState    = ApiT get
   putApiState    = ApiT . put
   askApiInfo     = ApiT (lift ask)
@@ -96,9 +97,9 @@
   throw     = lift . throw
   catch c f = ApiT (unApiT c `catch` (unApiT . f))
 
-instance MonadThrow m => MonadThrow (ApiT m) where monadThrow = ApiT . lift . lift . lift . monadThrow
+instance MonadThrow m => MonadThrow (ApiT m) where throwM = ApiT . lift . lift . lift . throwM
 
-instance (MonadIO m, MonadThrow m, MonadUnsafeIO m, Functor m, Applicative m) => MonadResource (ApiT m) where
+instance (MonadIO m, MonadThrow m, MonadBase IO m, PrimMonad IO, Functor m, Applicative m) => MonadResource (ApiT m) where
   liftResourceT = ApiT . lift . lift . transResourceT liftIO
 
 instance (Error e, ApiStateC m) => ApiStateC (ErrorT e m) where
@@ -131,11 +132,8 @@
   askApiInfo  = lift askApiInfo
   putApiState = lift . putApiState
 
-runT :: (MonadBaseControl IO m, Monad m) => ApiInfo -> ApiState -> ApiT m a -> m a
-runT inf st api = runResourceT $ runT' inf st api
-
-runT' :: (MonadBaseControl IO m, Monad m) => ApiInfo -> ApiState -> ApiT m a -> ResourceT m a
-runT' inf st api = runReaderT (evalStateT (unApiT api) st) inf
+runT :: (MonadBaseControl IO m, Monad 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
@@ -143,7 +141,7 @@
 runWithPort :: String -> Int -> ApiT IO a -> IO a
 runWithPort hst prt api =
   withManager $ \m ->
-    runT' (ApiInfo m hst prt []) (ApiState (createCookieJar [])) api
+    runT (ApiInfo m hst prt []) (ApiState (createCookieJar [])) api
 
 data ApiResponse e a  =
   ApiResponse
