diff --git a/db.go b/db.go
index 8b9ad403e5ec11ae3137c29ff5ed46d5fe4d5eea..ac2a03ed1a227d6a5fcde8b988f8b7a4ad8d1f28 100644
--- a/db.go
+++ b/db.go
@@ -31,6 +31,7 @@ package db
 
 import (
 	"fmt"
+	"reflect"
 )
 
 /*
@@ -416,12 +417,15 @@ var wrappers = make(map[string]Database)
 	Registers a database wrapper with an unique name.
 */
 func Register(name string, driver Database) {
+
 	if name == "" {
 		panic("Missing wrapper name.")
 	}
+
 	if _, ok := wrappers[name]; ok != false {
-		panic("A wrapper with the same name was already registered.")
+		panic("Register called twice for driver " + name)
 	}
+
 	wrappers[name] = driver
 }
 
@@ -429,12 +433,21 @@ func Register(name string, driver Database) {
 	Opens a database using the named driver and the db.DataSource settings.
 */
 func Open(name string, settings DataSource) (Database, error) {
-	if _, ok := wrappers[name]; ok == false {
+
+	driver, ok := wrappers[name]
+
+	if ok == false {
 		panic(fmt.Sprintf("Unknown wrapper: %s.", name))
 	}
-	err := wrappers[name].Setup(settings)
+
+	// Creating a new connection everytime Open() is called.
+	conn := reflect.New(reflect.ValueOf(driver).Elem().Type()).Interface().(Database)
+
+	err := conn.Setup(settings)
+
 	if err != nil {
 		return nil, err
 	}
-	return wrappers[name], nil
+
+	return conn, nil
 }
diff --git a/mysql/mysql.go b/mysql/mysql.go
index 6325b4b3957e7e8bb384332778e2eab818078da2..0ea251d93381457855ee5807384202e6c77fbca5 100644
--- a/mysql/mysql.go
+++ b/mysql/mysql.go
@@ -179,6 +179,7 @@ func (self *Source) Close() error {
 */
 func (self *Source) Setup(config db.DataSource) error {
 	self.config = config
+	self.session = nil
 	self.collections = make(map[string]db.Collection)
 	return self.Open()
 }
diff --git a/mysql/mysql_test.go b/mysql/mysql_test.go
index 9c6a3cace75a833b1d830e409eaca9454a1f5e64..9f2d2b3187789734813cc9f9e08a698a1963cdd1 100644
--- a/mysql/mysql_test.go
+++ b/mysql/mysql_test.go
@@ -216,6 +216,21 @@ func TestFind(t *testing.T) {
 
 	defer sess.Close()
 
+	/*
+		// Testing simultaneous connection.
+		sess2, err := db.Open(wrapperName, db.DataSource {
+			Database: "mysql",
+			Socket: socket,
+			User: "root",
+		})
+
+		if err != nil {
+			t.Fatalf(err.Error())
+		}
+
+		defer sess2.Close()
+	*/
+
 	people, _ := sess.Collection("people")
 
 	// Testing Find()