diff --git a/Makefile b/Makefile
index e5e35f6240408296ed081aabe76fe06fad37d3cc..926c4a9df8e444869147e7c47fb5217567d87884 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ DB_HOST ?= 127.0.0.1
 export DB_HOST
 
 test:
-	go test -v ./sqlbuilder/... && \
+	go test -v ./lib/... && \
 	go test -v ./internal/... && \
 	$(MAKE) test -C postgresql && \
 	$(MAKE) test -C mysql && \
diff --git a/errors.go b/errors.go
index c492ef8148d444f3427ded626c437cedf172da87..afccfc4c5e0609c3f288c3fd610df0f06f9398fb 100644
--- a/errors.go
+++ b/errors.go
@@ -33,9 +33,9 @@ var (
 	ErrMissingCollectionName    = errors.New(`upper: missing collection name`)
 	ErrCollectionDoesNotExist   = errors.New(`upper: collection does not exist`)
 	ErrSockerOrHost             = errors.New(`upper: you may connect either to a unix socket or a tcp address, but not both`)
-	ErrQueryLimitParam          = errors.New(`upper: a query can accept only one dbLimit() parameter`)
-	ErrQuerySortParam           = errors.New(`upper: a query can accept only one dbSort{} parameter`)
-	ErrQueryOffsetParam         = errors.New(`upper: a query can accept only one dbOffset() parameter`)
+	ErrQueryLimitParam          = errors.New(`upper: a query can accept only one limit parameter`)
+	ErrQuerySortParam           = errors.New(`upper: a query can accept only one order by parameter`)
+	ErrQueryOffsetParam         = errors.New(`upper: a query can accept only one offset parameter`)
 	ErrMissingConditions        = errors.New(`upper: missing selector conditions`)
 	ErrUnsupported              = errors.New(`upper: this action is currently unsupported on this database`)
 	ErrUndefined                = errors.New(`upper: this value is undefined`)
diff --git a/internal/sqladapter/collection.go b/internal/sqladapter/collection.go
index 9b767f22c85a6d1413511010987f5415b5b2d3e8..83984b39b8f68e8c70d23a2f3d4925bcb9deeeb3 100644
--- a/internal/sqladapter/collection.go
+++ b/internal/sqladapter/collection.go
@@ -5,7 +5,7 @@ import (
 	"reflect"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // Collection represents a SQL table.
diff --git a/internal/sqladapter/database.go b/internal/sqladapter/database.go
index 71f86a8ee268aff0a04135820aa477510dc94b66..0aa1506b1c9225688a51aeff2eb26801e09227d9 100644
--- a/internal/sqladapter/database.go
+++ b/internal/sqladapter/database.go
@@ -8,9 +8,9 @@ import (
 
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/logger"
-	"upper.io/db.v2/sqlbuilder"
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // HasCleanUp
@@ -31,7 +31,7 @@ type Database interface {
 
 // PartialDatabase defines all the methods an adapter must provide.
 type PartialDatabase interface {
-	builder.SQLBuilder
+	builder.Builder
 
 	Collections() ([]string, error)
 	Open(db.ConnectionURL) error
diff --git a/internal/sqladapter/result.go b/internal/sqladapter/result.go
index e90a7b2a351d4cd41aee010860839f5a64515808..3ad00023f095222f8ae0fcd56d7897d6a2f73fc0 100644
--- a/internal/sqladapter/result.go
+++ b/internal/sqladapter/result.go
@@ -25,12 +25,12 @@ import (
 	"sync"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // Result represents a delimited set of items bound by a condition.
 type Result struct {
-	b       builder.SQLBuilder
+	b       builder.Builder
 	table   string
 	iter    builder.Iterator
 	limit   int
@@ -51,7 +51,7 @@ func filter(conds []interface{}) []interface{} {
 
 // NewResult creates and Results a new Result set on the given table, this set
 // is limited by the given exql.Where conditions.
-func NewResult(b builder.SQLBuilder, table string, conds []interface{}) *Result {
+func NewResult(b builder.Builder, table string, conds []interface{}) *Result {
 	return &Result{
 		b:     b,
 		table: table,
diff --git a/internal/sqladapter/testing/adapter.go.tpl b/internal/sqladapter/testing/adapter.go.tpl
index b79fedbf5d0af7ec71faedab451e17d794d8cde0..efc881c0285f7310ca4a31af592ff1dfad88231b 100644
--- a/internal/sqladapter/testing/adapter.go.tpl
+++ b/internal/sqladapter/testing/adapter.go.tpl
@@ -15,7 +15,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 type artistType struct {
diff --git a/internal/sqladapter/testing/adapter_benchmark.go.tpl b/internal/sqladapter/testing/adapter_benchmark.go.tpl
index 26fb3d4e19bcf1708bee9b4c3beaf51454f6f9bc..6e661a143119a4f9bdb1f82a9f7e7d3576047af7 100644
--- a/internal/sqladapter/testing/adapter_benchmark.go.tpl
+++ b/internal/sqladapter/testing/adapter_benchmark.go.tpl
@@ -8,7 +8,7 @@ import (
 
 	"github.com/gocraft/dbr"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 const (
diff --git a/internal/sqladapter/tx.go b/internal/sqladapter/tx.go
index 18dd7cd231fd763f692d7f59ae638c71ed1e5454..d5d37b36f96cff296f152978d2156935f35b3dd8 100644
--- a/internal/sqladapter/tx.go
+++ b/internal/sqladapter/tx.go
@@ -26,7 +26,7 @@ import (
 	"sync/atomic"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // Tx represents a database session within a transaction.
diff --git a/sqlbuilder/reflectx/LICENSE b/lib/reflectx/LICENSE
similarity index 100%
rename from sqlbuilder/reflectx/LICENSE
rename to lib/reflectx/LICENSE
diff --git a/sqlbuilder/reflectx/README.md b/lib/reflectx/README.md
similarity index 100%
rename from sqlbuilder/reflectx/README.md
rename to lib/reflectx/README.md
diff --git a/sqlbuilder/reflectx/reflect.go b/lib/reflectx/reflect.go
similarity index 100%
rename from sqlbuilder/reflectx/reflect.go
rename to lib/reflectx/reflect.go
diff --git a/sqlbuilder/reflectx/reflect_test.go b/lib/reflectx/reflect_test.go
similarity index 100%
rename from sqlbuilder/reflectx/reflect_test.go
rename to lib/reflectx/reflect_test.go
diff --git a/sqlbuilder/.travis.yml b/lib/sqlbuilder/.travis.yml
similarity index 57%
rename from sqlbuilder/.travis.yml
rename to lib/sqlbuilder/.travis.yml
index 5aa9a5afb2aecb15e2ce1dd0d2a22cbb9a8a4c83..c6f97b1cdd2e63b36005532e1a8cfd17abc886bc 100644
--- a/sqlbuilder/.travis.yml
+++ b/lib/sqlbuilder/.travis.yml
@@ -15,10 +15,10 @@ go:
 
 install:
   - mkdir -p $GOPATH/src/upper.io
-  - mv $PWD $GOPATH/src/upper.io/db.v2/sqlbuilder
-  - cd $GOPATH/src/upper.io/db.v2/sqlbuilder
+  - mv $PWD $GOPATH/src/upper.io/db.v2/lib/sqlbuilder
+  - cd $GOPATH/src/upper.io/db.v2/lib/sqlbuilder
   - go get -v -d -t ./...
 
 script:
-  - cd $GOPATH/src/upper.io/db.v2/sqlbuilder
+  - cd $GOPATH/src/upper.io/db.v2/lib/sqlbuilder
   - make test
diff --git a/sqlbuilder/builder.go b/lib/sqlbuilder/builder.go
similarity index 97%
rename from sqlbuilder/builder.go
rename to lib/sqlbuilder/builder.go
index 9820276bf14d8ab1a8f834d6cf1892981069e553..b2fa6caeb606005bd58198e722c795f0485fa6d6 100644
--- a/sqlbuilder/builder.go
+++ b/lib/sqlbuilder/builder.go
@@ -11,8 +11,8 @@ import (
 	"strings"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder/exql"
-	"upper.io/db.v2/sqlbuilder/reflectx"
+	"upper.io/db.v2/lib/reflectx"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 type hasStatement interface {
@@ -55,7 +55,7 @@ type sqlBuilder struct {
 }
 
 // WithSession returns a query builder that is bound to the given database session.
-func WithSession(sess interface{}, t *exql.Template) (SQLBuilder, error) {
+func WithSession(sess interface{}, t *exql.Template) (Builder, error) {
 	switch v := sess.(type) {
 	case *sql.DB:
 		sess = newSqlgenProxy(v, t)
@@ -72,7 +72,7 @@ func WithSession(sess interface{}, t *exql.Template) (SQLBuilder, error) {
 }
 
 // WithTemplate returns a builder that is based on the given template.
-func WithTemplate(t *exql.Template) SQLBuilder {
+func WithTemplate(t *exql.Template) Builder {
 	return &sqlBuilder{
 		t: newTemplateWithUtils(t),
 	}
@@ -436,6 +436,6 @@ func (p *exprProxy) StatementQueryRow(stmt *exql.Statement, args ...interface{})
 }
 
 var (
-	_ = SQLBuilder(&sqlBuilder{})
+	_ = Builder(&sqlBuilder{})
 	_ = exprDB(&exprProxy{})
 )
diff --git a/sqlbuilder/builder_test.go b/lib/sqlbuilder/builder_test.go
similarity index 100%
rename from sqlbuilder/builder_test.go
rename to lib/sqlbuilder/builder_test.go
diff --git a/sqlbuilder/cache/cache.go b/lib/sqlbuilder/cache/cache.go
similarity index 98%
rename from sqlbuilder/cache/cache.go
rename to lib/sqlbuilder/cache/cache.go
index 93eb38ab58d70edb78ebcc30f74ce0c1d9dc2890..0f85117ce494c1ca8f4968335a2e46638c875d0f 100644
--- a/sqlbuilder/cache/cache.go
+++ b/lib/sqlbuilder/cache/cache.go
@@ -28,7 +28,7 @@ import (
 	"strconv"
 	"sync"
 
-	"upper.io/db.v2/sqlbuilder/cache/hashstructure"
+	"upper.io/db.v2/lib/sqlbuilder/cache/hashstructure"
 )
 
 const defaultCapacity = 128
diff --git a/sqlbuilder/cache/cache_test.go b/lib/sqlbuilder/cache/cache_test.go
similarity index 100%
rename from sqlbuilder/cache/cache_test.go
rename to lib/sqlbuilder/cache/cache_test.go
diff --git a/sqlbuilder/cache/hashstructure/LICENSE b/lib/sqlbuilder/cache/hashstructure/LICENSE
similarity index 100%
rename from sqlbuilder/cache/hashstructure/LICENSE
rename to lib/sqlbuilder/cache/hashstructure/LICENSE
diff --git a/sqlbuilder/cache/hashstructure/README.md b/lib/sqlbuilder/cache/hashstructure/README.md
similarity index 100%
rename from sqlbuilder/cache/hashstructure/README.md
rename to lib/sqlbuilder/cache/hashstructure/README.md
diff --git a/sqlbuilder/cache/hashstructure/hashstructure.go b/lib/sqlbuilder/cache/hashstructure/hashstructure.go
similarity index 100%
rename from sqlbuilder/cache/hashstructure/hashstructure.go
rename to lib/sqlbuilder/cache/hashstructure/hashstructure.go
diff --git a/sqlbuilder/cache/hashstructure/hashstructure_test.go b/lib/sqlbuilder/cache/hashstructure/hashstructure_test.go
similarity index 100%
rename from sqlbuilder/cache/hashstructure/hashstructure_test.go
rename to lib/sqlbuilder/cache/hashstructure/hashstructure_test.go
diff --git a/sqlbuilder/cache/hashstructure/include.go b/lib/sqlbuilder/cache/hashstructure/include.go
similarity index 100%
rename from sqlbuilder/cache/hashstructure/include.go
rename to lib/sqlbuilder/cache/hashstructure/include.go
diff --git a/sqlbuilder/cache/interface.go b/lib/sqlbuilder/cache/interface.go
similarity index 100%
rename from sqlbuilder/cache/interface.go
rename to lib/sqlbuilder/cache/interface.go
diff --git a/sqlbuilder/convert.go b/lib/sqlbuilder/convert.go
similarity index 99%
rename from sqlbuilder/convert.go
rename to lib/sqlbuilder/convert.go
index d9e22eee652f2a1e1d41563907f4c0a39651b1b2..0e1f3d94c09e1e5e6dba6269d5ca2de7e64ec280 100644
--- a/sqlbuilder/convert.go
+++ b/lib/sqlbuilder/convert.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 var (
diff --git a/sqlbuilder/delete.go b/lib/sqlbuilder/delete.go
similarity index 95%
rename from sqlbuilder/delete.go
rename to lib/sqlbuilder/delete.go
index 113d95e2d351c9b41cc80506b0040e683e162501..c6044e8ab3877f2fd217f4076f6c5f5a2eb5c0ab 100644
--- a/sqlbuilder/delete.go
+++ b/lib/sqlbuilder/delete.go
@@ -3,7 +3,7 @@ package builder
 import (
 	"database/sql"
 
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 type deleter struct {
diff --git a/sqlbuilder/errors.go b/lib/sqlbuilder/errors.go
similarity index 100%
rename from sqlbuilder/errors.go
rename to lib/sqlbuilder/errors.go
diff --git a/sqlbuilder/exql/column.go b/lib/sqlbuilder/exql/column.go
similarity index 100%
rename from sqlbuilder/exql/column.go
rename to lib/sqlbuilder/exql/column.go
diff --git a/sqlbuilder/exql/column_test.go b/lib/sqlbuilder/exql/column_test.go
similarity index 100%
rename from sqlbuilder/exql/column_test.go
rename to lib/sqlbuilder/exql/column_test.go
diff --git a/sqlbuilder/exql/column_value.go b/lib/sqlbuilder/exql/column_value.go
similarity index 100%
rename from sqlbuilder/exql/column_value.go
rename to lib/sqlbuilder/exql/column_value.go
diff --git a/sqlbuilder/exql/column_value_test.go b/lib/sqlbuilder/exql/column_value_test.go
similarity index 100%
rename from sqlbuilder/exql/column_value_test.go
rename to lib/sqlbuilder/exql/column_value_test.go
diff --git a/sqlbuilder/exql/columns.go b/lib/sqlbuilder/exql/columns.go
similarity index 100%
rename from sqlbuilder/exql/columns.go
rename to lib/sqlbuilder/exql/columns.go
diff --git a/sqlbuilder/exql/columns_test.go b/lib/sqlbuilder/exql/columns_test.go
similarity index 100%
rename from sqlbuilder/exql/columns_test.go
rename to lib/sqlbuilder/exql/columns_test.go
diff --git a/sqlbuilder/exql/database.go b/lib/sqlbuilder/exql/database.go
similarity index 100%
rename from sqlbuilder/exql/database.go
rename to lib/sqlbuilder/exql/database.go
diff --git a/sqlbuilder/exql/database_test.go b/lib/sqlbuilder/exql/database_test.go
similarity index 100%
rename from sqlbuilder/exql/database_test.go
rename to lib/sqlbuilder/exql/database_test.go
diff --git a/sqlbuilder/exql/default.go b/lib/sqlbuilder/exql/default.go
similarity index 99%
rename from sqlbuilder/exql/default.go
rename to lib/sqlbuilder/exql/default.go
index c0f26c7d619e098f43c68a1b5c9129fdaf945604..09b18e5240f4e44bda133755bc4a1bd92f618ee4 100644
--- a/sqlbuilder/exql/default.go
+++ b/lib/sqlbuilder/exql/default.go
@@ -1,7 +1,7 @@
 package exql
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
 )
 
 const (
diff --git a/sqlbuilder/exql/group_by.go b/lib/sqlbuilder/exql/group_by.go
similarity index 100%
rename from sqlbuilder/exql/group_by.go
rename to lib/sqlbuilder/exql/group_by.go
diff --git a/sqlbuilder/exql/group_by_test.go b/lib/sqlbuilder/exql/group_by_test.go
similarity index 100%
rename from sqlbuilder/exql/group_by_test.go
rename to lib/sqlbuilder/exql/group_by_test.go
diff --git a/sqlbuilder/exql/hash.go b/lib/sqlbuilder/exql/hash.go
similarity index 89%
rename from sqlbuilder/exql/hash.go
rename to lib/sqlbuilder/exql/hash.go
index a198fe4eac47a9279da73cf4546dad999a6c1da6..828837f22be5426f5b8a46aac73a5bbb3c827a9e 100644
--- a/sqlbuilder/exql/hash.go
+++ b/lib/sqlbuilder/exql/hash.go
@@ -4,7 +4,7 @@ import (
 	"reflect"
 	"sync/atomic"
 
-	"upper.io/db.v2/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
 )
 
 type hash struct {
diff --git a/sqlbuilder/exql/interfaces.go b/lib/sqlbuilder/exql/interfaces.go
similarity index 84%
rename from sqlbuilder/exql/interfaces.go
rename to lib/sqlbuilder/exql/interfaces.go
index 0515646a87d7578edf5591d68d469b42de03a6a7..a2ef820494728802d15dacfbb4bcba7cb2e3b0e5 100644
--- a/sqlbuilder/exql/interfaces.go
+++ b/lib/sqlbuilder/exql/interfaces.go
@@ -1,7 +1,7 @@
 package exql
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
 )
 
 // Fragment is any interface that can be both cached and compiled.
diff --git a/sqlbuilder/exql/join.go b/lib/sqlbuilder/exql/join.go
similarity index 100%
rename from sqlbuilder/exql/join.go
rename to lib/sqlbuilder/exql/join.go
diff --git a/sqlbuilder/exql/join_test.go b/lib/sqlbuilder/exql/join_test.go
similarity index 100%
rename from sqlbuilder/exql/join_test.go
rename to lib/sqlbuilder/exql/join_test.go
diff --git a/sqlbuilder/exql/order_by.go b/lib/sqlbuilder/exql/order_by.go
similarity index 100%
rename from sqlbuilder/exql/order_by.go
rename to lib/sqlbuilder/exql/order_by.go
diff --git a/sqlbuilder/exql/order_by_test.go b/lib/sqlbuilder/exql/order_by_test.go
similarity index 100%
rename from sqlbuilder/exql/order_by_test.go
rename to lib/sqlbuilder/exql/order_by_test.go
diff --git a/sqlbuilder/exql/raw.go b/lib/sqlbuilder/exql/raw.go
similarity index 100%
rename from sqlbuilder/exql/raw.go
rename to lib/sqlbuilder/exql/raw.go
diff --git a/sqlbuilder/exql/raw_test.go b/lib/sqlbuilder/exql/raw_test.go
similarity index 100%
rename from sqlbuilder/exql/raw_test.go
rename to lib/sqlbuilder/exql/raw_test.go
diff --git a/sqlbuilder/exql/returning.go b/lib/sqlbuilder/exql/returning.go
similarity index 100%
rename from sqlbuilder/exql/returning.go
rename to lib/sqlbuilder/exql/returning.go
diff --git a/sqlbuilder/exql/statement.go b/lib/sqlbuilder/exql/statement.go
similarity index 98%
rename from sqlbuilder/exql/statement.go
rename to lib/sqlbuilder/exql/statement.go
index 79a6d07ee0b16017fa8e698db549008fc57f5e6a..d0654cfefd62f39280c6488a7af0b11e893fff2c 100644
--- a/sqlbuilder/exql/statement.go
+++ b/lib/sqlbuilder/exql/statement.go
@@ -3,7 +3,7 @@ package exql
 import (
 	"reflect"
 
-	"upper.io/db.v2/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
 )
 
 // Statement represents different kinds of SQL statements.
diff --git a/sqlbuilder/exql/statement_test.go b/lib/sqlbuilder/exql/statement_test.go
similarity index 100%
rename from sqlbuilder/exql/statement_test.go
rename to lib/sqlbuilder/exql/statement_test.go
diff --git a/sqlbuilder/exql/table.go b/lib/sqlbuilder/exql/table.go
similarity index 100%
rename from sqlbuilder/exql/table.go
rename to lib/sqlbuilder/exql/table.go
diff --git a/sqlbuilder/exql/table_test.go b/lib/sqlbuilder/exql/table_test.go
similarity index 100%
rename from sqlbuilder/exql/table_test.go
rename to lib/sqlbuilder/exql/table_test.go
diff --git a/sqlbuilder/exql/template.go b/lib/sqlbuilder/exql/template.go
similarity index 97%
rename from sqlbuilder/exql/template.go
rename to lib/sqlbuilder/exql/template.go
index 557f4df23d9d92a6f20f530029eb4d2d292f026a..c85c5da5cc092116d3db025ec09786c60272accf 100644
--- a/sqlbuilder/exql/template.go
+++ b/lib/sqlbuilder/exql/template.go
@@ -4,7 +4,7 @@ import (
 	"bytes"
 	"text/template"
 
-	"upper.io/db.v2/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
 )
 
 // Type is the type of SQL query the statement represents.
diff --git a/sqlbuilder/exql/utilities.go b/lib/sqlbuilder/exql/utilities.go
similarity index 100%
rename from sqlbuilder/exql/utilities.go
rename to lib/sqlbuilder/exql/utilities.go
diff --git a/sqlbuilder/exql/utilities_test.go b/lib/sqlbuilder/exql/utilities_test.go
similarity index 100%
rename from sqlbuilder/exql/utilities_test.go
rename to lib/sqlbuilder/exql/utilities_test.go
diff --git a/sqlbuilder/exql/value.go b/lib/sqlbuilder/exql/value.go
similarity index 100%
rename from sqlbuilder/exql/value.go
rename to lib/sqlbuilder/exql/value.go
diff --git a/sqlbuilder/exql/value_test.go b/lib/sqlbuilder/exql/value_test.go
similarity index 100%
rename from sqlbuilder/exql/value_test.go
rename to lib/sqlbuilder/exql/value_test.go
diff --git a/sqlbuilder/exql/where.go b/lib/sqlbuilder/exql/where.go
similarity index 100%
rename from sqlbuilder/exql/where.go
rename to lib/sqlbuilder/exql/where.go
diff --git a/sqlbuilder/exql/where_test.go b/lib/sqlbuilder/exql/where_test.go
similarity index 100%
rename from sqlbuilder/exql/where_test.go
rename to lib/sqlbuilder/exql/where_test.go
diff --git a/sqlbuilder/fetch.go b/lib/sqlbuilder/fetch.go
similarity index 99%
rename from sqlbuilder/fetch.go
rename to lib/sqlbuilder/fetch.go
index 97d54155bcf40ffd07a7a9d8644942cde5fc1337..d0802173875ae8559499d7ffb90c70fa5de80c39 100644
--- a/sqlbuilder/fetch.go
+++ b/lib/sqlbuilder/fetch.go
@@ -27,7 +27,7 @@ import (
 	"reflect"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder/reflectx"
+	"upper.io/db.v2/lib/reflectx"
 )
 
 var mapper = reflectx.NewMapper("db")
diff --git a/sqlbuilder/insert.go b/lib/sqlbuilder/insert.go
similarity index 98%
rename from sqlbuilder/insert.go
rename to lib/sqlbuilder/insert.go
index a2529fe1bb6f9d4af994658550de7dfd123ebed3..29e06f3c9d75147a5b6f92742f155837ad6dfe01 100644
--- a/sqlbuilder/insert.go
+++ b/lib/sqlbuilder/insert.go
@@ -3,7 +3,7 @@ package builder
 import (
 	"database/sql"
 
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 type inserter struct {
diff --git a/sqlbuilder/interfaces.go b/lib/sqlbuilder/interfaces.go
similarity index 98%
rename from sqlbuilder/interfaces.go
rename to lib/sqlbuilder/interfaces.go
index c00a05dceea9edab122ba39b4c53036e210a575a..409cd5946c462eab20338e2db82ca77f582ab1df 100644
--- a/sqlbuilder/interfaces.go
+++ b/lib/sqlbuilder/interfaces.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 The upper.io/db.v2/sqlbuilder authors. All rights reserved.
+// Copyright (c) 2015 The upper.io/db.v2/lib/sqlbuilder authors. All rights reserved.
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -26,8 +26,8 @@ import (
 	"fmt"
 )
 
-// SQLBuilder defines methods that can serve as starting points for SQL queries.
-type SQLBuilder interface {
+// Builder defines methods that can serve as starting points for SQL queries.
+type Builder interface {
 
 	// Select initializes and returns a Selector pointed at the given columns.
 	//
diff --git a/sqlbuilder/scanner.go b/lib/sqlbuilder/scanner.go
similarity index 100%
rename from sqlbuilder/scanner.go
rename to lib/sqlbuilder/scanner.go
diff --git a/sqlbuilder/select.go b/lib/sqlbuilder/select.go
similarity index 99%
rename from sqlbuilder/select.go
rename to lib/sqlbuilder/select.go
index 846d6fa6422f77f93bca7d31b523a9a30cbd2a31..276f089e74b84d81c79ed2dec7d558b8af4fbe10 100644
--- a/sqlbuilder/select.go
+++ b/lib/sqlbuilder/select.go
@@ -7,7 +7,7 @@ import (
 	"strings"
 
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 type selectMode uint8
diff --git a/sqlbuilder/template_test.go b/lib/sqlbuilder/template_test.go
similarity index 98%
rename from sqlbuilder/template_test.go
rename to lib/sqlbuilder/template_test.go
index 950072a8d204692646075b0a3ae973e9a4af3288..506382a773e32af3ef929052ff047db51a16b6e2 100644
--- a/sqlbuilder/template_test.go
+++ b/lib/sqlbuilder/template_test.go
@@ -1,8 +1,8 @@
 package builder
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 const (
diff --git a/sqlbuilder/update.go b/lib/sqlbuilder/update.go
similarity index 97%
rename from sqlbuilder/update.go
rename to lib/sqlbuilder/update.go
index eac23e9d3eb05b43876747932f9b36c2a8aae9de..23ad57d1d73ae8923a5316b846b2628d3f240886 100644
--- a/sqlbuilder/update.go
+++ b/lib/sqlbuilder/update.go
@@ -3,7 +3,7 @@ package builder
 import (
 	"database/sql"
 
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 type updater struct {
diff --git a/sqlbuilder/wrapper.go b/lib/sqlbuilder/wrapper.go
similarity index 99%
rename from sqlbuilder/wrapper.go
rename to lib/sqlbuilder/wrapper.go
index 40d2be0acdd59ffef2920ef79190d4fc96385920..ef28556c09b77f3220c6aac65afa21d52bb04fc7 100644
--- a/sqlbuilder/wrapper.go
+++ b/lib/sqlbuilder/wrapper.go
@@ -41,7 +41,7 @@ func init() {
 // Backend holds common methods for SQL databases.
 type Backend interface {
 	db.Database
-	SQLBuilder
+	Builder
 }
 
 // Tx represents transaction on a SQL database. Transactions can only accept
diff --git a/mysql/collection.go b/mysql/collection.go
index 5d8d33c6955c6748763c2bdbe0920e32856ccc64..782c2341f20e87a1eb792d52eabec59a519ca48d 100644
--- a/mysql/collection.go
+++ b/mysql/collection.go
@@ -26,7 +26,7 @@ import (
 
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // table is the actual implementation of a collection.
diff --git a/mysql/database.go b/mysql/database.go
index 202901d1aa930c859cc63038d33ba673af90ea0c..9d21f90d0d0d73ccebba8bd7a7072715f017ef5d 100644
--- a/mysql/database.go
+++ b/mysql/database.go
@@ -30,14 +30,14 @@ import (
 	_ "github.com/go-sql-driver/mysql" // MySQL 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/lib/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // database is the actual implementation of Database
 type database struct {
 	sqladapter.BaseDatabase // Leveraged by sqladapter
-	builder.SQLBuilder
+	builder.Builder
 
 	connURL db.ConnectionURL
 	txMu    sync.Mutex
@@ -107,7 +107,7 @@ func (d *database) open() error {
 	if err != nil {
 		return err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	connFn := func() error {
 		sess, err := sql.Open("mysql", d.ConnectionURL().String())
diff --git a/mysql/mysql.go b/mysql/mysql.go
index ab56fad694c58de1afe9275dbcf72a7b23598c44..357f221cc6963cd26f849646e310983813d65978 100644
--- a/mysql/mysql.go
+++ b/mysql/mysql.go
@@ -27,7 +27,7 @@ import (
 	"upper.io/db.v2"
 
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 const sqlDriver = `mysql`
@@ -70,7 +70,7 @@ func NewTx(sqlTx *sql.Tx) (builder.Tx, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
 		return nil, err
@@ -95,7 +95,7 @@ func New(sess *sql.DB) (builder.Database, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindSession(sess); err != nil {
 		return nil, err
diff --git a/mysql/template.go b/mysql/template.go
index b42d2a2684dfe49682bd76e1f16defad05b2539b..6f246f7bce0e426611e9171ca1ce2f4b6a8d793d 100644
--- a/mysql/template.go
+++ b/mysql/template.go
@@ -22,8 +22,8 @@
 package mysql
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 const (
diff --git a/mysql/template_test.go b/mysql/template_test.go
index f04c66692815907a15646ad0eea7fa997c7b23d5..d7f099927fb44301050397b7687310f995ada08e 100644
--- a/mysql/template_test.go
+++ b/mysql/template_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 func TestTemplateSelect(t *testing.T) {
diff --git a/postgresql/collection.go b/postgresql/collection.go
index e2ec25821a590dc80d9044ec10f048c3847db50c..71fba4bbdd5289f697c814aac4d11a4848bc6e8e 100644
--- a/postgresql/collection.go
+++ b/postgresql/collection.go
@@ -26,7 +26,7 @@ import (
 
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // table is the actual implementation of a collection.
diff --git a/postgresql/database.go b/postgresql/database.go
index 584e1c02374fead68e92cc5b81d4f9c03d8cbae2..687957fdda0dd09b99e96be8fca0d727a440950e 100644
--- a/postgresql/database.go
+++ b/postgresql/database.go
@@ -29,14 +29,14 @@ import (
 	_ "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/lib/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // database is the actual implementation of Database
 type database struct {
 	sqladapter.BaseDatabase // Leveraged by sqladapter
-	builder.SQLBuilder
+	builder.Builder
 
 	connURL db.ConnectionURL
 	txMu    sync.Mutex
@@ -106,7 +106,7 @@ func (d *database) open() error {
 	if err != nil {
 		return err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	connFn := func() error {
 		sess, err := sql.Open("postgres", d.ConnectionURL().String())
diff --git a/postgresql/postgresql.go b/postgresql/postgresql.go
index 198305e9708888a232ef61f77591d7b270a848a3..aba4d744ac2fe8a4e2915a909c9a86fac30b3862 100644
--- a/postgresql/postgresql.go
+++ b/postgresql/postgresql.go
@@ -27,7 +27,7 @@ import (
 	"upper.io/db.v2"
 
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 const sqlDriver = `postgres`
@@ -70,7 +70,7 @@ func NewTx(sqlTx *sql.Tx) (builder.Tx, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
 		return nil, err
@@ -95,7 +95,7 @@ func New(sess *sql.DB) (builder.Database, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindSession(sess); err != nil {
 		return nil, err
diff --git a/postgresql/template.go b/postgresql/template.go
index 697184c15b86af2cae2feefad1bcc29bbeeecf54..4c95c2af66a5b871427d7230b6b34f379aa05a3a 100644
--- a/postgresql/template.go
+++ b/postgresql/template.go
@@ -22,8 +22,8 @@
 package postgresql
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 const (
diff --git a/postgresql/template_test.go b/postgresql/template_test.go
index 25c8f1ad43d9ef55ecc81c6996c246cf2c7b8d3b..02f0defcb08f520bad09c241802eba886ce9c3cd 100644
--- a/postgresql/template_test.go
+++ b/postgresql/template_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 func TestTemplateSelect(t *testing.T) {
diff --git a/postgresql/tx.go b/postgresql/tx.go
index a73bb5eed1a84fd0e01909730f7805ce3a60dce7..9d89e2fcc13e71ce91cea46cffe05bed23dc4e87 100644
--- a/postgresql/tx.go
+++ b/postgresql/tx.go
@@ -23,7 +23,7 @@ package postgresql
 
 import (
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 type tx struct {
diff --git a/ql/collection.go b/ql/collection.go
index b7d799562776b5db8d1d3c01ce97d7309a0cf443..fd66364118a004cf5b0c94dc633fea3a4f0e03bf 100644
--- a/ql/collection.go
+++ b/ql/collection.go
@@ -26,7 +26,7 @@ import (
 
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // table is the actual implementation of a collection.
diff --git a/ql/database.go b/ql/database.go
index 709d07f09ef59738eec1e9e22c72af873bda1c4d..2458fcff43227028ca4d9b222876ae27fd19b31c 100644
--- a/ql/database.go
+++ b/ql/database.go
@@ -30,14 +30,14 @@ import (
 	_ "github.com/cznic/ql/driver" // QL 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/lib/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // database is the actual implementation of Database
 type database struct {
 	sqladapter.BaseDatabase // Leveraged by sqladapter
-	builder.SQLBuilder
+	builder.Builder
 
 	connURL db.ConnectionURL
 	txMu    sync.Mutex
@@ -110,7 +110,7 @@ func NewTx(sqlTx *sql.Tx) (builder.Tx, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
 		return nil, err
@@ -135,7 +135,7 @@ func New(sess *sql.DB) (builder.Database, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindSession(sess); err != nil {
 		return nil, err
@@ -180,7 +180,7 @@ func (d *database) open() error {
 	if err != nil {
 		return err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	openFn := func() error {
 		openFiles := atomic.LoadInt32(&fileOpenCount)
@@ -308,7 +308,7 @@ func (d *database) FindDatabaseName() (string, error) {
 // TableExists allows sqladapter check whether a table exists and returns an
 // error in case it doesn't.
 func (d *database) TableExists(name string) error {
-	q := d.SQLBuilder.Select("Name").
+	q := d.Builder.Select("Name").
 		From("__Table").
 		Where("Name == ?", name)
 
diff --git a/ql/ql.go b/ql/ql.go
index cdb85a880d76dcdb04d5f3889b0dc0c5d21a968d..f0682f1d61e10fe2ce68fae09b35d37514fcf652 100644
--- a/ql/ql.go
+++ b/ql/ql.go
@@ -22,7 +22,7 @@
 package ql // import "upper.io/db.v2/ql"
 
 import (
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 const sqlDriver = `ql`
diff --git a/ql/template.go b/ql/template.go
index fe2d07a7947c470d9ef742443e5ddc531fa3a3e1..c75a41f59c37b8bc501d79a91e84cb7860cabb6c 100644
--- a/ql/template.go
+++ b/ql/template.go
@@ -22,8 +22,8 @@
 package ql
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 const (
diff --git a/ql/template_test.go b/ql/template_test.go
index df35ac7972e64d5887348eb51449148c477a21a6..286dad761693f11c9f5d02a3abb03c1787979546 100644
--- a/ql/template_test.go
+++ b/ql/template_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 func TestTemplateSelect(t *testing.T) {
diff --git a/sqlite/collection.go b/sqlite/collection.go
index dd55c119c01e1b65d2866d6f3d5bd499f92dec97..ed27f6b37b099a42080e5d1b9df799eddf6ccc01 100644
--- a/sqlite/collection.go
+++ b/sqlite/collection.go
@@ -26,7 +26,7 @@ import (
 
 	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 // table is the actual implementation of a collection.
diff --git a/sqlite/database.go b/sqlite/database.go
index 0da100776e3e44b0b9e9e812079046bd2ac2ae6a..7c71b38dc1b910e0ae61168958857c86a866cc2c 100644
--- a/sqlite/database.go
+++ b/sqlite/database.go
@@ -31,14 +31,14 @@ import (
 	_ "github.com/mattn/go-sqlite3" // SQLite3 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/lib/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 // database is the actual implementation of Database
 type database struct {
 	sqladapter.BaseDatabase // Leveraged by sqladapter
-	builder.SQLBuilder
+	builder.Builder
 
 	connURL db.ConnectionURL
 	txMu    sync.Mutex
@@ -122,7 +122,7 @@ func (d *database) open() error {
 	if err != nil {
 		return err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	openFn := func() error {
 		openFiles := atomic.LoadInt32(&fileOpenCount)
diff --git a/sqlite/sqlite.go b/sqlite/sqlite.go
index 6a1ef116db7a14b7a2044756477644ca14be2400..48bf9877c99f465d68c7219ef08369da444807b3 100644
--- a/sqlite/sqlite.go
+++ b/sqlite/sqlite.go
@@ -27,7 +27,7 @@ import (
 	"upper.io/db.v2"
 
 	"upper.io/db.v2/internal/sqladapter"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 const sqlDriver = `sqlite`
@@ -70,7 +70,7 @@ func NewTx(sqlTx *sql.Tx) (builder.Tx, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindTx(sqlTx); err != nil {
 		return nil, err
@@ -95,7 +95,7 @@ func New(sess *sql.DB) (builder.Database, error) {
 	if err != nil {
 		return nil, err
 	}
-	d.SQLBuilder = b
+	d.Builder = b
 
 	if err := d.BaseDatabase.BindSession(sess); err != nil {
 		return nil, err
diff --git a/sqlite/template.go b/sqlite/template.go
index c30a138f24eb235e03deeb769e83da2abc09c27e..abd5d132c20e1b91c88d9084bfc51519545ee9a9 100644
--- a/sqlite/template.go
+++ b/sqlite/template.go
@@ -22,8 +22,8 @@
 package sqlite
 
 import (
-	"upper.io/db.v2/sqlbuilder/cache"
-	"upper.io/db.v2/sqlbuilder/exql"
+	"upper.io/db.v2/lib/sqlbuilder/cache"
+	"upper.io/db.v2/lib/sqlbuilder/exql"
 )
 
 const (
diff --git a/sqlite/template_test.go b/sqlite/template_test.go
index 96d845c9315e38a8f12c98970fedd509e5e1769e..a550ce4bbce067848f1095f83fbe83c66bdf5f6e 100644
--- a/sqlite/template_test.go
+++ b/sqlite/template_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 func TestTemplateSelect(t *testing.T) {