diff --git a/example/Main.hs b/example/Main.hs
--- a/example/Main.hs
+++ b/example/Main.hs
@@ -78,7 +78,6 @@
 
         return $ Authenticated "1"
 
-    authHttpManager = appHttpManager
     authPlugins = appAuthPlugins
 
 instance RenderMessage App FormMessage where
diff --git a/src/Yesod/Auth/OAuth2.hs b/src/Yesod/Auth/OAuth2.hs
--- a/src/Yesod/Auth/OAuth2.hs
+++ b/src/Yesod/Auth/OAuth2.hs
@@ -52,7 +52,7 @@
 --
 authOAuth2Widget
     :: YesodAuth m
-    => WidgetT m IO ()
+    => WidgetFor m ()
     -> Text
     -> OAuth2
     -> FetchCreds m
diff --git a/src/Yesod/Auth/OAuth2/BattleNet.hs b/src/Yesod/Auth/OAuth2/BattleNet.hs
--- a/src/Yesod/Auth/OAuth2/BattleNet.hs
+++ b/src/Yesod/Auth/OAuth2/BattleNet.hs
@@ -29,7 +29,7 @@
 
 oauth2BattleNet
     :: YesodAuth m
-    => WidgetT m IO () -- ^ Login widget
+    => WidgetFor m () -- ^ Login widget
     -> Text -- ^ User region (e.g. "eu", "cn", "us")
     -> Text -- ^ Client ID
     -> Text -- ^ Client Secret
@@ -64,6 +64,6 @@
 wwwHost "cn" = "www.battlenet.com.cn"
 wwwHost region = Host $ encodeUtf8 $ region <> ".battle.net"
 
-oAuth2BattleNet :: YesodAuth m => Text -> Text -> Text -> WidgetT m IO () -> AuthPlugin m
+oAuth2BattleNet :: YesodAuth m => Text -> Text -> Text -> WidgetFor m () -> AuthPlugin m
 oAuth2BattleNet i s r w = oauth2BattleNet w r i s
 {-# DEPRECATED oAuth2BattleNet "Use oauth2BattleNet" #-}
diff --git a/src/Yesod/Auth/OAuth2/Dispatch.hs b/src/Yesod/Auth/OAuth2/Dispatch.hs
--- a/src/Yesod/Auth/OAuth2/Dispatch.hs
+++ b/src/Yesod/Auth/OAuth2/Dispatch.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
 module Yesod.Auth.OAuth2.Dispatch
     ( FetchCreds
     , dispatchAuthRequest
@@ -46,7 +47,7 @@
 dispatchForward name oauth2 = do
     csrf <- setSessionCSRF $ tokenSessionKey name
     oauth2' <- withCallbackAndState name oauth2 csrf
-    lift $ redirect $ toText $ authorizationUrl oauth2'
+    redirect $ toText $ authorizationUrl oauth2'
 
 -- | Handle @GET \/callback@
 --
@@ -59,11 +60,11 @@
     csrf <- verifySessionCSRF $ tokenSessionKey name
     onErrorResponse errInvalidOAuth
     code <- requireGetParam "code"
-    manager <- lift $ getsYesod authHttpManager
+    manager <- authHttpManager
     oauth2' <- withCallbackAndState name oauth2 csrf
     token <- denyLeft $ fetchAccessToken manager oauth2' $ ExchangeToken code
     creds <- denyLeft $ tryIO $ getCreds manager token
-    lift $ setCredsRedirect creds
+    setCredsRedirect creds
   where
     -- On a Left result, log it and return an opaque permission-denied
     denyLeft :: (MonadHandler m, MonadLogger m, Show e) => IO (Either e a) -> m a
@@ -81,7 +82,8 @@
     let callbackText = render url
 
     callback <- maybe
-        (throwString
+        (liftIO
+            $ throwString
             $ "Invalid callback URI: "
             <> T.unpack callbackText
             <> ". Not using an absolute Approot?"
@@ -93,9 +95,9 @@
             `withQuery` [("state", encodeUtf8 csrf)]
         }
 
-getParentUrlRender :: HandlerT child (HandlerT parent IO) (Route child -> Text)
+getParentUrlRender :: MonadHandler m => m (Route (SubHandlerSite m) -> Text)
 getParentUrlRender = (.)
-    <$> lift getUrlRender
+    <$> getUrlRender
     <*> getRouteToParent
 
 -- | Set a random, 30-character value in the session
diff --git a/src/Yesod/Auth/OAuth2/EveOnline.hs b/src/Yesod/Auth/OAuth2/EveOnline.hs
--- a/src/Yesod/Auth/OAuth2/EveOnline.hs
+++ b/src/Yesod/Auth/OAuth2/EveOnline.hs
@@ -30,9 +30,9 @@
     | SmallWhite
     | BigBlack
     | SmallBlack
-    | Custom (WidgetT m IO ())
+    | Custom (WidgetFor m ())
 
-asWidget :: YesodAuth m => WidgetType m -> WidgetT m IO ()
+asWidget :: YesodAuth m => WidgetType m -> WidgetFor m ()
 asWidget Plain = [whamlet|Login via eveonline|]
 asWidget BigWhite = [whamlet|<img src="https://images.contentful.com/idjq7aai9ylm/4PTzeiAshqiM8osU2giO0Y/5cc4cb60bac52422da2e45db87b6819c/EVE_SSO_Login_Buttons_Large_White.png?w=270&h=45">|]
 asWidget BigBlack = [whamlet|<img src="https://images.contentful.com/idjq7aai9ylm/4fSjj56uD6CYwYyus4KmES/4f6385c91e6de56274d99496e6adebab/EVE_SSO_Login_Buttons_Large_Black.png?w=270&h=45">|]
diff --git a/yesod-auth-oauth2.cabal b/yesod-auth-oauth2.cabal
--- a/yesod-auth-oauth2.cabal
+++ b/yesod-auth-oauth2.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2abd54f1d50a9de6207536db36d9e0d29146b6f7e9f8b6495dc9f4377f83bc84
+-- hash: 8ca8256c419d63fec8925743afe833bfa510d57bf4c9c3f50707f07ad619058a
 
 name:           yesod-auth-oauth2
-version:        0.4.1.0
+version:        0.5.0.0
 synopsis:       OAuth 2.0 authentication plugins
 description:    Library to authenticate with OAuth 2.0 for Yesod web applications.
 category:       Web
@@ -36,7 +36,7 @@
     , base >=4.9.0.0 && <5
     , bytestring >=0.9.1.4
     , errors
-    , hoauth2 >=1.3.0 && <1.6
+    , hoauth2 >=1.3.0 && <1.8
     , http-client >=0.4.0 && <0.6
     , http-conduit >=2.0 && <3.0
     , http-types >=0.8 && <0.13
@@ -44,10 +44,9 @@
     , random
     , safe-exceptions
     , text >=0.7 && <2.0
-    , transformers >=0.2.2 && <0.6
     , uri-bytestring
-    , yesod-auth >=1.3 && <1.5
-    , yesod-core >=1.2 && <1.5
+    , yesod-auth >=1.6.0 && <1.7
+    , yesod-core >=1.6.0 && <1.7
   exposed-modules:
       URI.ByteString.Extension
       Yesod.Auth.OAuth2
