diff --git a/hasql-pool.cabal b/hasql-pool.cabal
--- a/hasql-pool.cabal
+++ b/hasql-pool.cabal
@@ -1,7 +1,7 @@
 name:
   hasql-pool
 version:
-  0.1
+  0.3
 category:
   Hasql, Database, PostgreSQL
 synopsis:
@@ -45,11 +45,12 @@
     Hasql.Pool.Prelude
   exposed-modules:
     Hasql.Pool
+    Hasql.Pool.Handle
   build-depends:
     -- resources:
     resource-pool >= 0.2 && < 0.3,
     -- database:
-    hasql >= 0.15 && < 0.16,
+    hasql >= 0.19 && < 0.20,
     -- data:
     time >= 1.4 && < 2,
     -- general:
diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs
--- a/library/Hasql/Pool.hs
+++ b/library/Hasql/Pool.hs
@@ -9,7 +9,6 @@
 
 import Hasql.Pool.Prelude
 import qualified Hasql.Connection
-import qualified Hasql.Settings
 import qualified Data.Pool
 
 
@@ -21,7 +20,7 @@
 -- |
 -- Given the pool-size, timeout and connection settings
 -- create a connection-pool.
-acquire :: Int -> NominalDiffTime -> Hasql.Settings.Settings -> IO Pool
+acquire :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> IO Pool
 acquire size timeout connectionSettings =
   fmap Pool $
   Data.Pool.createPool acquire release stripes timeout size
diff --git a/library/Hasql/Pool/Handle.hs b/library/Hasql/Pool/Handle.hs
new file mode 100644
--- /dev/null
+++ b/library/Hasql/Pool/Handle.hs
@@ -0,0 +1,56 @@
+-- |
+-- Handle-pattern API.
+module Hasql.Pool.Handle
+(
+  Handle,
+  with,
+  -- * Usage
+  Error(..),
+  session,
+)
+where
+
+import Hasql.Pool.Prelude hiding (Handle)
+import qualified Hasql.Pool
+import qualified Hasql.Connection
+import qualified Hasql.Session
+
+
+-- |
+-- A temporary handle to the pool. 
+newtype Handle s =
+  Handle (forall a. Hasql.Session.Session a -> IO (Either Error a))
+
+-- |
+-- Given the pool-size, timeout and connection settings
+-- executes an IO function on a temporary handle,
+-- releasing it automatically afterwards.
+with :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> (forall s. Handle s -> IO a) -> IO a
+with size timeout settings handler =
+  acquire >>= \pool -> use pool <* release pool
+  where
+    acquire =
+      Hasql.Pool.acquire size timeout settings
+    use pool =
+      handler $ Handle $ \session -> 
+        fmap (either (Left . Left) (either (Left . Right) Right)) $
+        Hasql.Pool.use pool $
+        Hasql.Session.run session
+    release pool =
+      Hasql.Pool.release pool
+
+
+-- * Usage
+-------------------------
+
+-- |
+-- Error of executing a session on a connection from the pool.
+type Error =
+  Either Hasql.Connection.ConnectionError Hasql.Session.Error
+
+-- |
+-- Executes a session on a connection from the pool,
+-- using the provided temporary handle to it.
+session :: Handle s -> Hasql.Session.Session a -> IO (Either Error a)
+session (Handle runSession) session =
+  runSession session
