diff --git a/Yesod/Paginator.hs b/Yesod/Paginator.hs
--- a/Yesod/Paginator.hs
+++ b/Yesod/Paginator.hs
@@ -56,13 +56,14 @@
     , module Yesod.Paginator.Widget
     ) where
 
+import Control.Monad.Trans.Resource
 import Yesod
 import Yesod.Paginator.Widget
 
-paginate :: Int -> [a] -> GHandler s m ([a], GWidget s m ())
+paginate :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => Int -> [a] -> HandlerT s m ([a], WidgetT s m ())
 paginate = paginateWith defaultWidget
 
-paginateWith :: PageWidget s m -> Int -> [a] -> GHandler s m ([a], GWidget s m ())
+paginateWith :: (MonadIO m, MonadBaseControl IO m, MonadUnsafeIO m,MonadThrow m) => (Int -> Int -> Int -> t) -> Int -> [a] -> HandlerT s m ([a], t)
 paginateWith widget per items = do
     p <- getCurrentPage
 
@@ -72,28 +73,33 @@
     return (xs, widget p per tot)
 
 selectPaginated :: ( PersistEntity val
-                   , PersistQuery m1
-                   , PersistEntityBackend val ~ PersistMonadBackend m1
-                   , MonadLift (GHandler s m) m1
+                   , PersistQuery (HandlerT s m)
+                   , PersistEntityBackend val ~ PersistMonadBackend (HandlerT s m)
+                   , MonadThrow m
+                   , MonadBaseControl IO m
+                   , MonadHandler m
                    )
                 => Int
                 -> [Filter val]
                 -> [SelectOpt val]
-                -> m1 ([Entity val], GWidget s m ())
+                -> HandlerT s m ([Entity val], WidgetT s m ())
 selectPaginated = selectPaginatedWith defaultWidget
 
 selectPaginatedWith :: ( PersistEntity val
-                       , PersistQuery m1
-                       , PersistEntityBackend val ~ PersistMonadBackend m1
-                       , MonadLift (GHandler s m) m1
+                       , PersistQuery (HandlerT s m)
+                       , PersistEntityBackend val ~ PersistMonadBackend (HandlerT s m)
+                       , MonadThrow m
+                       , MonadUnsafeIO m
+                       , MonadBaseControl IO m
+                       , MonadHandler m
                        )
                     => PageWidget s m
                     -> Int
                     -> [Filter val]
                     -> [SelectOpt val]
-                    -> m1 ([Entity val], GWidget s m ())
+                    -> HandlerT s m ([Entity val], WidgetT s m ())
 selectPaginatedWith widget per filters selectOpts = do
-    p   <- lift getCurrentPage
+    p   <- getCurrentPage
     tot <- count filters
     xs  <- selectList filters (selectOpts ++ [OffsetBy ((p-1)*per), LimitTo per])
 
diff --git a/Yesod/Paginator/Widget.hs b/Yesod/Paginator/Widget.hs
--- a/Yesod/Paginator/Widget.hs
+++ b/Yesod/Paginator/Widget.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE QuasiQuotes       #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE FlexibleContexts #-}
 module Yesod.Paginator.Widget
  ( getCurrentPage
  , paginationWidget
@@ -10,13 +11,14 @@
  ) where
 
 import Yesod
-import Control.Monad (when)
+import Control.Monad (when, liftM)
+import Control.Monad.Trans.Resource
 import Data.Maybe    (fromMaybe)
 import Data.Text (Text)
 
 import qualified Data.Text as T
 
-type PageWidget s m = Int -> Int -> Int -> GWidget s m ()
+type PageWidget s m = Int -> Int -> Int -> WidgetT s m ()
 
 data PageWidgetConfig = PageWidgetConfig
     { prevText     :: Text -- ^ The text for the 'previous page' link.
@@ -33,7 +35,7 @@
               | Disabled    Text Text -- ^ content, class
 
 -- | Correctly show one of the constructed links
-showLink :: [(Text, Text)] -> PageLink -> GWidget s m ()
+showLink :: (MonadIO m, MonadThrow m, MonadUnsafeIO m, MonadBaseControl IO m) => [(Text, Text)] -> PageLink -> WidgetT s m ()
 showLink params (Enabled pg cnt cls) = do
     let param = ("p", showT pg)
 
@@ -54,7 +56,7 @@
             <a>#{cnt}
         |]
 
-defaultWidget :: PageWidget s m
+defaultWidget :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => PageWidget s m
 defaultWidget = paginationWidget $ PageWidgetConfig { prevText     = "«"
                                                     , nextText     = "»"
                                                     , pageCount    = 9
@@ -64,13 +66,13 @@
 
 -- | A widget showing pagination links. Follows bootstrap principles.
 --   Utilizes a \"p\" GET param but leaves all other GET params intact.
-paginationWidget :: PageWidgetConfig -> PageWidget s m
+paginationWidget :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => PageWidgetConfig -> Int -> Int -> Int -> WidgetT site m ()
 paginationWidget (PageWidgetConfig {..}) page per tot = do
     -- total / per + 1 for any remainder
     let pages = (\(n, r) -> n + (min r 1)) $ tot `divMod` per
 
     when (pages > 1) $ do
-        curParams <- lift $ fmap reqGetParams getRequest
+        curParams <- handlerToWidget $ liftM reqGetParams getRequest
 
         [whamlet|$newline never
             <ul>
@@ -121,8 +123,8 @@
 
 -- | looks up the \"p\" GET param and converts it to an Int. returns a
 --   default of 1 when conversion fails.
-getCurrentPage :: GHandler s m Int
-getCurrentPage = fmap (fromMaybe 1 . go) $ lookupGetParam "p"
+getCurrentPage :: (MonadThrow m, MonadIO m, MonadUnsafeIO m, MonadBaseControl IO m) => HandlerT s m Int
+getCurrentPage = liftM (fromMaybe 1 . go) $ lookupGetParam "p"
 
     where
         go :: Maybe Text -> Maybe Int
diff --git a/yesod-paginator.cabal b/yesod-paginator.cabal
--- a/yesod-paginator.cabal
+++ b/yesod-paginator.cabal
@@ -1,5 +1,5 @@
 name:                yesod-paginator
-version:             0.3.3
+version:             0.4.0
 synopsis:            A pagination approach for yesod
 description:         Paginate a list showing a per-item widget and links to other pages
 homepage:            http://github.com/pbrisbin/yesod-paginator
@@ -17,8 +17,9 @@
 
   build-depends: base       >= 4    && < 5
                , text       >= 0.11 && < 0.12
-               , yesod      >= 1.1  && < 1.2
-               , persistent >= 1.1  && < 1.2
+               , yesod      >= 1.2  && < 1.3
+               , persistent >= 1.2  && < 1.3
+               , resourcet  >= 0.4.4
                , transformers
 
   ghc-options: -Wall
