diff --git a/esqueleto.cabal b/esqueleto.cabal
--- a/esqueleto.cabal
+++ b/esqueleto.cabal
@@ -1,12 +1,12 @@
 name:                esqueleto
-version:             2.4.3
+version:             2.5.0
 synopsis:            Type-safe EDSL for SQL queries on persistent backends.
-homepage:            https://github.com/prowdsponsor/esqueleto
+homepage:            https://github.com/bitemyapp/esqueleto
 license:             BSD3
 license-file:        LICENSE
 author:              Felipe Lessa
-maintainer:          felipe.lessa@gmail.com
-copyright:           (c) 2012-2015 Felipe Almeida Lessa
+maintainer:          cma@bitemyapp.com
+copyright:           (c) 2012-2016 Felipe Almeida Lessa
 category:            Database
 build-type:          Simple
 cabal-version:       >=1.8
@@ -66,7 +66,7 @@
       base                 >= 4.5     && < 4.9
     , bytestring
     , text                 >= 0.11    && < 1.3
-    , persistent           >= 2.1.1.7 && < 2.3
+    , persistent           >= 2.5 && < 2.6
     , transformers         >= 0.2
     , unordered-containers >= 0.2
     , tagged               >= 0.2
diff --git a/src/Database/Esqueleto.hs b/src/Database/Esqueleto.hs
--- a/src/Database/Esqueleto.hs
+++ b/src/Database/Esqueleto.hs
@@ -430,8 +430,9 @@
 
 -- | Synonym for 'Database.Persist.Store.delete' that does not
 -- clash with @esqueleto@'s 'delete'.
-deleteKey :: ( PersistStore (PersistEntityBackend val)
+deleteKey :: ( PersistStore backend
+             , BaseBackend backend ~ PersistEntityBackend val
              , MonadIO m
              , PersistEntity val )
-          => Key val -> ReaderT (PersistEntityBackend val) m ()
+          => Key val -> ReaderT backend m ()
 deleteKey = Database.Persist.delete
diff --git a/src/Database/Esqueleto/Internal/Language.hs b/src/Database/Esqueleto/Internal/Language.hs
--- a/src/Database/Esqueleto/Internal/Language.hs
+++ b/src/Database/Esqueleto/Internal/Language.hs
@@ -471,7 +471,7 @@
   -- @
   -- select $
   -- 'from' $ \\person -> do
-  -- 'where_' $ person '^.' PersonId `in_` 'valList' personIds
+  -- 'where_' $ person '^.' PersonId ``in_'` 'valList' personIds
   -- return person
   -- @
   --
diff --git a/src/Database/Esqueleto/Internal/PersistentImport.hs b/src/Database/Esqueleto/Internal/PersistentImport.hs
--- a/src/Database/Esqueleto/Internal/PersistentImport.hs
+++ b/src/Database/Esqueleto/Internal/PersistentImport.hs
@@ -10,4 +10,4 @@
   , selectKeysList, deleteCascadeWhere, (=.), (+=.), (-=.), (*=.), (/=.)
   , (==.), (!=.), (<.), (>.), (<=.), (>=.), (<-.), (/<-.), (||.)
   , listToJSON, mapToJSON, getPersistMap, limitOffsetOrder, selectSource
-  , update )
+  , update , count )
diff --git a/src/Database/Esqueleto/Internal/Sql.hs b/src/Database/Esqueleto/Internal/Sql.hs
--- a/src/Database/Esqueleto/Internal/Sql.hs
+++ b/src/Database/Esqueleto/Internal/Sql.hs
@@ -9,6 +9,7 @@
            , UndecidableInstances
            , ScopedTypeVariables
            , InstanceSigs
+           , Rank2Types
  #-}
 -- | This is an internal module, anything exported by this module
 -- may change without a major version bump.  Please use only
@@ -754,10 +755,10 @@
                    , MonadIO m2 )
                  => Mode
                  -> SqlQuery a
-                 -> SqlPersistT m1 (Acquire (C.Source m2 r))
+                 -> SqlReadT m1 (Acquire (C.Source m2 r))
 rawSelectSource mode query =
       do
-        conn <- R.ask
+        conn <- persistBackend <$> R.ask
         res <- run conn
         return $ (C.$= massage) `fmap` res
     where
@@ -833,7 +834,7 @@
 -- @SqlExpr (Entity Person)@.
 select :: ( SqlSelect a r
           , MonadIO m )
-       => SqlQuery a -> SqlPersistT m [r]
+       => SqlQuery a -> SqlReadT m [r]
 select query = do
     res <- rawSelectSource SELECT query
     conn <- R.ask
@@ -863,8 +864,8 @@
 
 -- | (Internal) Run a 'C.Source' of rows.
 runSource :: Monad m =>
-             C.Source (SqlPersistT m) r
-          -> SqlPersistT m [r]
+             C.Source (R.ReaderT backend m) r
+          -> R.ReaderT backend m [r]
 runSource src = src C.$$ CL.consume
 
 
@@ -873,12 +874,12 @@
 
 -- | (Internal) Execute an @esqueleto@ statement inside
 -- @persistent@'s 'SqlPersistT' monad.
-rawEsqueleto :: ( MonadIO m, SqlSelect a r )
+rawEsqueleto :: ( MonadIO m, SqlSelect a r, IsSqlBackend backend)
            => Mode
            -> SqlQuery a
-           -> SqlPersistT m Int64
+           -> R.ReaderT backend m Int64
 rawEsqueleto mode query = do
-  conn <- R.ask
+  conn <- persistBackend <$> R.ask
   uncurry rawExecuteCount $
     first builderToText $
     toRawSql mode (conn, initialIdentState) query
@@ -908,14 +909,14 @@
 -- @
 delete :: ( MonadIO m )
        => SqlQuery ()
-       -> SqlPersistT m ()
+       -> SqlWriteT m ()
 delete = liftM (const ()) . deleteCount
 
 
 -- | Same as 'delete', but returns the number of rows affected.
 deleteCount :: ( MonadIO m )
             => SqlQuery ()
-            -> SqlPersistT m Int64
+            -> SqlWriteT m Int64
 deleteCount = rawEsqueleto DELETE
 
 
@@ -927,14 +928,14 @@
 -- Example of usage:
 --
 -- @
--- 'update' $ \p -> do
+-- 'update' $ \\p -> do
 -- 'set' p [ PersonAge '=.' 'just' ('val' thisYear) -. p '^.' PersonBorn ]
 -- 'where_' $ isNothing (p '^.' PersonAge)
 -- @
 update :: ( MonadIO m
           , SqlEntity val )
        => (SqlExpr (Entity val) -> SqlQuery ())
-       -> SqlPersistT m ()
+       -> SqlWriteT m ()
 update = liftM (const ()) . updateCount
 
 
@@ -942,7 +943,7 @@
 updateCount :: ( MonadIO m
                , SqlEntity val )
             => (SqlExpr (Entity val) -> SqlQuery ())
-            -> SqlPersistT m Int64
+            -> SqlWriteT m Int64
 updateCount = rawEsqueleto UPDATE . from
 
 
@@ -961,7 +962,9 @@
 -- @esqueleto@, instead of manually using this function (which is
 -- possible but tedious), you may just turn on query logging of
 -- @persistent@.
-toRawSql :: SqlSelect a r => Mode -> IdentInfo -> SqlQuery a -> (TLB.Builder, [PersistValue])
+toRawSql
+  :: (IsSqlBackend backend, SqlSelect a r)
+  => Mode -> (backend, IdentState) -> SqlQuery a -> (TLB.Builder, [PersistValue])
 toRawSql mode (conn, firstIdentState) query =
   let ((ret, sd), finalIdentState) =
         flip S.runState firstIdentState $
@@ -980,7 +983,7 @@
       -- that were used) to the subsequent calls.  This ensures
       -- that no name clashes will occur on subqueries that may
       -- appear on the expressions below.
-      info = (conn, finalIdentState)
+      info = (persistBackend conn, finalIdentState)
   in mconcat
       [ makeInsertInto info mode ret
       , makeSelect     info mode distinctClause ret
@@ -1745,17 +1748,17 @@
 --
 -- /Since: 2.4.2/
 insertSelect :: (MonadIO m, PersistEntity a) =>
-  SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m ()
+  SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m ()
 insertSelect = liftM (const ()) . insertSelectCount
 
 -- | Insert a 'PersistField' for every selected value, return the count afterward
 insertSelectCount :: (MonadIO m, PersistEntity a) =>
-  SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m Int64
+  SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m Int64
 insertSelectCount = rawEsqueleto INSERT_INTO . fmap EInsertFinal
 
 
 -- | Insert a 'PersistField' for every unique selected value.
 insertSelectDistinct :: (MonadIO m, PersistEntity a) =>
-  SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m ()
+  SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m ()
 insertSelectDistinct = insertSelect . distinct
 {-# DEPRECATED insertSelectDistinct "Since 2.2.4: use 'insertSelect' and 'distinct'." #-}
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -1396,10 +1396,11 @@
 
 
 insert' :: ( Functor m
-           , PersistStore (PersistEntityBackend val)
+           , BaseBackend backend ~ PersistEntityBackend val
+           , PersistStore backend
            , MonadIO m
            , PersistEntity val )
-        => val -> ReaderT (PersistEntityBackend val) m (Entity val)
+        => val -> ReaderT backend m (Entity val)
 insert' v = flip Entity v <$> insert v
 
 
