diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.3.0 (September 18th, 2018)
+
+- Added support for `persistent` version 2.8.0 and above.
+
 ## 0.0.2.0 (November 9th, 2017)
 
 - Added lifting instance for `MonadPersist` for `IdentityT`.
diff --git a/library/Control/Monad/Persist.hs b/library/Control/Monad/Persist.hs
--- a/library/Control/Monad/Persist.hs
+++ b/library/Control/Monad/Persist.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE UndecidableInstances #-}
@@ -57,6 +58,7 @@
   , defaultLiftWith
   , defaultRestoreM
   , defaultRestoreT
+  , control
   )
 import Control.Monad.Trans.Identity (IdentityT)
 import Control.Monad.Writer (MonadWriter, WriterT)
@@ -113,14 +115,20 @@
 -- | Runs a 'SqlPersistT' computation against a SQL database. __Unlike__
 -- 'runPersistT', the computation is run inside a transaction.
 runSqlPersistT :: MonadBaseControl IO m => SqlPersistT m a -> SqlBackend -> m a
-runSqlPersistT (PersistT m) = runSqlConn m
+runSqlPersistT (PersistT m) r = liftBaseRunReaderT (flip runSqlConn r) m
 {-# INLINE runSqlPersistT #-}
 
 -- | Runs a 'SqlPersistT' computation against a SQL database using a pool of
 -- connections. The computation is run inside a transaction.
 runSqlPoolPersistT :: MonadBaseControl IO m => SqlPersistT m a -> ConnectionPool -> m a
-runSqlPoolPersistT (PersistT m) = runSqlPool m
+runSqlPoolPersistT (PersistT m) r = liftBaseRunReaderT (flip runSqlPool r) m
 {-# INLINE runSqlPoolPersistT #-}
+
+-- Helper function for runSqlPersistT and runSqlPoolPersistT to adapt runSqlConn
+-- and runSqlPool to use MonadBaseControl instead of MonadUnliftIO. For more
+-- details, see cjdev/monad-persist#4.
+liftBaseRunReaderT :: MonadBaseControl b m => (forall c. ReaderT r b c -> b c) -> ReaderT r m a -> m a
+liftBaseRunReaderT f m = control $ \runInBase -> f (mapReaderT runInBase m)
 
 instance MonadTransControl (PersistT backend) where
   type StT (PersistT backend) a = StT (ReaderT SqlBackend) a
diff --git a/monad-persist.cabal b/monad-persist.cabal
--- a/monad-persist.cabal
+++ b/monad-persist.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.18.1.
+-- This file has been generated from package.yaml by hpack version 0.28.2.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 58cf23e0f8e24c96c91c1a1b4d326164fcc139652890ce28de144149541c30c2
 
 name:           monad-persist
-version:        0.0.2.0
+version:        0.0.3.0
 synopsis:       An mtl-style typeclass and transformer for persistent.
 description:    An mtl-style typeclass and transformer for persistent.
 category:       Database
@@ -16,7 +18,6 @@
 license-file:   LICENSE
 build-type:     Simple
 cabal-version:  >= 1.10
-
 extra-source-files:
     CHANGELOG.md
     package.yaml
@@ -28,28 +29,31 @@
   location: https://github.com/cjdev/monad-persist
 
 library
+  exposed-modules:
+      Control.Monad.Persist
+  other-modules:
+      Paths_monad_persist
   hs-source-dirs:
       library
   ghc-options: -Wall
   build-depends:
-      base >= 4.7 && < 5
-    , exceptions >= 0.6
-    , monad-control >= 1.0.0.0 && < 2
-    , monad-logger >= 0.3.10
+      base >=4.8 && <5
+    , exceptions >=0.6
+    , monad-control >=1.0.0.0 && <2
+    , monad-logger >=0.3.10
     , mtl
-    , persistent >= 2.5 && < 3
+    , persistent >=2.5 && <3
     , text
     , transformers
     , transformers-base
-  exposed-modules:
-      Control.Monad.Persist
-  other-modules:
-      Paths_monad_persist
   default-language: Haskell2010
 
 test-suite monad-persist-test-suite
   type: exitcode-stdio-1.0
   main-is: Main.hs
+  other-modules:
+      Control.Monad.PersistSpec
+      Paths_monad_persist
   hs-source-dirs:
       test-suite
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
@@ -63,6 +67,5 @@
     , persistent-sqlite
     , persistent-template
     , text
-  other-modules:
-      Control.Monad.PersistSpec
+    , transformers
   default-language: Haskell2010
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: monad-persist
-version: 0.0.2.0
+version: 0.0.3.0
 category: Database
 synopsis: An mtl-style typeclass and transformer for persistent.
 description: An mtl-style typeclass and transformer for persistent.
@@ -19,7 +19,7 @@
 
 library:
   dependencies:
-  - base >= 4.7 && < 5
+  - base >= 4.8 && < 5
   - exceptions >= 0.6
   - monad-control >= 1.0.0.0 && < 2
   - monad-logger >= 0.3.10
@@ -42,6 +42,7 @@
     - persistent-sqlite
     - persistent-template
     - text
+    - transformers
     ghc-options:
     - -rtsopts
     - -threaded
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,4 @@
-resolver: lts-8.11
+resolver: lts-12.10
 
 packages:
 - '.'
diff --git a/test-suite/Control/Monad/PersistSpec.hs b/test-suite/Control/Monad/PersistSpec.hs
--- a/test-suite/Control/Monad/PersistSpec.hs
+++ b/test-suite/Control/Monad/PersistSpec.hs
@@ -13,11 +13,12 @@
 
 import qualified Test.Hspec as Hspec
 
-import Control.Monad.Logger (NoLoggingT, runNoLoggingT)
+import Control.Monad.Logger (runNoLoggingT)
 import Control.Monad.IO.Class (MonadIO, liftIO)
-import Control.Monad.Trans.Control (MonadBaseControl)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Control (MonadBaseControl, control)
 import Data.Text (Text)
-import Database.Persist.Sqlite (withSqliteConn)
+import Database.Persist.Sqlite (IsSqlBackend, withSqliteConn)
 import Database.Persist.TH
 import Test.Hspec hiding (shouldBe)
 
@@ -33,8 +34,11 @@
   deriving Eq Show
 |]
 
-runSqlite :: (MonadIO m, MonadBaseControl IO m) => SqlPersistT (NoLoggingT m) a -> m a
-runSqlite x = runNoLoggingT $ withSqliteConn ":memory:" (runSqlPersistT (runMigrationSilent migrateAll >> x))
+runSqlite :: (MonadIO m, MonadBaseControl IO m) => SqlPersistT m a -> m a
+runSqlite x = liftedWithSqliteConn ":memory:" (runSqlPersistT (runMigrationSilent migrateAll >> x))
+  where
+    liftedWithSqliteConn :: (MonadBaseControl IO m, IsSqlBackend backend) => Text -> (backend -> m a) -> m a
+    liftedWithSqliteConn txt f = control $ \runInBase -> runNoLoggingT (withSqliteConn txt (lift . runInBase . f))
 
 shouldBe :: (Eq a, Show a, MonadIO m) => a -> a -> m ()
 shouldBe x y = liftIO $ Hspec.shouldBe x y
