diff --git a/apiary-persistent.cabal b/apiary-persistent.cabal
--- a/apiary-persistent.cabal
+++ b/apiary-persistent.cabal
@@ -1,6 +1,5 @@
 name:                apiary-persistent
-version:             0.4.3.2
-x-revision:          1
+version:             0.8.0.0
 synopsis:            persistent support for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/persistent.hs>
@@ -25,6 +24,8 @@
                      , monad-logger       >=0.3   && <0.4
                      , resourcet          >=1.1   && <1.2
                      , mtl                >=2.1   && <2.2
+                     , reflection         >=1.4   && <1.5
+                     , transformers-base  >=0.4   && <0.5
 
   hs-source-dirs:      src
   ghc-options:         -O2 -Wall
diff --git a/src/Web/Apiary/Database/Persist.hs b/src/Web/Apiary/Database/Persist.hs
--- a/src/Web/Apiary/Database/Persist.hs
+++ b/src/Web/Apiary/Database/Persist.hs
@@ -5,63 +5,35 @@
 {-# LANGUAGE KindSignatures #-}
 
 module Web.Apiary.Database.Persist (
-    -- * configuration
-      ApiaryPersistConfig
-    , defaultApiaryPersistConfig
-
     -- * runner
-    , withWithSqlPool, withWithSqlPool'
+      withWithSqlPool
 
     -- * execute sql
-    , runSql, runSql'
+    , runSql
 
     -- * types
-    , HasPersist, LogRunner
+    , HasPersist
 
     -- * reexport
     , module Database.Persist.Sql
     ) where
 
 import Database.Persist.Sql
-import Control.Monad.Logger
-import Control.Monad.Trans
 import Control.Monad.Trans.Resource
-
-type HasPersist l =
-    ?webApiaryDatabasePersistState :: ApiaryPersistState l
-
-type LogRunner l = forall a. l (ResourceT IO) a -> ResourceT IO a
-
-newtype ApiaryPersistConfig l = ApiaryPersistConfig
-    { runLogger  :: LogRunner l
-    }
+import Data.Reflection
 
-defaultApiaryPersistConfig :: ApiaryPersistConfig NoLoggingT
-defaultApiaryPersistConfig = ApiaryPersistConfig runNoLoggingT
+type HasPersist = Given ApiaryPersistState
 
-data ApiaryPersistState l = ApiaryPersistState
-    { runLogger' :: LogRunner l
-    , getPool    :: ConnectionPool
+newtype ApiaryPersistState = ApiaryPersistState
+    { getPool    :: ConnectionPool
     }
 
-runSql :: (MonadBaseControl IO (l (ResourceT IO)), MonadIO m, HasPersist l) => SqlPersistT (l (ResourceT IO)) a -> m a
-runSql = runSql' (runLogger' ?webApiaryDatabasePersistState)
-
-runSql' :: (MonadBaseControl IO logger, MonadIO m, HasPersist logger') => (logger a -> ResourceT IO b) -> SqlPersistT logger a -> m b
-runSql' run a =
-    liftIO .
-    runResourceT .
-    run $
-    runSqlPool a (getPool ?webApiaryDatabasePersistState)
+runSql :: (MonadBaseControl IO m, HasPersist) => SqlPersistT (ResourceT m) a -> m a
+runSql a =
+    runResourceT $
+    runSqlPool a (getPool given)
 
 withWithSqlPool :: (forall a. (ConnectionPool -> m a) -> m a)
-                -> (HasPersist NoLoggingT => m b) -> m b
-withWithSqlPool = withWithSqlPool' defaultApiaryPersistConfig
-
-withWithSqlPool' :: ApiaryPersistConfig logger
-                 -> (forall a. (ConnectionPool -> m a) -> m a)
-                 -> (HasPersist logger => m b) -> m b
-withWithSqlPool' conf with m = with $ \pool -> do
-    let ?webApiaryDatabasePersistState = ApiaryPersistState (runLogger conf) pool
-    m
-
+                -> (HasPersist => m b) -> m b
+withWithSqlPool with m = with $ \pool -> 
+    give (ApiaryPersistState pool) m
