diff --git a/db.go b/db.go
index ac2a03ed1a227d6a5fcde8b988f8b7a4ad8d1f28..71272898b62efd0be84f464c6ebcbd8872e2c2d5 100644
--- a/db.go
+++ b/db.go
@@ -30,6 +30,7 @@
 package db
 
 import (
+	"errors"
 	"fmt"
 	"reflect"
 )
@@ -410,6 +411,23 @@ type MultiFlag bool
 type SqlValues []string
 type SqlArgs []string
 
+// Error messages
+var (
+	ErrExpectingPointer        = errors.New(`Expecting a pointer destination (dst interface{}).`)
+	ErrExpectingSlicePointer   = errors.New(`Expecting a pointer to an slice (dst interface{}).`)
+	ErrExpectingSliceMapStruct = errors.New(`Expecting a pointer to an slice of maps or structs (dst interface{}).`)
+	ErrExpectingMapOrStruct    = errors.New(`Expecting either a pointer to a map or a pointer to a struct.`)
+	ErrNoMoreRows              = errors.New(`There are no more rows in this result set.`)
+	ErrNotConnected            = errors.New(`You're currently not connected.`)
+	ErrMissingDatabaseName     = errors.New(`Missing a database name.`)
+	ErrCollectionDoesNotExists = errors.New(`Collection does not exists.`)
+	ErrSockerOrHost            = errors.New(`You can connect either to a socket or a host but not both.`)
+	ErrQueryLimitParam         = errors.New(`A query can accept only one db.Limit() parameter.`)
+	ErrQuerySortParam          = errors.New(`A query can accept only one db.Sort{} parameter.`)
+	ErrQueryOffsetParam        = errors.New(`A query can accept only one db.Offset() parameter.`)
+	ErrMissingConditions       = errors.New(`Missing selector conditions.`)
+)
+
 // Registered wrappers.
 var wrappers = make(map[string]Database)
 
diff --git a/mongo/mongo.go b/mongo/mongo.go
index bc959bc8d82b4be0d25df76a35a8c2a70d354136..30122876b01283f6155316f9c66d4c72c71b6dcf 100644
--- a/mongo/mongo.go
+++ b/mongo/mongo.go
@@ -25,8 +25,8 @@ package mongo
 
 import (
 	"fmt"
-	"menteslibres.net/gosexy/db"
 	"labix.org/v2/mgo"
+	"menteslibres.net/gosexy/db"
 	"net/url"
 	"time"
 )
@@ -84,7 +84,7 @@ func (self *Source) Collection(name string) (db.Collection, error) {
 	col.SetName = name
 
 	if col.Exists() == false {
-		err = fmt.Errorf("Collection %s does not exists.", name)
+		err = db.ErrCollectionDoesNotExists
 	}
 
 	return col, err
@@ -131,7 +131,7 @@ func (self *Source) Open() error {
 	self.session, err = mgo.DialWithTimeout(connURL.String(), 5*time.Second)
 
 	if err != nil {
-		return fmt.Errorf("Could not connect to %s: %s.", self.config.Host, err.Error())
+		return err
 	}
 
 	if self.config.Database != "" {
diff --git a/mongo/result.go b/mongo/result.go
index 2d093b499a867a161f071e3163f2a8a2749876c0..3ba941a6c135d96c32c6294e5b5b9cce87eaad8f 100644
--- a/mongo/result.go
+++ b/mongo/result.go
@@ -24,10 +24,9 @@
 package mongo
 
 import (
-	"errors"
+	"labix.org/v2/mgo"
 	"menteslibres.net/gosexy/db"
 	"menteslibres.net/gosexy/db/util"
-	"labix.org/v2/mgo"
 )
 
 type Result struct {
@@ -61,7 +60,7 @@ func (self *Result) All(dst interface{}) error {
 func (self *Result) Next(dst interface{}) error {
 
 	if self.iter.Next(dst) == false {
-		return errors.New("No more results.")
+		return db.ErrNoMoreRows
 	}
 
 	if self.iter.Err() != nil {
diff --git a/mysql/collection.go b/mysql/collection.go
index 66d8d54f45fb7220dd9672e4dfab38ba5c075123..68620251fc30d84a55bad32ec5853174016377c2 100644
--- a/mysql/collection.go
+++ b/mysql/collection.go
@@ -24,7 +24,6 @@
 package mysql
 
 import (
-	"errors"
 	"fmt"
 	_ "github.com/go-sql-driver/mysql"
 	"menteslibres.net/gosexy/db"
@@ -54,7 +53,7 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 			if queryChunks.Limit == "" {
 				queryChunks.Limit = fmt.Sprintf("LIMIT %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Limit() parameter.")
+				return nil, db.ErrQueryLimitParam
 			}
 		case db.Sort:
 			if queryChunks.Sort == "" {
@@ -73,13 +72,13 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 				}
 				queryChunks.Sort = fmt.Sprintf("ORDER BY %s", strings.Join(sortChunks, ", "))
 			} else {
-				return nil, errors.New("A query can accept only one db.Sort{} parameter.")
+				return nil, db.ErrQuerySortParam
 			}
 		case db.Offset:
 			if queryChunks.Offset == "" {
 				queryChunks.Offset = fmt.Sprintf("OFFSET %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Offset() parameter.")
+				return nil, db.ErrQueryOffsetParam
 			}
 		case db.Fields:
 			queryChunks.Fields = append(queryChunks.Fields, v...)
@@ -264,7 +263,7 @@ func (self *Table) Update(selector interface{}, update interface{}) error {
 	selectorConds, selectorArgs := self.compileConditions(selector)
 
 	if selectorConds == "" {
-		return errors.New("Received no conditions.")
+		return db.ErrMissingConditions
 	}
 
 	fields, values, err := self.FieldValues(update, toInternal)
diff --git a/mysql/mysql.go b/mysql/mysql.go
index 0ea251d93381457855ee5807384202e6c77fbca5..5578d917efa52a1529f8306a9ee43dec535ff8e1 100644
--- a/mysql/mysql.go
+++ b/mysql/mysql.go
@@ -25,7 +25,6 @@ package mysql
 
 import (
 	"database/sql"
-	"errors"
 	"fmt"
 	_ "github.com/go-sql-driver/mysql"
 	"menteslibres.net/gosexy/db"
@@ -113,7 +112,7 @@ func (self *Source) Name() string {
 // Wraps sql.DB.QueryRow
 func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 	if self.session == nil {
-		return nil, errors.New("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -131,7 +130,7 @@ func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 // Wraps sql.DB.Query
 func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -149,7 +148,7 @@ func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 // Wraps sql.DB.Exec
 func (self *Source) doExec(terms ...interface{}) (sql.Result, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -201,11 +200,11 @@ func (self *Source) Open() error {
 	}
 
 	if self.config.Database == "" {
-		return fmt.Errorf("Database name is required.")
+		return db.ErrMissingDatabaseName
 	}
 
 	if self.config.Socket != "" && self.config.Host != "" {
-		return errors.New("Socket or Host are mutually exclusive.")
+		return db.ErrSockerOrHost
 	}
 
 	if self.config.Charset == "" {
@@ -303,7 +302,7 @@ func (self *Source) Collection(name string) (db.Collection, error) {
 
 	// Table exists?
 	if table.Exists() == false {
-		return table, fmt.Errorf("Table %s does not exists.", name)
+		return table, db.ErrCollectionDoesNotExists
 	}
 
 	// Fetching table datatypes and mapping to internal gotypes.
diff --git a/postgresql/collection.go b/postgresql/collection.go
index 68a1e4358edf8f3f9e22536a7fc53394ec5b45c1..6539fb0f85ada81f6cddc3e69056f4bcaed9ec22 100644
--- a/postgresql/collection.go
+++ b/postgresql/collection.go
@@ -24,7 +24,6 @@
 package postgresql
 
 import (
-	"errors"
 	"fmt"
 	"menteslibres.net/gosexy/db"
 	"menteslibres.net/gosexy/db/util/sqlutil"
@@ -53,7 +52,7 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 			if queryChunks.Limit == "" {
 				queryChunks.Limit = fmt.Sprintf("LIMIT %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Limit() parameter.")
+				return nil, db.ErrQueryLimitParam
 			}
 		case db.Sort:
 			if queryChunks.Sort == "" {
@@ -72,13 +71,13 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 				}
 				queryChunks.Sort = fmt.Sprintf("ORDER BY %s", strings.Join(sortChunks, ", "))
 			} else {
-				return nil, errors.New("A query can accept only one db.Sort{} parameter.")
+				return nil, db.ErrQuerySortParam
 			}
 		case db.Offset:
 			if queryChunks.Offset == "" {
 				queryChunks.Offset = fmt.Sprintf("OFFSET %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Offset() parameter.")
+				return nil, db.ErrQueryOffsetParam
 			}
 		case db.Fields:
 			queryChunks.Fields = append(queryChunks.Fields, v...)
@@ -287,7 +286,7 @@ func (self *Table) Update(selector interface{}, update interface{}) error {
 	selectorConds, selectorArgs := self.compileConditions(selector)
 
 	if selectorConds == "" {
-		return errors.New("Received no conditions.")
+		return db.ErrMissingConditions
 	}
 
 	fields, values, err := self.FieldValues(update, toInternal)
diff --git a/postgresql/postgresql.go b/postgresql/postgresql.go
index 3bb9f52cd134bf765c774938b2ab45bddbaedd1b..e6137e1c203ba08213b6c6db1d005c42b870d01b 100644
--- a/postgresql/postgresql.go
+++ b/postgresql/postgresql.go
@@ -25,7 +25,6 @@ package postgresql
 
 import (
 	"database/sql"
-	"errors"
 	"fmt"
 	_ "github.com/xiam/gopostgresql"
 	"menteslibres.net/gosexy/db"
@@ -110,7 +109,7 @@ func (self *Source) Name() string {
 // Wraps sql.DB.QueryRow
 func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -132,7 +131,7 @@ func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 // Wraps sql.DB.Query
 func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -154,7 +153,7 @@ func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 // Wraps sql.DB.Exec
 func (self *Source) doExec(terms ...interface{}) (sql.Result, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -209,11 +208,11 @@ func (self *Source) Open() error {
 	}
 
 	if self.config.Database == "" {
-		return fmt.Errorf("Database name is required.")
+		return db.ErrMissingDatabaseName
 	}
 
 	if self.config.Socket != "" && self.config.Host != "" {
-		return errors.New("Socket or Host are mutually exclusive.")
+		return db.ErrSockerOrHost
 	}
 
 	var conn string
@@ -227,7 +226,7 @@ func (self *Source) Open() error {
 	self.session, err = sql.Open("postgres", conn)
 
 	if err != nil {
-		return fmt.Errorf("Could not connect to %s: %s", self.config.Host, err.Error())
+		return err
 	}
 
 	return nil
@@ -307,7 +306,7 @@ func (self *Source) Collection(name string) (db.Collection, error) {
 
 	// Table exists?
 	if table.Exists() == false {
-		return table, fmt.Errorf("Table %s does not exists.", name)
+		return table, db.ErrCollectionDoesNotExists
 	}
 
 	// Fetching table datatypes and mapping to internal gotypes.
diff --git a/sqlite/collection.go b/sqlite/collection.go
index d786d67c38494fff1b4e1ba7297e1b1bdd0dacf0..62919712aa1ad059f1d60f9be0b775831470a5e2 100644
--- a/sqlite/collection.go
+++ b/sqlite/collection.go
@@ -24,7 +24,6 @@
 package sqlite
 
 import (
-	"errors"
 	"fmt"
 	"menteslibres.net/gosexy/db"
 	"menteslibres.net/gosexy/db/util/sqlutil"
@@ -55,7 +54,7 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 			if queryChunks.Limit == "" {
 				queryChunks.Limit = fmt.Sprintf("LIMIT %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Limit() parameter.")
+				return nil, db.ErrQueryLimitParam
 			}
 		case db.Sort:
 			if queryChunks.Sort == "" {
@@ -74,13 +73,13 @@ func (self *Table) Query(terms ...interface{}) (db.Result, error) {
 				}
 				queryChunks.Sort = fmt.Sprintf("ORDER BY %s", strings.Join(sortChunks, ", "))
 			} else {
-				return nil, errors.New("A query can accept only one db.Sort{} parameter.")
+				return nil, db.ErrQuerySortParam
 			}
 		case db.Offset:
 			if queryChunks.Offset == "" {
 				queryChunks.Offset = fmt.Sprintf("OFFSET %d", v)
 			} else {
-				return nil, errors.New("A query can accept only one db.Offset() parameter.")
+				return nil, ErrQueryOffsetParam
 			}
 		case db.Fields:
 			queryChunks.Fields = append(queryChunks.Fields, v...)
@@ -265,7 +264,7 @@ func (self *Table) Update(selector interface{}, update interface{}) error {
 	selectorConds, selectorArgs := self.compileConditions(selector)
 
 	if selectorConds == "" {
-		return errors.New("Received no conditions.")
+		return db.ErrMissingConditions
 	}
 
 	fields, values, err := self.FieldValues(update, toInternal)
diff --git a/sqlite/sqlite.go b/sqlite/sqlite.go
index 961023d36305d649a4d0c0b52e1d7690c6a42438..5503507fa8952f56d9e576fec927d5e0501c5b96 100644
--- a/sqlite/sqlite.go
+++ b/sqlite/sqlite.go
@@ -25,7 +25,6 @@ package sqlite
 
 import (
 	"database/sql"
-	"errors"
 	"fmt"
 	_ "github.com/xiam/gosqlite3"
 	"menteslibres.net/gosexy/db"
@@ -115,7 +114,7 @@ func (self *Source) Name() string {
 func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 
 	if self.session == nil {
-		return nil, errors.New("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -135,7 +134,7 @@ func (self *Source) doQueryRow(terms ...interface{}) (*sql.Row, error) {
 */
 func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -155,7 +154,7 @@ func (self *Source) doQuery(terms ...interface{}) (*sql.Rows, error) {
 */
 func (self *Source) doExec(terms ...interface{}) (sql.Result, error) {
 	if self.session == nil {
-		return nil, fmt.Errorf("You're currently not connected.")
+		return nil, db.ErrNotConnected
 	}
 
 	chunks := sqlCompile(terms)
@@ -193,13 +192,13 @@ func (self *Source) Open() error {
 	var err error
 
 	if self.config.Database == "" {
-		return fmt.Errorf("Missing database path.")
+		return db.ErrMissingDatabaseName
 	}
 
 	self.session, err = sql.Open("sqlite3", self.config.Database)
 
 	if err != nil {
-		return fmt.Errorf("Could not open %s: %s", self.config.Database, err.Error())
+		return err
 	}
 
 	return nil
@@ -282,7 +281,7 @@ func (self *Source) Collection(name string) (db.Collection, error) {
 
 	// Table exists?
 	if table.Exists() == false {
-		return table, fmt.Errorf("Table %s does not exists.", name)
+		return table, db.ErrCollectionDoesNotExists
 	}
 
 	// Fetching table datatypes and mapping to internal gotypes.
diff --git a/util/main.go b/util/main.go
index 276754b2beff11fd4c900cba8525ec661c596640..a815dc158e40ef6e5ad3d2504d92875669335e13 100644
--- a/util/main.go
+++ b/util/main.go
@@ -24,7 +24,6 @@
 package util
 
 import (
-	"errors"
 	"fmt"
 	"menteslibres.net/gosexy/db"
 	"menteslibres.net/gosexy/to"
@@ -34,12 +33,6 @@ import (
 	"time"
 )
 
-var (
-	ErrExpectingPointer        = errors.New(`Expecting a pointer destination (dst interface{}).`)
-	ErrExpectingSlicePointer   = errors.New(`Expecting a pointer to an slice (dst interface{}).`)
-	ErrExpectingSliceMapStruct = errors.New(`Expecting a pointer to an slice of maps or structs (dst interface{}).`)
-)
-
 var extRelationPattern = regexp.MustCompile(`\{(.+)\}`)
 var columnCompareExclude = regexp.MustCompile(`[^a-zA-Z0-9]`)
 
@@ -158,7 +151,7 @@ func Fetch(dst interface{}, item db.Item) error {
 	dstv := reflect.ValueOf(dst)
 
 	if dstv.Kind() != reflect.Ptr || dstv.IsNil() {
-		return fmt.Errorf("Fetch() expects a pointer.")
+		return db.ErrExpectingPointer
 	}
 
 	el := dstv.Elem().Type()
@@ -179,7 +172,7 @@ func Fetch(dst interface{}, item db.Item) error {
 	case reflect.Map:
 		dstv.Elem().Set(reflect.ValueOf(item))
 	default:
-		return fmt.Errorf("Expecting a pointer to map or struct, got %s.", el.Kind())
+		return db.ErrExpectingMapOrStruct
 	}
 
 	return nil
@@ -311,7 +304,7 @@ func (self *C) FetchRelation(dst interface{}, relations []db.Relation, convertFn
 	dstv := reflect.ValueOf(dst)
 
 	if dstv.Kind() != reflect.Ptr || dstv.IsNil() {
-		return ErrExpectingPointer
+		return db.ErrExpectingPointer
 	}
 
 	err = fetchItemRelations(dstv.Elem(), relations, convertFn)
@@ -357,18 +350,18 @@ func ValidateSliceDestination(dst interface{}) error {
 	dstv = reflect.ValueOf(dst)
 
 	if dstv.IsNil() || dstv.Kind() != reflect.Ptr {
-		return ErrExpectingPointer
+		return db.ErrExpectingPointer
 	}
 
 	if dstv.Elem().Kind() != reflect.Slice {
-		return ErrExpectingSlicePointer
+		return db.ErrExpectingSlicePointer
 	}
 
 	itemv = dstv.Elem()
 	itemk = itemv.Type().Elem().Kind()
 
 	if itemk != reflect.Struct && itemk != reflect.Map {
-		return ErrExpectingSliceMapStruct
+		return db.ErrExpectingSliceMapStruct
 	}
 
 	return nil
diff --git a/util/sqlutil/main.go b/util/sqlutil/main.go
index 3643c05cd5f8b25cc4cdbc2ea7d5f0a5c8761946..cd05fedde332bcc2211ed99b7374befd7c564542 100644
--- a/util/sqlutil/main.go
+++ b/util/sqlutil/main.go
@@ -25,8 +25,6 @@ package sqlutil
 
 import (
 	"database/sql"
-	"errors"
-	"fmt"
 	"menteslibres.net/gosexy/db"
 	"menteslibres.net/gosexy/db/util"
 	"menteslibres.net/gosexy/to"
@@ -34,10 +32,6 @@ import (
 	"strings"
 )
 
-var (
-	ErrNoMoreRows = errors.New(`There are no more rows in this result set.`)
-)
-
 type T struct {
 	PrimaryKey  string
 	ColumnTypes map[string]reflect.Kind
@@ -86,7 +80,7 @@ func (self *T) fetchResult(itemt reflect.Type, rows *sql.Rows, columns []string)
 	case reflect.Struct:
 		item = reflect.New(itemt)
 	default:
-		return item, fmt.Errorf("Don't know how to deal with %s, use either map or struct.", itemt.Kind())
+		return item, db.ErrExpectingMapOrStruct
 	}
 
 	err = rows.Scan(scanArgs...)
@@ -179,7 +173,7 @@ func (self *T) FetchRow(dst interface{}, rows *sql.Rows) error {
 	dstv := reflect.ValueOf(dst)
 
 	if dstv.IsNil() || dstv.Kind() != reflect.Ptr {
-		return util.ErrExpectingPointer
+		return db.ErrExpectingPointer
 	}
 
 	itemv := dstv.Elem()
@@ -193,7 +187,7 @@ func (self *T) FetchRow(dst interface{}, rows *sql.Rows) error {
 	next := rows.Next()
 
 	if next == false {
-		return ErrNoMoreRows
+		return db.ErrNoMoreRows
 	}
 
 	item, err := self.fetchResult(itemv.Type(), rows, columns)
@@ -216,15 +210,15 @@ func (self *T) FetchRows(dst interface{}, rows *sql.Rows) error {
 	dstv := reflect.ValueOf(dst)
 
 	if dstv.IsNil() || dstv.Kind() != reflect.Ptr {
-		return util.ErrExpectingPointer
+		return db.ErrExpectingPointer
 	}
 
 	if dstv.Elem().Kind() != reflect.Slice {
-		return util.ErrExpectingSlicePointer
+		return db.ErrExpectingSlicePointer
 	}
 
 	if dstv.Kind() != reflect.Ptr || dstv.Elem().Kind() != reflect.Slice || dstv.IsNil() {
-		return util.ErrExpectingSliceMapStruct
+		return db.ErrExpectingSliceMapStruct
 	}
 
 	columns, err := getRowColumns(rows)
@@ -323,7 +317,7 @@ func (self *T) FieldValues(item interface{}, convertFn func(interface{}) string)
 		}
 
 	default:
-		return nil, nil, fmt.Errorf("Expecting Struct or Map, received %v.", itemt.Kind())
+		return nil, nil, db.ErrExpectingMapOrStruct
 	}
 
 	return fields, values, nil