diff --git a/internal/sqladapter/database.go b/internal/sqladapter/database.go
index 3d2cb99a1ef4b8cce82a8e3448521c624644b810..f6f4750b5d1698794593c1a3bb687a0573a45a03 100644
--- a/internal/sqladapter/database.go
+++ b/internal/sqladapter/database.go
@@ -154,7 +154,10 @@ func (d *database) BindSession(sess *sql.DB) error {
 // Ping checks whether a connection to the database is still alive by pinging
 // it
 func (d *database) Ping() error {
-	return d.sess.Ping()
+	if d.sess != nil {
+		return d.sess.Ping()
+	}
+	return nil
 }
 
 // ClearCache removes all caches.
diff --git a/postgresql/database.go b/postgresql/database.go
index 4a1bb16c204f6f762a9538584663d8ef14876e9a..c2f3d774e096cf5018a09e6867b22cb4544af02a 100644
--- a/postgresql/database.go
+++ b/postgresql/database.go
@@ -26,11 +26,12 @@ import (
 
 	"database/sql"
 
+	"fmt"
 	_ "github.com/lib/pq" // PostgreSQL driver.
 	"upper.io/db.v2"
+	"upper.io/db.v2/internal/sqladapter"
 	"upper.io/db.v2/sqlbuilder"
 	"upper.io/db.v2/sqlbuilder/exql"
-	"upper.io/db.v2/internal/sqladapter"
 )
 
 // Database represents a SQL database.
@@ -39,6 +40,7 @@ type Database interface {
 	builder.Builder
 
 	NewTransaction() (Tx, error)
+	With(interface{}) (Database, error)
 }
 
 // database is the actual implementation of Database
@@ -62,6 +64,28 @@ func newDatabase(settings db.ConnectionURL) (*database, error) {
 	return d, nil
 }
 
+func (d *database) With(sess interface{}) (Database, error) {
+	clone, err := newDatabase(d.connURL)
+	if err != nil {
+		return nil, err
+	}
+
+	switch t := sess.(type) {
+	case *sql.DB:
+		if err := clone.BindSession(t); err != nil {
+			return nil, err
+		}
+	case *sql.Tx:
+		if err := clone.BindTx(t); err != nil {
+			return nil, err
+		}
+	default:
+		return nil, fmt.Errorf("Unknown session type %T", t)
+	}
+
+	return clone, nil
+}
+
 // Open stablishes a new connection to a SQL server.
 func Open(settings db.ConnectionURL) (Database, error) {
 	d, err := newDatabase(settings)
diff --git a/postgresql/tx.go b/postgresql/tx.go
index f22315a8d1613272c44795eb31b488a45ca2875c..4a5a70b01aaf2f86f5254887d207d6a0075e7a2a 100644
--- a/postgresql/tx.go
+++ b/postgresql/tx.go
@@ -22,6 +22,8 @@
 package postgresql
 
 import (
+	"fmt"
+
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
 )
@@ -45,3 +47,7 @@ var (
 func (t *tx) NewTransaction() (Tx, error) {
 	return t, db.ErrAlreadyWithinTransaction
 }
+
+func (t *tx) With(interface{}) (Database, error) {
+	return nil, fmt.Errorf("Not implemented.")
+}