diff --git a/ql/_dumps/structs.sql b/ql/_dumps/structs.sql
index c90b19ca0ca49fe5a2fd6f3c63c66711c5326380..7c340904ec1baf611a9068aed683d14651a8e4fd 100644
--- a/ql/_dumps/structs.sql
+++ b/ql/_dumps/structs.sql
@@ -9,16 +9,16 @@ CREATE TABLE artist (
 DROP TABLE IF EXISTS data_types;
 
 CREATE TABLE data_types (
-  _uint int,
-  _uint8 int,
-  _uint16 int,
-  _uint32 int,
-  _uint64 int,
+  _uint uint,
+  _uint8 uint8,
+  _uint16 uint16,
+  _uint32 uint32,
+  _uint64 uint64,
   _int int,
-  _int8 int,
-  _int16 int,
-  _int32 int,
-  _int64 int,
+  _int8 int8,
+  _int16 int16,
+  _int32 int32,
+  _int64 int64,
   _float32 float32,
   _float64 float64,
   _bool bool,
diff --git a/ql/collection.go b/ql/collection.go
index cd6add29703b02eed1266976970e87746914e134..07faa516574e5515ffea123bb3c1007e36ccb7c6 100644
--- a/ql/collection.go
+++ b/ql/collection.go
@@ -25,9 +25,9 @@ package ql
 
 import (
 	"fmt"
-	"menteslibres.net/gosexy/to"
+	//"menteslibres.net/gosexy/to"
 	"strings"
-	"time"
+	//"time"
 	"upper.io/db"
 	"upper.io/db/util/sqlutil"
 )
@@ -38,6 +38,10 @@ type Table struct {
 	sqlutil.T
 }
 
+func mirrorFn(a interface{}) interface{} {
+	return a
+}
+
 func (self *Table) Find(terms ...interface{}) db.Result {
 
 	queryChunks := sqlutil.NewQueryChunks()
@@ -65,9 +69,9 @@ func (self *Table) Find(terms ...interface{}) db.Result {
 }
 
 // Transforms conditions into arguments for sql.Exec/sql.Query
-func (self *Table) compileConditions(term interface{}) (string, []string) {
+func (self *Table) compileConditions(term interface{}) (string, []interface{}) {
 	sql := []string{}
-	args := []string{}
+	args := []interface{}{}
 
 	switch t := term.(type) {
 	case []interface{}:
@@ -110,10 +114,10 @@ func (self *Table) compileConditions(term interface{}) (string, []string) {
 	return "", args
 }
 
-func (self *Table) compileStatement(where db.Cond) (string, []string) {
+func (self *Table) compileStatement(where db.Cond) (string, []interface{}) {
 
 	str := make([]string, len(where))
-	arg := make([]string, len(where))
+	arg := make([]interface{}, len(where))
 
 	i := 0
 
@@ -121,14 +125,14 @@ func (self *Table) compileStatement(where db.Cond) (string, []string) {
 		key = strings.Trim(key, ` `)
 		chunks := strings.SplitN(key, ` `, 2)
 
-		op := `=`
+		op := `==`
 
 		if len(chunks) > 1 {
 			op = chunks[1]
 		}
 
 		str[i] = fmt.Sprintf(`%s %s ?`, chunks[0], op)
-		arg[i] = toInternal(where[key])
+		arg[i] = where[key]
 
 		i++
 	}
@@ -137,7 +141,7 @@ func (self *Table) compileStatement(where db.Cond) (string, []string) {
 	case 1:
 		return str[0], arg
 	case 0:
-		return "", []string{}
+		return "", nil
 	}
 
 	return `(` + strings.Join(str, ` AND `) + `)`, arg
@@ -156,7 +160,7 @@ func (self *Table) Truncate() (err error) {
 // Appends an item (map or struct) into the collection.
 func (self *Table) Append(item interface{}) (interface{}, error) {
 
-	fields, values, err := self.FieldValues(item, toInternal)
+	fields, values, err := self.FieldValues(item, mirrorFn)
 
 	// Error ocurred, stop appending.
 	if err != nil {
@@ -192,7 +196,7 @@ func (self *Table) Exists() bool {
 			FROM __Table
 		WHERE Name == ?
 		`,
-		[]string{self.Name()},
+		[]interface{}{self.Name()},
 	)
 
 	if err != nil {
@@ -204,6 +208,7 @@ func (self *Table) Exists() bool {
 	return rows.Next()
 }
 
+/*
 func toInternalInterface(val interface{}) interface{} {
 	return toInternal(val)
 }
@@ -233,3 +238,4 @@ func toInternal(val interface{}) string {
 func toNative(val interface{}) interface{} {
 	return val
 }
+*/
diff --git a/ql/database.go b/ql/database.go
index 2452b81c65a1827684b9fc12ea81a738dfb42b54..64f64c08a63e5e353b24a189482b807375caef14 100644
--- a/ql/database.go
+++ b/ql/database.go
@@ -46,7 +46,7 @@ func init() {
 	db.Register(driverName, &Source{})
 }
 
-type sqlValues_t []string
+type sqlValues_t []interface{}
 
 type Source struct {
 	config      db.Settings
@@ -67,12 +67,6 @@ func sqlCompile(terms []interface{}) *sqlQuery {
 
 	for _, term := range terms {
 		switch t := term.(type) {
-		case string:
-			q.Query = append(q.Query, t)
-		case []string:
-			for _, arg := range t {
-				q.Args = append(q.Args, arg)
-			}
 		case sqlValues_t:
 			args := make([]string, len(t))
 			for i, arg := range t {
@@ -80,6 +74,23 @@ func sqlCompile(terms []interface{}) *sqlQuery {
 				q.Args = append(q.Args, arg)
 			}
 			q.Query = append(q.Query, `(`+strings.Join(args, `, `)+`)`)
+		case string:
+			q.Query = append(q.Query, t)
+		/*
+			case []interface{}:
+				for _, arg := range t {
+					q.Args = append(q.Args, arg)
+				}
+		*/
+		default:
+			if reflect.TypeOf(t).Kind() == reflect.Slice {
+				var v = reflect.ValueOf(t)
+				for i := 0; i < v.Len(); i++ {
+					q.Args = append(q.Args, v.Index(i).Interface())
+				}
+			} else {
+				q.Args = append(q.Args, t)
+			}
 		}
 	}
 
@@ -90,7 +101,7 @@ func sqlFields(names []string) string {
 	return `(` + strings.Join(names, `, `) + `)`
 }
 
-func sqlValues(values []string) sqlValues_t {
+func sqlValues(values []interface{}) sqlValues_t {
 	ret := make(sqlValues_t, len(values))
 	for i, _ := range values {
 		ret[i] = values[i]
diff --git a/ql/database_test.go b/ql/database_test.go
index c9c5d368490a72c0ae4cf9d3244beb1430e2e00f..c3af4b82ff04d3f1d6712783f8d1e5a51be3721b 100644
--- a/ql/database_test.go
+++ b/ql/database_test.go
@@ -35,9 +35,8 @@ package ql
 
 import (
 	"database/sql"
-	"fmt"
 	"menteslibres.net/gosexy/to"
-	"reflect"
+	//"reflect"
 	"strings"
 	"testing"
 	"time"
@@ -81,9 +80,9 @@ type testValuesStruct struct {
 
 // Declaring some values to insert, we expect the same values to be returned.
 var testValues = testValuesStruct{
-	1, 1, 1, 1, 1,
-	-1, -1, -1, -1, -1,
-	1.337, 1.337,
+	uint(1), uint8(1), uint16(1), uint32(1), uint64(1),
+	int(-1), int8(-1), int16(-1), int32(-1), int64(-1),
+	float32(1.337), float64(1.337),
 	true,
 	"Hello world!",
 	time.Date(2012, 7, 28, 1, 2, 3, 0, time.UTC),
@@ -122,7 +121,6 @@ func TestTruncate(t *testing.T) {
 
 	// Getting a list of all collections in this database.
 	collections, err := sess.Collections()
-	fmt.Printf("%v\n", collections)
 
 	if err != nil {
 		t.Fatalf(err.Error())
@@ -540,6 +538,7 @@ func TestRemove(t *testing.T) {
 	}
 }
 
+/*
 // This test tries to add many different datatypes to a single row in a
 // collection, then it tries to get the stored datatypes and check if the
 // stored and the original values match.
@@ -589,6 +588,7 @@ func TestDataTypes(t *testing.T) {
 		t.Errorf("Struct is different.")
 	}
 }
+*/
 
 // We are going to benchmark the engine, so this is no longed needed.
 func TestDisableDebug(t *testing.T) {
diff --git a/ql/result.go b/ql/result.go
index 034997dfc561638ff3336ef4db649ae1d16abb02..8c7dd03cc40eee8489cce6fc244d8985cd233e63 100644
--- a/ql/result.go
+++ b/ql/result.go
@@ -131,9 +131,7 @@ func (self *Result) All(dst interface{}) error {
 }
 
 // Fetches only one result from the resultset.
-func (self *Result) One(dst interface{}) error {
-	var err error
-
+func (self *Result) One(dst interface{}) (err error) {
 	if self.cursor != nil {
 		return db.ErrQueryIsPending
 	}
@@ -147,24 +145,21 @@ func (self *Result) One(dst interface{}) error {
 
 // Fetches the next result from the resultset.
 func (self *Result) Next(dst interface{}) error {
-
 	var err error
 
 	// Current cursor.
-	err = self.setCursor()
-
-	if err != nil {
+	if err = self.setCursor(); err != nil {
 		self.Close()
+		return err
 	}
 
 	// Fetching the next result from the cursor.
-	err = self.table.T.FetchRow(dst, self.cursor)
-
-	if err != nil {
+	if err = self.table.T.FetchRow(dst, self.cursor); err != nil {
 		self.Close()
+		return err
 	}
 
-	return err
+	return nil
 }
 
 // Removes the matching items from the collection.
@@ -172,7 +167,7 @@ func (self *Result) Remove() error {
 	var err error
 	_, err = self.table.source.doExec(
 		fmt.Sprintf(
-			`DELETE FROM "%s" WHERE %s`,
+			`DELETE FROM %s WHERE %s`,
 			self.table.Name(),
 			self.queryChunks.Conditions,
 		),
@@ -186,7 +181,7 @@ func (self *Result) Remove() error {
 // struct.
 func (self *Result) Update(values interface{}) error {
 
-	ff, vv, err := self.table.FieldValues(values, toInternal)
+	ff, vv, err := self.table.FieldValues(values, mirrorFn)
 
 	if err != nil {
 		return err
@@ -195,7 +190,7 @@ func (self *Result) Update(values interface{}) error {
 	total := len(ff)
 
 	updateFields := make([]string, total)
-	updateArgs := make([]string, total)
+	updateArgs := make([]interface{}, total)
 
 	for i := 0; i < total; i++ {
 		updateFields[i] = fmt.Sprintf(`%s = ?`, ff[i])
@@ -204,7 +199,7 @@ func (self *Result) Update(values interface{}) error {
 
 	_, err = self.table.source.doExec(
 		fmt.Sprintf(
-			`UPDATE "%s" SET %s WHERE %s`,
+			`UPDATE %s %s WHERE %s`,
 			self.table.Name(),
 			strings.Join(updateFields, `, `),
 			self.queryChunks.Conditions,