diff --git a/src/Yesod/Paginate.hs b/src/Yesod/Paginate.hs
--- a/src/Yesod/Paginate.hs
+++ b/src/Yesod/Paginate.hs
@@ -23,6 +23,7 @@
 import qualified Data.Text.Read as R
 import Database.Esqueleto
 import Database.Esqueleto.Internal.Language
+import Database.Esqueleto.Internal.Sql
 import Prelude
 import Text.Shakespeare.Text
 import Yesod hiding (Value)
@@ -41,24 +42,24 @@
 
 -- | Returned by 'paginate' and friends.
 data Page r = Page
-            { pageResults :: [Entity r] -- ^ Returned entities.
+            { pageResults :: [r] -- ^ Returned entities.
             , pageCount :: Int64 -- ^ Total number of pages. This will be at minimum 1, even for an empty result set.
             , nextPage :: Maybe Text -- ^ Link to next page, pre-rendered.
             , previousPage :: Maybe Text -- ^ Link to previous page, pre-rendered.
             } deriving (Eq, Read, Show)
 
 -- | Paginate a model using default options - nothing special.
-paginate :: (PersistEntity r, RenderRoute site, YesodPersist site,
-             YesodPersistBackend site ~ SqlPersistT,
-             PersistEntityBackend r ~ SqlBackend)
+paginate :: (From SqlQuery SqlExpr SqlBackend a, RenderRoute site,
+             YesodPersist site, SqlSelect a r,
+             YesodPersistBackend site ~ SqlPersistT)
          => HandlerT site IO (Page r) -- ^ Returned page.
 paginate = paginateWith return
 
 -- | Paginate a model, given an esqueleto query.
-paginateWith :: (PersistEntity r, From SqlQuery SqlExpr SqlBackend t,
+paginateWith :: (From SqlQuery SqlExpr SqlBackend t, SqlSelect a r,
                  RenderRoute site, YesodPersist site,
                  YesodPersistBackend site ~ SqlPersistT)
-             => (t -> SqlQuery (SqlExpr (Entity r))) -- ^ SQL query.
+             => (t -> SqlQuery a) -- ^ SQL query.
              -> HandlerT site IO (Page r) -- ^ Returned page.
 paginateWith sel = do
     params <- liftM2 (\a b -> fst a ++ reqGetParams b)
@@ -73,11 +74,11 @@
     paginateWithConfig def { pageSize, currentPage } sel
 
 -- | Paginate a model, given a configuration and an esqueleto query.
-paginateWithConfig :: (PersistEntity r, From SqlQuery SqlExpr SqlBackend t,
+paginateWithConfig :: (From SqlQuery SqlExpr SqlBackend t, SqlSelect a r,
                        RenderRoute site, YesodPersist site,
                        YesodPersistBackend site ~ SqlPersistT)
                    => PageConfig -- ^ Preferred config.
-                   -> (t -> SqlQuery (SqlExpr (Entity r))) -- ^ SQL query.
+                   -> (t -> SqlQuery a) -- ^ SQL query.
                    -> HandlerT site IO (Page r) -- ^ Returned page.
 paginateWithConfig c sel = do
     let filterStmt u = limit (pageSize c) >> return u
diff --git a/tests/main.hs b/tests/main.hs
--- a/tests/main.hs
+++ b/tests/main.hs
@@ -44,7 +44,7 @@
 
 getItemsR :: HandlerT TestApp IO TypedContent
 getItemsR = do
-    (items :: Page Item) <- paginate
+    (items :: Page (Entity Item)) <- paginate
     selectRep . provideRep $ return [stext|#{show items}|]
 
 main :: IO ()
@@ -88,11 +88,11 @@
                 cp <- getPage
                 liftIO $ length (pageResults cp) `shouldBe` 5
 
-getPage :: YesodExample TestApp (Page Item)
+getPage :: YesodExample TestApp (Page (Entity Item))
 getPage = withResponse $ \SResponse { simpleBody } ->
     return $ read (B.toString simpleBody)
 
-wantPage :: Page Item -> YesodExample TestApp ()
+wantPage :: Page (Entity Item) -> YesodExample TestApp ()
 wantPage p = do
     pg <- getPage
     liftIO $ pg `shouldBe` p
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:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Pagination in Yesod
 description:         Easy pagination for Yesod.
 homepage:            https://github.com/joelteon/yesod-pagination
