diff --git a/src/Yesod/Paginate.hs b/src/Yesod/Paginate.hs
--- a/src/Yesod/Paginate.hs
+++ b/src/Yesod/Paginate.hs
@@ -10,8 +10,8 @@
     paginate, paginateWith,
 
     -- *** Datatypes
-    PageConfig(..),
-    Page(..)
+    PageConfig (..),
+    Page (..)
 ) where
 
 import Control.Monad
@@ -41,39 +41,33 @@
 
 -- | Paginate a model, given a configuration. This just performs a @SELECT
 -- *@.
-paginate :: (YesodPersist site, SqlSelect a s,
-             MonadResource (YesodPersistBackend site (HandlerT site IO)),
-             From SqlQuery SqlExpr SqlBackend a,
-             MonadSqlPersist (YesodPersistBackend site (HandlerT site IO)))
-         => PageConfig site -- ^ Preferred config.
-         -> HandlerT site IO (Page (Route site) s) -- ^ Returned page.
+paginate :: ( From SqlQuery SqlExpr SqlBackend a
+            , SqlSelect a a1, YesodPersist site
+            , YesodPersistBackend site ~ Connection)
+         => PageConfig app -> HandlerT site IO (Page (Route app) a1)
 paginate c = paginateWith c return
 
 -- | Paginate a model, given a configuration and an esqueleto query.
-paginateWith :: (YesodPersist site, SqlSelect a s,
-                 MonadResource (YesodPersistBackend site (HandlerT site IO)),
-                 From SqlQuery SqlExpr SqlBackend q,
-                 MonadSqlPersist (YesodPersistBackend site (HandlerT site IO)))
-             => PageConfig site -- ^ Preferred config.
-             -> (q -> SqlQuery a) -- ^ SQL query.
-             -> HandlerT site IO (Page (Route site) s) -- ^ Returned page.
+paginateWith :: ( From SqlQuery SqlExpr SqlBackend a1, SqlSelect a a2
+                , YesodPersist site, YesodPersistBackend site ~ Connection
+                )
+             => PageConfig app -- ^ Preferred config.
+             -> (a1 -> SqlQuery a) -- ^ SQL query.
+             -> HandlerT site IO (Page (Route app) a2) -- ^ Returned page.
 paginateWith c sel = do
     let cp = max 1 $ fromIntegral (currentPage c)
 
-    es <- runDB $ select $ from $ \u -> do
+    es <- runDB $ select $ from $ \ u -> do
         limit (fromIntegral (pageSize c) + 1)
         offset $ max 0 $ fromIntegral (pageSize c) * (cp - 1)
         sel u
 
     let route = pageRoute c . fromIntegral
-        pp | cp == 1 = Nothing
-           | cp == 2 = Just (firstPageRoute c)
-           | otherwise = Just (route $ cp - 1)
 
     return Page { pageResults = take (fromIntegral $ pageSize c) es
                 , firstPage = if cp >= 2 then Just (firstPageRoute c) else Nothing
                 , nextPage = if fromIntegral (length es) == pageSize c + 1
                                  then Just (route $ cp + 1)
                                  else Nothing
-                , previousPage = pp
+                , previousPage = if cp == 1 then Nothing else Just (route $ cp - 1)
                 }
diff --git a/yesod-pagination.cabal b/yesod-pagination.cabal
--- a/yesod-pagination.cabal
+++ b/yesod-pagination.cabal
@@ -1,5 +1,5 @@
 name:                yesod-pagination
-version:             1.1.0.0
+version:             2.0.0
 synopsis:            Pagination in Yesod
 description:         Easy pagination for Yesod.
 homepage:            https://github.com/joelteon/yesod-pagination
@@ -18,6 +18,7 @@
                      , yesod
   hs-source-dirs:      src
   default-language:    Haskell2010
+  ghc-options:         -Wall
 
 test-suite test
   type:                exitcode-stdio-1.0
