diff --git a/mongo/benchmark_test.go b/mongo/benchmark_test.go
index 142b9b9fbf797a05b11637a1f4be4f32b5c35fa9..e86c3d44ed13f33b49018b88067c119ed920b103 100644
--- a/mongo/benchmark_test.go
+++ b/mongo/benchmark_test.go
@@ -27,7 +27,7 @@ func connectAndAddFakeRows() (db.Database, error) {
 	var err error
 	var sess db.Database
 
-	if sess, err = db.Open(Adapter, settings); err != nil {
+	if sess, err = Open(settings); err != nil {
 		return nil, err
 	}
 
@@ -50,7 +50,7 @@ func BenchmarkMgoInsert(b *testing.B) {
 	var err error
 	var sess db.Database
 
-	if sess, err = db.Open(Adapter, settings); err != nil {
+	if sess, err = Open(settings); err != nil {
 		b.Fatal(err)
 	}
 
@@ -73,7 +73,7 @@ func BenchmarkMgoInsert(b *testing.B) {
 // BenchmarkUpperInsert benchmarks an insertion by upper.io/db.v2.
 func BenchmarkUpperInsert(b *testing.B) {
 
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 	if err != nil {
 		b.Fatal(err)
 	}
@@ -100,7 +100,7 @@ func BenchmarkUpperInsert(b *testing.B) {
 // with variable parameters.
 func BenchmarkUpperInsertVariableArgs(b *testing.B) {
 
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 	if err != nil {
 		b.Fatal(err)
 	}
@@ -337,7 +337,7 @@ func BenchmarkUpperGetCollection(b *testing.B) {
 	var err error
 	var sess db.Database
 
-	if sess, err = db.Open(Adapter, settings); err != nil {
+	if sess, err = Open(settings); err != nil {
 		b.Fatal(err)
 	}
 
@@ -354,7 +354,7 @@ func BenchmarkUpperC(b *testing.B) {
 	var err error
 	var sess db.Database
 
-	if sess, err = db.Open(Adapter, settings); err != nil {
+	if sess, err = Open(settings); err != nil {
 		b.Fatal(err)
 	}
 
diff --git a/mongo/database.go b/mongo/database.go
index 42c66f9edea09fb4f91c6e22fa6db9d977f7f640..c8f14e70b0f71b921ca88d36e712eec9fbf169bf 100644
--- a/mongo/database.go
+++ b/mongo/database.go
@@ -28,7 +28,6 @@ import (
 
 	"gopkg.in/mgo.v2"
 	"upper.io/db.v2"
-	"upper.io/db.v2/sqlbuilder"
 )
 
 // Adapter holds the name of the mongodb adapter.
@@ -48,7 +47,9 @@ type Source struct {
 }
 
 func init() {
-	db.Register(Adapter, &Source{})
+	db.RegisterAdapter(Adapter, &db.AdapterFuncMap{
+		Open: Open,
+	})
 }
 
 // Open stablishes a new connection to a SQL server.
@@ -196,7 +197,3 @@ func (s *Source) versionAtLeast(version ...int) bool {
 	}
 	return true
 }
-
-func (s *Source) Builder() builder.Builder {
-	return nil
-}
diff --git a/mongo/database_test.go b/mongo/database_test.go
index 3a51d315875625cb1541ad5a5c90212c80e31bdd..5b3338898282002d65e4e91febb662ad55deea29 100644
--- a/mongo/database_test.go
+++ b/mongo/database_test.go
@@ -102,7 +102,7 @@ func TestOpenWithWrongData(t *testing.T) {
 	}
 
 	// Attempt to open an empty database.
-	if _, err = db.Open(Adapter, rightSettings); err != nil {
+	if _, err = Open(rightSettings); err != nil {
 		// Must fail.
 		t.Fatal(err)
 	}
@@ -115,7 +115,7 @@ func TestOpenWithWrongData(t *testing.T) {
 		Password: "fail",
 	}
 
-	if _, err = db.Open(Adapter, wrongSettings); err == nil {
+	if _, err = Open(wrongSettings); err == nil {
 		t.Fatalf("Expecting an error.")
 	}
 
@@ -127,7 +127,7 @@ func TestOpenWithWrongData(t *testing.T) {
 		Password: settings.Password,
 	}
 
-	if _, err = db.Open(Adapter, wrongSettings); err == nil {
+	if _, err = Open(wrongSettings); err == nil {
 		t.Fatalf("Expecting an error.")
 	}
 
@@ -139,7 +139,7 @@ func TestOpenWithWrongData(t *testing.T) {
 		Password: settings.Password,
 	}
 
-	if _, err = db.Open(Adapter, wrongSettings); err == nil {
+	if _, err = Open(wrongSettings); err == nil {
 		t.Fatalf("Expecting an error.")
 	}
 }
@@ -150,7 +150,7 @@ func TestTruncate(t *testing.T) {
 	var err error
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -193,7 +193,7 @@ func TestInsert(t *testing.T) {
 	var id interface{}
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -320,7 +320,7 @@ func TestResultCount(t *testing.T) {
 	var res db.Result
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -352,7 +352,7 @@ func TestGroup(t *testing.T) {
 	var sess db.Database
 	var stats db.Collection
 
-	if sess, err = db.Open(Adapter, settings); err != nil {
+	if sess, err = Open(settings); err != nil {
 		t.Fatal(err)
 	}
 
@@ -402,7 +402,7 @@ func TestGroup(t *testing.T) {
 
 // Attempts to count all rows in a table that does not exist.
 func TestResultNonExistentCount(t *testing.T) {
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -428,7 +428,7 @@ func TestResultFetch(t *testing.T) {
 	var res db.Result
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -560,7 +560,7 @@ func TestUpdate(t *testing.T) {
 	var err error
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -657,7 +657,7 @@ func TestOperators(t *testing.T) {
 	var res db.Result
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -689,7 +689,7 @@ func TestDelete(t *testing.T) {
 	var err error
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)
@@ -731,7 +731,7 @@ func TestDataTypes(t *testing.T) {
 	var res db.Result
 
 	// Opening database.
-	sess, err := db.Open(Adapter, settings)
+	sess, err := Open(settings)
 
 	if err != nil {
 		t.Fatal(err)