diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+__v0.8.5__
+
+replace Pinboard stack with PinboardT transfomer (use mtl style constraints instead of a fixed monad transformer stack)
+
 __v0.7.5__
 
 replacing/removing io-streams in favor of http-client
diff --git a/pinboard.cabal b/pinboard.cabal
--- a/pinboard.cabal
+++ b/pinboard.cabal
@@ -1,5 +1,5 @@
 name:                pinboard
-version:             0.8.5
+version:             0.8.6
 synopsis:            Access to the Pinboard API
 license:             MIT
 license-file:        LICENSE
diff --git a/src/Pinboard/Client.hs b/src/Pinboard/Client.hs
--- a/src/Pinboard/Client.hs
+++ b/src/Pinboard/Client.hs
@@ -50,7 +50,7 @@
     ) where
 
 
-import Control.Exception          (catch, SomeException, try, bracket)
+import Control.Exception          (catch, SomeException, try)
 import Control.Monad.IO.Class
 import Control.Monad.Reader
 import Control.Monad.Except
@@ -91,14 +91,15 @@
     => PinboardConfig
     -> PinboardT m a
     -> m (Either PinboardError a)
-runPinboard config requests = mgrOpenRaw >>= go
-  where go mgr = runExceptT $ runReaderT requests (config, mgr) 
+runPinboard config f = mgrOpenRaw >>= go
+    where go mgr = runPinboardT (config, mgr) f
 
+
 -- | Create a Pinboard value from a PinboardRequest w/ json deserialization
 pinboardJson :: (MonadPinboard m, FromJSON a) => PinboardRequest -> m a
 pinboardJson req = do 
-  (config, mgr)  <- ask
-  res <- sendPinboardRequest (ensureResultFormatType FormatJson req) config mgr parseJSONResponse
+  env <- ask
+  res <- sendPinboardRequest env (ensureResultFormatType FormatJson req) parseJSONResponse
   res
 
 --------------------------------------------------------------------------------
@@ -109,9 +110,8 @@
     -> PinboardRequest
     -> (Response LBS.ByteString -> a)
     -> m (Either PinboardError a)
-runPinboardSingleRaw config req handler = 
-  liftIO $ bracket mgrOpen return (either (mgrFail ConnectionFailure) go)
-    where go mgr = (Right <$> sendPinboardRequest req config mgr handler)
+runPinboardSingleRaw config req handler = liftIO $ mgrOpenRaw >>= go
+  where go mgr = (Right <$> sendPinboardRequest (config, mgr) req handler)
                     `catch` mgrFail UnknownErrorType
 
 runPinboardSingleRawBS
@@ -137,12 +137,11 @@
 
 sendPinboardRequest
       :: MonadIO m
-      => PinboardRequest 
-      -> PinboardConfig 
-      -> Manager
+      => PinboardEnv
+      -> PinboardRequest 
       -> (Response LBS.ByteString -> a)
       -> m a
-sendPinboardRequest PinboardRequest{..} PinboardConfig{..} man handler = do
+sendPinboardRequest (PinboardConfig{..}, man) PinboardRequest{..} handler = do
    let url = T.concat [ requestPath 
                       , "?" 
                       , T.decodeUtf8 $ paramsToByteString $ ("auth_token", urlEncode False apiToken) : encodeParams requestParams ]
@@ -156,7 +155,7 @@
 buildReq url = do
   req <- liftIO $ parseUrl $ "https://api.pinboard.in/v1/" <> url
   return $ req 
-    { requestHeaders = [("User-Agent","pinboard.hs/0.8.5")]
+    { requestHeaders = [("User-Agent","pinboard.hs/0.8.6")]
     , checkStatus = \_ _ _ -> Nothing
     }
 
diff --git a/src/Pinboard/Client/Types.hs b/src/Pinboard/Client/Types.hs
--- a/src/Pinboard/Client/Types.hs
+++ b/src/Pinboard/Client/Types.hs
@@ -9,7 +9,9 @@
 -- Stability   : experimental
 -- Portability : POSIX
 module Pinboard.Client.Types
-  ( PinboardT
+  ( PinboardEnv
+  , PinboardT
+  , runPinboardT
   , MonadPinboard
   , PinboardRequest (..)
   , PinboardConfig  (..)
@@ -19,26 +21,37 @@
   ) where
 
 import Control.Monad.Reader       (ReaderT)
+import Control.Monad.Reader.Class (MonadReader)
+import Control.Monad.Trans.Except (ExceptT, runExceptT)
+import Control.Monad.Trans.Reader (runReaderT)
+import Control.Monad.Error.Class  (MonadError)
+import Control.Monad.IO.Class     (MonadIO)
+
 import Data.ByteString            (ByteString)
 import Data.Text                  (Text)
-import Network.HTTP.Client        (Manager)
-import Pinboard.Client.Error  (PinboardError (..))
 import Data.Time.Calendar(Day)
 import Data.Time.Clock(UTCTime)
-import Control.Monad.Reader.Class(MonadReader)
-import Control.Monad.Error.Class(MonadError)
-import Control.Monad.IO.Class(MonadIO)
-import Control.Monad.Except(ExceptT)
+import Network.HTTP.Client        (Manager)
 
+import Pinboard.Client.Error  (PinboardError (..))
+
 ------------------------------------------------------------------------------
 
-type PinboardT m a = ReaderT (PinboardConfig, Manager) (ExceptT PinboardError m) a
+type PinboardEnv = (PinboardConfig, Manager)
 
+type PinboardT m a = ReaderT PinboardEnv (ExceptT PinboardError m) a
+
+runPinboardT 
+  :: PinboardEnv
+  -> PinboardT m a
+  -> m (Either PinboardError a)
+runPinboardT e f = runExceptT (runReaderT f e)
+
 -- |Typeclass alias for the return type of the API functions (keeps the
 -- signatures less verbose)
 type MonadPinboard m =
   ( MonadIO m
-  , MonadReader (PinboardConfig, Manager) m
+  , MonadReader PinboardEnv m
   , MonadError PinboardError m
   )
 
