diff --git a/.gitignore b/.gitignore
index a7dc0b1..8f7858d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,3 @@ sqlboiler.toml
 models/
 testschema.sql
 .cover
-/.idea
diff --git a/README.md b/README.md
index 51b5fbe..194fdd8 100644
--- a/README.md
+++ b/README.md
@@ -956,16 +956,15 @@ it with the `AddModelHook` method. Here is an example of a before insert hook:
 
 ```go
 // Define my hook function
-func myHook(exec boil.Executor, p *Pilot) error {
+func myHook(exec boil.Executor, p *Pilot) {
   // Do stuff
-  return nil
 }
 
 // Register my before insert hook for pilots
 models.AddPilotHook(boil.BeforeInsertHook, myHook)
 ```
 
-Your `ModelHook` will always be defined as `func(boil.Executor, *Model) error`
+Your `ModelHook` will always be defined as `func(boil.Executor, *Model)`
 
 ### Transactions
 
diff --git a/bdb/column.go b/bdb/column.go
index da56e48..a3632fc 100644
--- a/bdb/column.go
+++ b/bdb/column.go
@@ -3,7 +3,7 @@ package bdb
 import (
 	"strings"
 
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // Column holds information about a database column.
diff --git a/bdb/drivers/mock.go b/bdb/drivers/mock.go
index d8a5aa0..1c91d0e 100644
--- a/bdb/drivers/mock.go
+++ b/bdb/drivers/mock.go
@@ -1,8 +1,8 @@
 package drivers
 
 import (
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // MockDriver is a mock implementation of the bdb driver Interface
@@ -58,14 +58,6 @@ func (m *MockDriver) Columns(schema, tableName string) ([]bdb.Column, error) {
 	}[tableName], nil
 }
 
-func (m *MockDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) {
-	return []bdb.UniqueKey{}, nil
-}
-
-func (m *MockDriver) AutoincrementInfo(schema, tableName string) (string, error) {
-	return "", nil
-}
-
 // ForeignKeyInfo returns a list of mock foreignkeys
 func (m *MockDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) {
 	return map[string][]bdb.ForeignKey{
diff --git a/bdb/drivers/mssql.go b/bdb/drivers/mssql.go
index 79f3010..cb3290a 100644
--- a/bdb/drivers/mssql.go
+++ b/bdb/drivers/mssql.go
@@ -7,8 +7,8 @@ import (
 	"strings"
 
 	_ "github.com/denisenkom/go-mssqldb"
-	"github.com/lbryio/sqlboiler/bdb"
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/bdb"
 )
 
 // MSSQLDriver holds the database connection string and a handle
@@ -241,14 +241,6 @@ func (m *MSSQLDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryKey,
 	return pkey, nil
 }
 
-func (m *MSSQLDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) {
-	return []bdb.UniqueKey{}, errors.New("not implemented")
-}
-
-func (m *MSSQLDriver) AutoincrementInfo(schema, tableName string) (string, error) {
-	return "", errors.New("not implemented")
-}
-
 // ForeignKeyInfo retrieves the foreign keys for a given table name.
 func (m *MSSQLDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) {
 	var fkeys []bdb.ForeignKey
diff --git a/bdb/drivers/mysql.go b/bdb/drivers/mysql.go
index 5523a6b..346e473 100644
--- a/bdb/drivers/mysql.go
+++ b/bdb/drivers/mysql.go
@@ -3,13 +3,12 @@ package drivers
 import (
 	"database/sql"
 	"fmt"
-	"sort"
 	"strconv"
 	"strings"
 
 	"github.com/go-sql-driver/mysql"
-	"github.com/lbryio/sqlboiler/bdb"
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/bdb"
 )
 
 // TinyintAsBool is a global that is set from main.go if a user specifies
@@ -53,7 +52,6 @@ func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode st
 	}
 	config.Addr += ":" + strconv.Itoa(port)
 	config.TLSConfig = sslmode
-	config.AllowNativePasswords = true
 
 	// MySQL is a bad, and by default reads date/datetime into a []byte
 	// instead of a time.Time. Tell it to stop being a bad.
@@ -234,79 +232,6 @@ func (m *MySQLDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryKey,
 	return pkey, nil
 }
 
-// UniqueKeyInfo retrieves the unique keys for a given table name.
-func (m *MySQLDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) {
-	var ukeys []bdb.UniqueKey
-
-	query := `
-	select tc.table_name, tc.constraint_name, GROUP_CONCAT(kcu.column_name)
-	from information_schema.table_constraints tc
-	left join information_schema.key_column_usage kcu on tc.constraint_name = kcu.constraint_name and tc.table_name = kcu.table_name and tc.table_schema = kcu.table_schema
-	where tc.table_schema = ? and tc.table_name = ? and tc.constraint_type = "UNIQUE"
-	group by tc.table_name, tc.constraint_name
-	`
-
-	var rows *sql.Rows
-	var err error
-	if rows, err = m.dbConn.Query(query, schema, tableName); err != nil {
-		return nil, err
-	}
-
-	for rows.Next() {
-		var ukey bdb.UniqueKey
-		var columns string
-
-		//ukey.Table = tableName
-		err = rows.Scan(&ukey.Table, &ukey.Name, &columns)
-		if err != nil {
-			return nil, err
-		}
-
-		ukey.Columns = strings.Split(columns, ",")
-		sort.Strings(ukey.Columns)
-
-		ukeys = append(ukeys, ukey)
-	}
-
-	if err = rows.Err(); err != nil {
-		return nil, err
-	}
-
-	return ukeys, nil
-}
-
-// AutoincrementInfo retrieves the autoincrement column for a given table name, if one exists.
-func (m *MySQLDriver) AutoincrementInfo(schema, tableName string) (string, error) {
-	query := `
-	select column_name
-	from information_schema.columns
-	where table_schema = ? and table_name = ? and extra like "%auto_increment%"
-	`
-
-	var rows *sql.Rows
-	var err error
-	if rows, err = m.dbConn.Query(query, schema, tableName); err != nil {
-		return "", err
-	}
-
-	for rows.Next() {
-		var column string
-
-		err = rows.Scan(&column)
-		if err != nil {
-			return "", err
-		}
-
-		return column, nil
-	}
-
-	if err = rows.Err(); err != nil {
-		return "", err
-	}
-
-	return "", nil
-}
-
 // ForeignKeyInfo retrieves the foreign keys for a given table name.
 func (m *MySQLDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) {
 	var fkeys []bdb.ForeignKey
@@ -381,7 +306,7 @@ func (m *MySQLDriver) TranslateColumnType(c bdb.Column) bdb.Column {
 			if unsigned {
 				c.Type = "null.Uint64"
 			} else {
-				c.Type = "null.Int64"
+				c.Type = "null.Uint64"
 			}
 		case "float":
 			c.Type = "null.Float32"
diff --git a/bdb/drivers/postgres.go b/bdb/drivers/postgres.go
index 9af7edd..34cdd78 100644
--- a/bdb/drivers/postgres.go
+++ b/bdb/drivers/postgres.go
@@ -8,10 +8,10 @@ import (
 
 	// Side-effect import sql driver
 
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/strmangle"
 	_ "github.com/lib/pq"
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // PostgresDriver holds the database connection string and a handle
@@ -266,14 +266,6 @@ func (p *PostgresDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryK
 	return pkey, nil
 }
 
-func (p *PostgresDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) {
-	return []bdb.UniqueKey{}, errors.New("not implemented")
-}
-
-func (p *PostgresDriver) AutoincrementInfo(schema, tableName string) (string, error) {
-	return "", errors.New("not implemented")
-}
-
 // ForeignKeyInfo retrieves the foreign keys for a given table name.
 func (p *PostgresDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) {
 	var fkeys []bdb.ForeignKey
diff --git a/bdb/interface.go b/bdb/interface.go
index 7f4baa5..dfb33bc 100644
--- a/bdb/interface.go
+++ b/bdb/interface.go
@@ -9,8 +9,6 @@ type Interface interface {
 	TableNames(schema string, whitelist, blacklist []string) ([]string, error)
 	Columns(schema, tableName string) ([]Column, error)
 	PrimaryKeyInfo(schema, tableName string) (*PrimaryKey, error)
-	UniqueKeyInfo(schema, tableName string) ([]UniqueKey, error)
-	AutoincrementInfo(schema, tableName string) (string, error)
 	ForeignKeyInfo(schema, tableName string) ([]ForeignKey, error)
 
 	// TranslateColumnType takes a Database column type and returns a go column type.
@@ -65,18 +63,10 @@ func Tables(db Interface, schema string, whitelist, blacklist []string) ([]Table
 			return nil, errors.Wrapf(err, "unable to fetch table pkey info (%s)", name)
 		}
 
-		if t.UKeys, err = db.UniqueKeyInfo(schema, name); err != nil {
-			return nil, errors.Wrapf(err, "unable to fetch table ukey info (%s)", name)
-		}
-
 		if t.FKeys, err = db.ForeignKeyInfo(schema, name); err != nil {
 			return nil, errors.Wrapf(err, "unable to fetch table fkey info (%s)", name)
 		}
 
-		if t.AutoIncrementColumn, err = db.AutoincrementInfo(schema, name); err != nil {
-			return nil, errors.Wrapf(err, "unable to fetch table autoincrement info (%s)", name)
-		}
-
 		setIsJoinTable(&t)
 
 		tables = append(tables, t)
diff --git a/bdb/interface_test.go b/bdb/interface_test.go
index e5d28fb..4d429c6 100644
--- a/bdb/interface_test.go
+++ b/bdb/interface_test.go
@@ -3,7 +3,7 @@ package bdb
 import (
 	"testing"
 
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 type testMockDriver struct{}
diff --git a/bdb/keys.go b/bdb/keys.go
index 8007843..909ada2 100644
--- a/bdb/keys.go
+++ b/bdb/keys.go
@@ -8,13 +8,6 @@ type PrimaryKey struct {
 	Columns []string
 }
 
-// UniqueKey represents a unique key constraint in a database
-type UniqueKey struct {
-	Table   string
-	Name    string
-	Columns []string
-}
-
 // ForeignKey represents a foreign key constraint in a database
 type ForeignKey struct {
 	Table    string
diff --git a/bdb/table.go b/bdb/table.go
index 13355aa..62dcd32 100644
--- a/bdb/table.go
+++ b/bdb/table.go
@@ -8,12 +8,9 @@ type Table struct {
 	// For dbs with real schemas, like Postgres.
 	// Example value: "schema_name"."table_name"
 	SchemaName string
-
-	Columns             []Column
-	AutoIncrementColumn string
+	Columns    []Column
 
 	PKey  *PrimaryKey
-	UKeys []UniqueKey
 	FKeys []ForeignKey
 
 	IsJoinTable bool
diff --git a/boil/db.go b/boil/db.go
index f3153bc..84bc7d3 100644
--- a/boil/db.go
+++ b/boil/db.go
@@ -19,10 +19,6 @@ type Transactor interface {
 
 // Beginner begins transactions.
 type Beginner interface {
-	Begin() (Transactor, error)
-}
-
-type SQLBeginner interface {
 	Begin() (*sql.Tx, error)
 }
 
@@ -30,11 +26,7 @@ type SQLBeginner interface {
 func Begin() (Transactor, error) {
 	creator, ok := currentDB.(Beginner)
 	if !ok {
-		creator2, ok2 := currentDB.(SQLBeginner)
-		if !ok2 {
-			panic("database does not support transactions")
-		}
-		return creator2.Begin()
+		panic("database does not support transactions")
 	}
 
 	return creator.Begin()
diff --git a/boil/errors.go b/boil/errors.go
new file mode 100644
index 0000000..4d02169
--- /dev/null
+++ b/boil/errors.go
@@ -0,0 +1,23 @@
+package boil
+
+type boilErr struct {
+	error
+}
+
+// WrapErr wraps err in a boilErr
+func WrapErr(err error) error {
+	return boilErr{
+		error: err,
+	}
+}
+
+// Error returns the underlying error string
+func (e boilErr) Error() string {
+	return e.error.Error()
+}
+
+// IsBoilErr checks if err is a boilErr
+func IsBoilErr(err error) bool {
+	_, ok := err.(boilErr)
+	return ok
+}
diff --git a/boil/errors_test.go b/boil/errors_test.go
new file mode 100644
index 0000000..2b2f1a0
--- /dev/null
+++ b/boil/errors_test.go
@@ -0,0 +1,24 @@
+package boil
+
+import (
+	"errors"
+	"testing"
+)
+
+func TestErrors(t *testing.T) {
+	t.Parallel()
+
+	err := errors.New("test error")
+	if IsBoilErr(err) == true {
+		t.Errorf("Expected false")
+	}
+
+	err = WrapErr(errors.New("test error"))
+	if err.Error() != "test error" {
+		t.Errorf(`Expected "test error", got %v`, err.Error())
+	}
+
+	if IsBoilErr(err) != true {
+		t.Errorf("Expected true")
+	}
+}
diff --git a/boilingcore/boilingcore.go b/boilingcore/boilingcore.go
index e667cae..5e00687 100644
--- a/boilingcore/boilingcore.go
+++ b/boilingcore/boilingcore.go
@@ -13,10 +13,10 @@ import (
 	"text/template"
 
 	"github.com/pkg/errors"
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/bdb/drivers"
-	"github.com/lbryio/sqlboiler/queries"
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/bdb/drivers"
+	"github.com/vattle/sqlboiler/queries"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 const (
@@ -267,7 +267,7 @@ func (s *State) processReplacements() error {
 	return nil
 }
 
-var basePackage = "github.com/lbryio/sqlboiler"
+var basePackage = "github.com/vattle/sqlboiler"
 
 func getBasePath(baseDirConfig string) (string, error) {
 	if len(baseDirConfig) > 0 {
diff --git a/boilingcore/imports.go b/boilingcore/imports.go
index e20480b..eafcf28 100644
--- a/boilingcore/imports.go
+++ b/boilingcore/imports.go
@@ -6,7 +6,7 @@ import (
 	"sort"
 	"strings"
 
-	"github.com/lbryio/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/bdb"
 )
 
 // imports defines the optional standard imports and
@@ -170,33 +170,26 @@ func newImporter() importer {
 			`"time"`,
 		},
 		thirdParty: importList{
-			`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-			`"github.com/lbryio/lbry.go/v2/extras/null"`,
-			`"github.com/lbryio/sqlboiler/boil"`,
-			`"github.com/lbryio/sqlboiler/queries"`,
-			`"github.com/lbryio/sqlboiler/queries/qm"`,
-			`"github.com/lbryio/sqlboiler/strmangle"`,
+			`"github.com/pkg/errors"`,
+			`"github.com/vattle/sqlboiler/boil"`,
+			`"github.com/vattle/sqlboiler/queries"`,
+			`"github.com/vattle/sqlboiler/queries/qm"`,
+			`"github.com/vattle/sqlboiler/strmangle"`,
 		},
 	}
 
 	imp.Singleton = mapImports{
-		"boil_queries": imports{
-			standard: importList{
-				`"fmt"`,
-				`"strings"`,
-			},
+		"boil_queries": {
 			thirdParty: importList{
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/boil"`,
-				`"github.com/lbryio/sqlboiler/queries"`,
-				`"github.com/lbryio/sqlboiler/queries/qm"`,
-				`"github.com/lbryio/sqlboiler/strmangle"`,
+				`"github.com/vattle/sqlboiler/boil"`,
+				`"github.com/vattle/sqlboiler/queries"`,
+				`"github.com/vattle/sqlboiler/queries/qm"`,
 			},
 		},
 		"boil_types": {
 			thirdParty: importList{
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/strmangle"`,
+				`"github.com/pkg/errors"`,
+				`"github.com/vattle/sqlboiler/strmangle"`,
 			},
 		},
 	}
@@ -208,9 +201,9 @@ func newImporter() importer {
 			`"testing"`,
 		},
 		thirdParty: importList{
-			`"github.com/lbryio/sqlboiler/boil"`,
-			`"github.com/lbryio/sqlboiler/randomize"`,
-			`"github.com/lbryio/sqlboiler/strmangle"`,
+			`"github.com/vattle/sqlboiler/boil"`,
+			`"github.com/vattle/sqlboiler/randomize"`,
+			`"github.com/vattle/sqlboiler/strmangle"`,
 		},
 	}
 
@@ -228,9 +221,9 @@ func newImporter() importer {
 			},
 			thirdParty: importList{
 				`"github.com/kat-co/vala"`,
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/boil"`,
+				`"github.com/pkg/errors"`,
 				`"github.com/spf13/viper"`,
+				`"github.com/vattle/sqlboiler/boil"`,
 			},
 		},
 		"boil_queries_test": {
@@ -243,7 +236,7 @@ func newImporter() importer {
 				`"regexp"`,
 			},
 			thirdParty: importList{
-				`"github.com/lbryio/sqlboiler/boil"`,
+				`"github.com/vattle/sqlboiler/boil"`,
 			},
 		},
 		"boil_suites_test": {
@@ -266,11 +259,11 @@ func newImporter() importer {
 				`"strings"`,
 			},
 			thirdParty: importList{
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/bdb/drivers"`,
-				`"github.com/lbryio/sqlboiler/randomize"`,
-				`_ "github.com/lib/pq"`,
+				`"github.com/pkg/errors"`,
 				`"github.com/spf13/viper"`,
+				`"github.com/vattle/sqlboiler/bdb/drivers"`,
+				`"github.com/vattle/sqlboiler/randomize"`,
+				`_ "github.com/lib/pq"`,
 			},
 		},
 		"mysql": {
@@ -285,11 +278,11 @@ func newImporter() importer {
 				`"strings"`,
 			},
 			thirdParty: importList{
-				`_ "github.com/go-sql-driver/mysql"`,
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/bdb/drivers"`,
-				`"github.com/lbryio/sqlboiler/randomize"`,
+				`"github.com/pkg/errors"`,
 				`"github.com/spf13/viper"`,
+				`"github.com/vattle/sqlboiler/bdb/drivers"`,
+				`"github.com/vattle/sqlboiler/randomize"`,
+				`_ "github.com/go-sql-driver/mysql"`,
 			},
 		},
 		"mssql": {
@@ -302,11 +295,11 @@ func newImporter() importer {
 				`"strings"`,
 			},
 			thirdParty: importList{
-				`_ "github.com/denisenkom/go-mssqldb"`,
-				`"github.com/lbryio/lbry.go/v2/extras/errors"`,
-				`"github.com/lbryio/sqlboiler/bdb/drivers"`,
-				`"github.com/lbryio/sqlboiler/randomize"`,
+				`"github.com/pkg/errors"`,
 				`"github.com/spf13/viper"`,
+				`"github.com/vattle/sqlboiler/bdb/drivers"`,
+				`"github.com/vattle/sqlboiler/randomize"`,
+				`_ "github.com/denisenkom/go-mssqldb"`,
 			},
 		},
 	}
@@ -316,79 +309,79 @@ func newImporter() importer {
 	// TranslateColumnType to see the type assignments.
 	imp.BasedOnType = mapImports{
 		"null.Float32": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Float64": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Int": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Int8": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Int16": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Int32": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Int64": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Uint": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Uint8": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Uint16": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Uint32": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Uint64": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.String": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Bool": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Time": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.JSON": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"null.Bytes": {
-			thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`},
+			thirdParty: importList{`"gopkg.in/nullbio/null.v6"`},
 		},
 		"time.Time": {
 			standard: importList{`"time"`},
 		},
 		"types.JSON": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.BytesArray": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.Int64Array": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.Float64Array": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.BoolArray": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.StringArray": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 		"types.Hstore": {
-			thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`},
+			thirdParty: importList{`"github.com/vattle/sqlboiler/types"`},
 		},
 	}
 
diff --git a/boilingcore/imports_test.go b/boilingcore/imports_test.go
index d0043c0..6f2cde4 100644
--- a/boilingcore/imports_test.go
+++ b/boilingcore/imports_test.go
@@ -6,7 +6,7 @@ import (
 	"testing"
 
 	"github.com/pkg/errors"
-	"github.com/lbryio/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/bdb"
 )
 
 func TestImportsSort(t *testing.T) {
@@ -234,7 +234,7 @@ func TestCombineTypeImports(t *testing.T) {
 			`"fmt"`,
 		},
 		thirdParty: importList{
-			`"github.com/lbryio/sqlboiler/boil"`,
+			`"github.com/vattle/sqlboiler/boil"`,
 		},
 	}
 
@@ -245,8 +245,8 @@ func TestCombineTypeImports(t *testing.T) {
 			`"time"`,
 		},
 		thirdParty: importList{
-			`"github.com/lbryio/sqlboiler/boil"`,
-			`"github.com/lbryio/lbry.go/v2/extras/null"`,
+			`"github.com/vattle/sqlboiler/boil"`,
+			`"gopkg.in/nullbio/null.v6"`,
 		},
 	}
 
@@ -280,8 +280,8 @@ func TestCombineTypeImports(t *testing.T) {
 			`"time"`,
 		},
 		thirdParty: importList{
-			`"github.com/lbryio/sqlboiler/boil"`,
-			`"github.com/lbryio/lbry.go/v2/extras/null"`,
+			`"github.com/vattle/sqlboiler/boil"`,
+			`"gopkg.in/nullbio/null.v6"`,
 		},
 	}
 
@@ -297,11 +297,11 @@ func TestCombineImports(t *testing.T) {
 
 	a := imports{
 		standard:   importList{"fmt"},
-		thirdParty: importList{"github.com/lbryio/sqlboiler", "github.com/lbryio/lbry.go/v2/extras/null"},
+		thirdParty: importList{"github.com/vattle/sqlboiler", "gopkg.in/nullbio/null.v6"},
 	}
 	b := imports{
 		standard:   importList{"os"},
-		thirdParty: importList{"github.com/lbryio/sqlboiler"},
+		thirdParty: importList{"github.com/vattle/sqlboiler"},
 	}
 
 	c := combineImports(a, b)
@@ -309,8 +309,8 @@ func TestCombineImports(t *testing.T) {
 	if c.standard[0] != "fmt" && c.standard[1] != "os" {
 		t.Errorf("Wanted: fmt, os got: %#v", c.standard)
 	}
-	if c.thirdParty[0] != "github.com/lbryio/sqlboiler" && c.thirdParty[1] != "github.com/lbryio/lbry.go/v2/extras/null" {
-		t.Errorf("Wanted: github.com/lbryio/sqlboiler, github.com/lbryio/lbry.go/v2/extras/null got: %#v", c.thirdParty)
+	if c.thirdParty[0] != "github.com/vattle/sqlboiler" && c.thirdParty[1] != "gopkg.in/nullbio/null.v6" {
+		t.Errorf("Wanted: github.com/vattle/sqlboiler, gopkg.in/nullbio/null.v6 got: %#v", c.thirdParty)
 	}
 }
 
diff --git a/boilingcore/output.go b/boilingcore/output.go
index 5c65634..64f28b5 100644
--- a/boilingcore/output.go
+++ b/boilingcore/output.go
@@ -14,7 +14,7 @@ import (
 	"github.com/pkg/errors"
 )
 
-var noEditDisclaimer = []byte(`// This file is generated by SQLBoiler (https://github.com/lbryio/sqlboiler)
+var noEditDisclaimer = []byte(`// This file is generated by SQLBoiler (https://github.com/vattle/sqlboiler)
 // and is meant to be re-generated in place and/or deleted at any time.
 // DO NOT EDIT
 
diff --git a/boilingcore/templates.go b/boilingcore/templates.go
index 86c78ce..9c60739 100644
--- a/boilingcore/templates.go
+++ b/boilingcore/templates.go
@@ -8,10 +8,10 @@ import (
 	"strings"
 	"text/template"
 
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/queries"
-	"github.com/lbryio/sqlboiler/strmangle"
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/queries"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // templateData for sqlboiler templates
diff --git a/boilingcore/text_helpers.go b/boilingcore/text_helpers.go
index 0bce73f..e9577a7 100644
--- a/boilingcore/text_helpers.go
+++ b/boilingcore/text_helpers.go
@@ -4,8 +4,8 @@ import (
 	"fmt"
 	"strings"
 
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // TxtToOne contains text that will be used by templates for a one-to-many or
diff --git a/boilingcore/text_helpers_test.go b/boilingcore/text_helpers_test.go
index 835ed0d..8beed50 100644
--- a/boilingcore/text_helpers_test.go
+++ b/boilingcore/text_helpers_test.go
@@ -5,8 +5,8 @@ import (
 	"testing"
 
 	"github.com/davecgh/go-spew/spew"
-	"github.com/lbryio/sqlboiler/bdb"
-	"github.com/lbryio/sqlboiler/bdb/drivers"
+	"github.com/vattle/sqlboiler/bdb"
+	"github.com/vattle/sqlboiler/bdb/drivers"
 )
 
 func TestTxtsFromOne(t *testing.T) {
diff --git a/main.go b/main.go
index 8344e57..793055d 100644
--- a/main.go
+++ b/main.go
@@ -8,13 +8,13 @@ import (
 	"strings"
 
 	"github.com/kat-co/vala"
-	"github.com/lbryio/sqlboiler/bdb/drivers"
-	"github.com/lbryio/sqlboiler/boilingcore"
 	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
+	"github.com/vattle/sqlboiler/bdb/drivers"
+	"github.com/vattle/sqlboiler/boilingcore"
 )
 
-const sqlBoilerVersion = "2.4.0+lbry"
+const sqlBoilerVersion = "2.3.0"
 
 var (
 	cmdState  *boilingcore.State
@@ -62,7 +62,7 @@ func main() {
 		Use:   "sqlboiler [flags] <driver>",
 		Short: "SQL Boiler generates an ORM tailored to your database schema.",
 		Long: "SQL Boiler generates a Go ORM from template files, tailored to your database schema.\n" +
-			`Complete documentation is available at http://github.com/lbryio/sqlboiler`,
+			`Complete documentation is available at http://github.com/vattle/sqlboiler`,
 		Example:       `sqlboiler postgres`,
 		PreRunE:       preRun,
 		RunE:          run,
diff --git a/queries/eager_load.go b/queries/eager_load.go
index 8992290..18abcc8 100644
--- a/queries/eager_load.go
+++ b/queries/eager_load.go
@@ -5,9 +5,9 @@ import (
 	"reflect"
 	"strings"
 
-	"github.com/lbryio/sqlboiler/boil"
-	"github.com/lbryio/sqlboiler/strmangle"
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/boil"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 type loadRelationshipState struct {
@@ -206,16 +206,9 @@ func (l loadRelationshipState) loadRelationshipsRecurse(depth int, obj reflect.V
 	}
 
 	bkind := kindStruct
-	if derefed := reflect.Indirect(loadedObject); derefed.Kind() != reflect.Struct {
+	if reflect.Indirect(loadedObject).Kind() != reflect.Struct {
 		bkind = kindPtrSliceStruct
-
-		// Convert away any helper slice types
-		// elemType is *elem (from []*elem or helperSliceType)
-		// sliceType is *[]*elem
-		elemType := derefed.Type().Elem()
-		sliceType := reflect.PtrTo(reflect.SliceOf(elemType))
-
-		loadedObject = loadedObject.Addr().Convert(sliceType)
+		loadedObject = loadedObject.Addr()
 	}
 	return l.loadRelationships(depth+1, loadedObject.Interface(), bkind)
 }
@@ -248,9 +241,6 @@ func collectLoaded(key string, loadingFrom reflect.Value) (reflect.Value, bindKi
 	if loadedType.Elem().Kind() == reflect.Struct {
 		bkind = kindStruct
 		loadedType = reflect.SliceOf(loadedType)
-	} else {
-		// Ensure that we get rid of all the helper "XSlice" types
-		loadedType = reflect.SliceOf(loadedType.Elem())
 	}
 
 	collection := reflect.MakeSlice(loadedType, 0, 0)
@@ -259,13 +249,9 @@ func collectLoaded(key string, loadingFrom reflect.Value) (reflect.Value, bindKi
 	for {
 		switch bkind {
 		case kindStruct:
-			if !loadedObject.IsNil() {
-				collection = reflect.Append(collection, loadedObject)
-			}
+			collection = reflect.Append(collection, loadedObject)
 		case kindPtrSliceStruct:
-			if !loadedObject.IsNil() {
-				collection = reflect.AppendSlice(collection, loadedObject)
-			}
+			collection = reflect.AppendSlice(collection, loadedObject)
 		}
 
 		i++
diff --git a/queries/eager_load_test.go b/queries/eager_load_test.go
index c7b3cef..dc3f5f1 100644
--- a/queries/eager_load_test.go
+++ b/queries/eager_load_test.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"testing"
 
-	"github.com/lbryio/sqlboiler/boil"
+	"github.com/vattle/sqlboiler/boil"
 )
 
 var testEagerCounters struct {
diff --git a/queries/helpers.go b/queries/helpers.go
index b953a67..59ad8a3 100644
--- a/queries/helpers.go
+++ b/queries/helpers.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"reflect"
 
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 // NonZeroDefaultSet returns the fields included in the
diff --git a/queries/helpers_test.go b/queries/helpers_test.go
index fd093e3..d37fcd9 100644
--- a/queries/helpers_test.go
+++ b/queries/helpers_test.go
@@ -5,7 +5,7 @@ import (
 	"testing"
 	"time"
 
-	null "github.com/lbryio/lbry.go/v2/extras/null"
+	null "gopkg.in/nullbio/null.v6"
 )
 
 type testObj struct {
diff --git a/queries/qm/query_mods.go b/queries/qm/query_mods.go
index 42e881e..81ae3a0 100644
--- a/queries/qm/query_mods.go
+++ b/queries/qm/query_mods.go
@@ -1,6 +1,6 @@
 package qm
 
-import "github.com/lbryio/sqlboiler/queries"
+import "github.com/vattle/sqlboiler/queries"
 
 // QueryMod to modify the query object
 type QueryMod func(q *queries.Query)
@@ -8,9 +8,7 @@ type QueryMod func(q *queries.Query)
 // Apply the query mods to the Query object
 func Apply(q *queries.Query, mods ...QueryMod) {
 	for _, mod := range mods {
-		if mod != nil {
-			mod(q)
-		}
+		mod(q)
 	}
 }
 
@@ -125,12 +123,6 @@ func From(from string) QueryMod {
 	}
 }
 
-func ForceIndex(index string) QueryMod {
-	return func(q *queries.Query) {
-		queries.SetForceIndex(q, index)
-	}
-}
-
 // Limit the number of returned rows
 func Limit(limit int) QueryMod {
 	return func(q *queries.Query) {
diff --git a/queries/query.go b/queries/query.go
index e3a6470..8c2abdb 100644
--- a/queries/query.go
+++ b/queries/query.go
@@ -4,8 +4,7 @@ import (
 	"database/sql"
 	"fmt"
 
-	"github.com/lbryio/lbry.go/v2/extras/errors"
-	"github.com/lbryio/sqlboiler/boil"
+	"github.com/vattle/sqlboiler/boil"
 )
 
 // joinKind is the type of join
@@ -30,7 +29,6 @@ type Query struct {
 	selectCols []string
 	count      bool
 	from       []string
-	forceindex string
 	joins      []join
 	where      []where
 	in         []in
@@ -138,7 +136,7 @@ func (q *Query) Query() (*sql.Rows, error) {
 func (q *Query) ExecP() sql.Result {
 	res, err := q.Exec()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return res
@@ -149,7 +147,7 @@ func (q *Query) ExecP() sql.Result {
 func (q *Query) QueryP() *sql.Rows {
 	rows, err := q.Query()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return rows
@@ -264,11 +262,6 @@ func SetLastWhereAsOr(q *Query) {
 	q.where[len(q.where)-1].orSeparator = true
 }
 
-// SetForceIndex sets the index to be used by the query
-func SetForceIndex(q *Query, index string){
-	q.forceindex = index
-}
-
 // SetLastInAsOr sets the or separator for the tail "IN" in the slice
 func SetLastInAsOr(q *Query) {
 	if len(q.in) == 0 {
diff --git a/queries/query_builders.go b/queries/query_builders.go
index e682877..2188044 100644
--- a/queries/query_builders.go
+++ b/queries/query_builders.go
@@ -7,7 +7,7 @@ import (
 	"sort"
 	"strings"
 
-	"github.com/lbryio/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 var (
@@ -76,13 +76,7 @@ func buildSelectQuery(q *Query) (*bytes.Buffer, []interface{}) {
 		buf.WriteByte(')')
 	}
 
-	if len(q.forceindex) > 0 {
-		fmt.Fprintf(buf, " FROM %s FORCE INDEX (%s)", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", "),q.forceindex)
-
-	}else{
-		fmt.Fprintf(buf, " FROM %s", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", "))
-
-	}
+	fmt.Fprintf(buf, " FROM %s", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", "))
 
 	if len(q.joins) > 0 {
 		argsLen := len(args)
@@ -196,7 +190,7 @@ func buildUpdateQuery(q *Query) (*bytes.Buffer, []interface{}) {
 }
 
 // BuildUpsertQueryMySQL builds a SQL statement string using the upsertData provided.
-func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []string, autoIncrementCol string) string {
+func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []string) string {
 	whitelist = strmangle.IdentQuoteSlice(dia.LQ, dia.RQ, whitelist)
 
 	buf := strmangle.GetBuffer()
@@ -226,11 +220,6 @@ func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []st
 		strmangle.Placeholders(dia.IndexPlaceholders, len(whitelist), 1, 1),
 	)
 
-	// https://stackoverflow.com/questions/778534/mysql-on-duplicate-key-last-insert-id
-	if autoIncrementCol != "" {
-		buf.WriteString(autoIncrementCol + " = LAST_INSERT_ID(" + autoIncrementCol + "), ")
-	}
-
 	for i, v := range update {
 		if i != 0 {
 			buf.WriteByte(',')
diff --git a/queries/reflect.go b/queries/reflect.go
index 39eda23..9c55b33 100644
--- a/queries/reflect.go
+++ b/queries/reflect.go
@@ -7,9 +7,9 @@ import (
 	"strings"
 	"sync"
 
-	"github.com/lbryio/sqlboiler/strmangle"
-
 	"github.com/pkg/errors"
+	"github.com/vattle/sqlboiler/boil"
+	"github.com/vattle/sqlboiler/strmangle"
 )
 
 var (
@@ -41,7 +41,7 @@ const (
 // It panics on error. See boil.Bind() documentation.
 func (q *Query) BindP(obj interface{}) {
 	if err := q.Bind(obj); err != nil {
-		panic(errors.WithStack(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
diff --git a/randomize/randomize.go b/randomize/randomize.go
index 30592bf..59f7eff 100644
--- a/randomize/randomize.go
+++ b/randomize/randomize.go
@@ -14,12 +14,12 @@ import (
 	"sync/atomic"
 	"time"
 
-	null "github.com/lbryio/lbry.go/v2/extras/null"
+	null "gopkg.in/nullbio/null.v6"
 
 	"github.com/pkg/errors"
 	"github.com/satori/go.uuid"
-	"github.com/lbryio/sqlboiler/strmangle"
-	"github.com/lbryio/sqlboiler/types"
+	"github.com/vattle/sqlboiler/strmangle"
+	"github.com/vattle/sqlboiler/types"
 )
 
 var (
diff --git a/randomize/randomize_test.go b/randomize/randomize_test.go
index 71afb55..6f117b7 100644
--- a/randomize/randomize_test.go
+++ b/randomize/randomize_test.go
@@ -5,7 +5,7 @@ import (
 	"testing"
 	"time"
 
-	null "github.com/lbryio/lbry.go/v2/extras/null"
+	null "gopkg.in/nullbio/null.v6"
 )
 
 func TestRandomizeStruct(t *testing.T) {
diff --git a/templates/00_struct.tpl b/templates/00_struct.tpl
index a2608fa..585feee 100644
--- a/templates/00_struct.tpl
+++ b/templates/00_struct.tpl
@@ -17,23 +17,6 @@ type {{$modelName}} struct {
 	{{end -}}
 }
 
-var {{$modelName}}Columns = struct {
-	{{range $column := .Table.Columns -}}
-	{{titleCase $column.Name}} string
-	{{end -}}
-}{
-	{{range $column := .Table.Columns -}}
-	{{titleCase $column.Name}}: "{{$column.Name}}",
-	{{end -}}
-}
-
-// {{$modelName}}Filter allows you to filter on any columns by making them all pointers.
-type {{$modelName}}Filter struct {
-	{{range $column := .Table.Columns -}}
-	{{titleCase $column.Name}} *{{$column.Type}} `{{generateTags $dot.Tags $column.Name}}boil:"{{$column.Name}}" json:"{{$column.Name}},omitempty" toml:"{{$column.Name}}" yaml:"{{$column.Name}},omitempty"`
-	{{end -}}
-}
-
 {{- if .Table.IsJoinTable -}}
 {{- else}}
 // {{$modelNameCamel}}R is where relationships are stored.
diff --git a/templates/01_types.tpl b/templates/01_types.tpl
index 5aac35f..a1a1ef0 100644
--- a/templates/01_types.tpl
+++ b/templates/01_types.tpl
@@ -10,7 +10,6 @@ var (
 	{{$varNameSingular}}ColumnsWithoutDefault = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault false | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
 	{{$varNameSingular}}ColumnsWithDefault    = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault true | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
 	{{$varNameSingular}}PrimaryKeyColumns     = []string{{"{"}}{{.Table.PKey.Columns | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}}
-	{{$varNameSingular}}AutoIncrementColumn   = "{{.Table.AutoIncrementColumn }}"
 )
 
 type (
@@ -22,7 +21,7 @@ type (
 	{{$tableNameSingular}}Hook func(boil.Executor, *{{$tableNameSingular}}) error
 	{{- end}}
 
-	{{$tableNameSingular}}Query struct {
+	{{$varNameSingular}}Query struct {
 		*queries.Query
 	}
 )
diff --git a/templates/02_hooks.tpl b/templates/02_hooks.tpl
index d152978..9815639 100644
--- a/templates/02_hooks.tpl
+++ b/templates/02_hooks.tpl
@@ -16,7 +16,7 @@ var {{$varNameSingular}}AfterUpsertHooks []{{$tableNameSingular}}Hook
 func (o *{{$tableNameSingular}}) doBeforeInsertHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}BeforeInsertHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -27,7 +27,7 @@ func (o *{{$tableNameSingular}}) doBeforeInsertHooks(exec boil.Executor) (err er
 func (o *{{$tableNameSingular}}) doBeforeUpdateHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}BeforeUpdateHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -38,7 +38,7 @@ func (o *{{$tableNameSingular}}) doBeforeUpdateHooks(exec boil.Executor) (err er
 func (o *{{$tableNameSingular}}) doBeforeDeleteHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}BeforeDeleteHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -49,7 +49,7 @@ func (o *{{$tableNameSingular}}) doBeforeDeleteHooks(exec boil.Executor) (err er
 func (o *{{$tableNameSingular}}) doBeforeUpsertHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}BeforeUpsertHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -60,7 +60,7 @@ func (o *{{$tableNameSingular}}) doBeforeUpsertHooks(exec boil.Executor) (err er
 func (o *{{$tableNameSingular}}) doAfterInsertHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}AfterInsertHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -71,7 +71,7 @@ func (o *{{$tableNameSingular}}) doAfterInsertHooks(exec boil.Executor) (err err
 func (o *{{$tableNameSingular}}) doAfterSelectHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}AfterSelectHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -82,7 +82,7 @@ func (o *{{$tableNameSingular}}) doAfterSelectHooks(exec boil.Executor) (err err
 func (o *{{$tableNameSingular}}) doAfterUpdateHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}AfterUpdateHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -93,7 +93,7 @@ func (o *{{$tableNameSingular}}) doAfterUpdateHooks(exec boil.Executor) (err err
 func (o *{{$tableNameSingular}}) doAfterDeleteHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}AfterDeleteHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -104,7 +104,7 @@ func (o *{{$tableNameSingular}}) doAfterDeleteHooks(exec boil.Executor) (err err
 func (o *{{$tableNameSingular}}) doAfterUpsertHooks(exec boil.Executor) (err error) {
 	for _, hook := range {{$varNameSingular}}AfterUpsertHooks {
 		if err := hook(exec, o); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
diff --git a/templates/03_finishers.tpl b/templates/03_finishers.tpl
index 473bddd..0cc7e78 100644
--- a/templates/03_finishers.tpl
+++ b/templates/03_finishers.tpl
@@ -1,27 +1,27 @@
 {{- $tableNameSingular := .Table.Name | singular | titleCase -}}
 {{- $varNameSingular := .Table.Name | singular | camelCase -}}
-// OneP returns a single {{$tableNameSingular}} record from the query, and panics on error.
-func (q {{$tableNameSingular}}Query) OneP() (*{{$tableNameSingular}}) {
+// OneP returns a single {{$varNameSingular}} record from the query, and panics on error.
+func (q {{$varNameSingular}}Query) OneP() (*{{$tableNameSingular}}) {
 	o, err := q.One()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return o
 }
 
-// One returns a single {{$tableNameSingular}} record from the query.
-func (q {{$tableNameSingular}}Query) One() (*{{$tableNameSingular}}, error) {
+// One returns a single {{$varNameSingular}} record from the query.
+func (q {{$varNameSingular}}Query) One() (*{{$tableNameSingular}}, error) {
 	o := &{{$tableNameSingular}}{}
 
 	queries.SetLimit(q.Query, 1)
 
 	err := q.Bind(o)
 	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return nil, nil
+		if errors.Cause(err) == sql.ErrNoRows {
+			return nil, sql.ErrNoRows
 		}
-		return nil, errors.Prefix("{{.PkgName}}: failed to execute a one query for {{.Table.Name}}", err)
+		return nil, errors.Wrap(err, "{{.PkgName}}: failed to execute a one query for {{.Table.Name}}")
 	}
 
 	{{if not .NoHooks -}}
@@ -34,22 +34,22 @@ func (q {{$tableNameSingular}}Query) One() (*{{$tableNameSingular}}, error) {
 }
 
 // AllP returns all {{$tableNameSingular}} records from the query, and panics on error.
-func (q {{$tableNameSingular}}Query) AllP() {{$tableNameSingular}}Slice {
+func (q {{$varNameSingular}}Query) AllP() {{$tableNameSingular}}Slice {
 	o, err := q.All()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return o
 }
 
 // All returns all {{$tableNameSingular}} records from the query.
-func (q {{$tableNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error) {
+func (q {{$varNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error) {
 	var o []*{{$tableNameSingular}}
 
 	err := q.Bind(&o)
 	if err != nil {
-		return nil, errors.Prefix("{{.PkgName}}: failed to assign all query results to {{$tableNameSingular}} slice", err)
+		return nil, errors.Wrap(err, "{{.PkgName}}: failed to assign all query results to {{$tableNameSingular}} slice")
 	}
 
 	{{if not .NoHooks -}}
@@ -66,17 +66,17 @@ func (q {{$tableNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error)
 }
 
 // CountP returns the count of all {{$tableNameSingular}} records in the query, and panics on error.
-func (q {{$tableNameSingular}}Query) CountP() int64 {
+func (q {{$varNameSingular}}Query) CountP() int64 {
 	c, err := q.Count()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return c
 }
 
 // Count returns the count of all {{$tableNameSingular}} records in the query.
-func (q {{$tableNameSingular}}Query) Count() (int64, error) {
+func (q {{$varNameSingular}}Query) Count() (int64, error) {
 	var count int64
 
 	queries.SetSelect(q.Query, nil)
@@ -84,33 +84,32 @@ func (q {{$tableNameSingular}}Query) Count() (int64, error) {
 
 	err := q.Query.QueryRow().Scan(&count)
 	if err != nil {
-		return 0, errors.Prefix("{{.PkgName}}: failed to count {{.Table.Name}} rows", err)
+		return 0, errors.Wrap(err, "{{.PkgName}}: failed to count {{.Table.Name}} rows")
 	}
 
 	return count, nil
 }
 
 // Exists checks if the row exists in the table, and panics on error.
-func (q {{$tableNameSingular}}Query) ExistsP() bool {
+func (q {{$varNameSingular}}Query) ExistsP() bool {
 	e, err := q.Exists()
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return e
 }
 
 // Exists checks if the row exists in the table.
-func (q {{$tableNameSingular}}Query) Exists() (bool, error) {
+func (q {{$varNameSingular}}Query) Exists() (bool, error) {
 	var count int64
 
 	queries.SetCount(q.Query)
-	queries.SetSelect(q.Query, []string{})
 	queries.SetLimit(q.Query, 1)
 
 	err := q.Query.QueryRow().Scan(&count)
 	if err != nil {
-		return false, errors.Prefix("{{.PkgName}}: failed to check if {{.Table.Name}} exists", err)
+		return false, errors.Wrap(err, "{{.PkgName}}: failed to check if {{.Table.Name}} exists")
 	}
 
 	return count > 0, nil
diff --git a/templates/04_relationship_to_one.tpl b/templates/04_relationship_to_one.tpl
index 9bc8c5f..05c75c9 100644
--- a/templates/04_relationship_to_one.tpl
+++ b/templates/04_relationship_to_one.tpl
@@ -3,14 +3,14 @@
 	{{- $dot := . -}}
 	{{- range .Table.FKeys -}}
 		{{- $txt := txtsFromFKey $dot.Tables $dot.Table . -}}
-		{{- $tableNameSingular := .ForeignTable | singular | titleCase}}
+		{{- $varNameSingular := .ForeignTable | singular | camelCase}}
 // {{$txt.Function.Name}}G pointed to by the foreign key.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	return o.{{$txt.Function.Name}}(boil.GetDB(), mods...)
 }
 
 // {{$txt.Function.Name}} pointed to by the foreign key.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$tableNameSingular}}Query) {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$varNameSingular}}Query) {
 	queryMods := []qm.QueryMod{
 		qm.Where("{{$txt.ForeignTable.ColumnName}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
 	}
diff --git a/templates/05_relationship_one_to_one.tpl b/templates/05_relationship_one_to_one.tpl
index 1dcd2ee..e74279c 100644
--- a/templates/05_relationship_one_to_one.tpl
+++ b/templates/05_relationship_one_to_one.tpl
@@ -3,14 +3,14 @@
 	{{- $dot := . -}}
 	{{- range .Table.ToOneRelationships -}}
 		{{- $txt := txtsFromOneToOne $dot.Tables $dot.Table . -}}
-		{{- $tableNameSingular := .ForeignTable | singular | titleCase}}
+		{{- $varNameSingular := .ForeignTable | singular | camelCase}}
 // {{$txt.Function.Name}}G pointed to by the foreign key.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	return o.{{$txt.Function.Name}}(boil.GetDB(), mods...)
 }
 
 // {{$txt.Function.Name}} pointed to by the foreign key.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$tableNameSingular}}Query) {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$varNameSingular}}Query) {
 	queryMods := []qm.QueryMod{
 		qm.Where("{{$txt.ForeignTable.ColumnName}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
 	}
diff --git a/templates/06_relationship_to_many.tpl b/templates/06_relationship_to_many.tpl
index 0e6e634..c108eeb 100644
--- a/templates/06_relationship_to_many.tpl
+++ b/templates/06_relationship_to_many.tpl
@@ -3,20 +3,20 @@
 	{{- $dot := . -}}
 	{{- $table := .Table -}}
 	{{- range .Table.ToManyRelationships -}}
-		{{- $tableNameSingular := .ForeignTable | singular | titleCase -}}
+		{{- $varNameSingular := .ForeignTable | singular | camelCase -}}
 		{{- $txt := txtsFromToMany $dot.Tables $table . -}}
 		{{- $schemaForeignTable := .ForeignTable | $dot.SchemaTable}}
 // {{$txt.Function.Name}}G retrieves all the {{.ForeignTable | singular}}'s {{$txt.ForeignTable.NameHumanReadable}}
 {{- if not (eq $txt.Function.Name $txt.ForeignTable.NamePluralGo)}} via {{.ForeignColumn}} column{{- end}}.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	return o.{{$txt.Function.Name}}(boil.GetDB(), mods...)
 }
 
 // {{$txt.Function.Name}} retrieves all the {{.ForeignTable | singular}}'s {{$txt.ForeignTable.NameHumanReadable}} with an executor
 {{- if not (eq $txt.Function.Name $txt.ForeignTable.NamePluralGo)}} via {{.ForeignColumn}} column{{- end}}.
-func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	queryMods := []qm.QueryMod{
-		qm.Select("{{$schemaForeignTable}}.*"),
+		qm.Select("{{id 0 | $dot.Quotes}}.*"),
 	}
 
 	if len(mods) != 0 {
@@ -25,18 +25,17 @@ func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor,
 
 		{{if .ToJoinTable -}}
 	queryMods = append(queryMods,
-		{{$schemaJoinTable := .JoinTable | $.SchemaTable -}}
-		qm.InnerJoin("{{$schemaJoinTable}} on {{$schemaForeignTable}}.{{.ForeignColumn | $dot.Quotes}} = {{$schemaJoinTable}}.{{.JoinForeignColumn | $dot.Quotes}}"),
-		qm.Where("{{$schemaJoinTable}}.{{.JoinLocalColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
+		qm.InnerJoin("{{.JoinTable | $dot.SchemaTable}} as {{id 1 | $dot.Quotes}} on {{id 0 | $dot.Quotes}}.{{.ForeignColumn | $dot.Quotes}} = {{id 1 | $dot.Quotes}}.{{.JoinForeignColumn | $dot.Quotes}}"),
+		qm.Where("{{id 1 | $dot.Quotes}}.{{.JoinLocalColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
 	)
 		{{else -}}
 	queryMods = append(queryMods,
-		qm.Where("{{$schemaForeignTable}}.{{.ForeignColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
+		qm.Where("{{id 0 | $dot.Quotes}}.{{.ForeignColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}),
 	)
 		{{end}}
 
 	query := {{$txt.ForeignTable.NamePluralGo}}(exec, queryMods...)
-	queries.SetFrom(query.Query, "{{$schemaForeignTable}}")
+	queries.SetFrom(query.Query, "{{$schemaForeignTable}} as {{id 0 | $dot.Quotes}}")
 	return query
 }
 
diff --git a/templates/07_relationship_to_one_eager.tpl b/templates/07_relationship_to_one_eager.tpl
index f6bba5b..dd1481a 100644
--- a/templates/07_relationship_to_one_eager.tpl
+++ b/templates/07_relationship_to_one_eager.tpl
@@ -4,7 +4,7 @@
 	{{- range .Table.FKeys -}}
 		{{- $txt := txtsFromFKey $dot.Tables $dot.Table . -}}
 		{{- $varNameSingular := $dot.Table.Name | singular | camelCase -}}
-		{{- $arg := printf "maybe%s" $txt.LocalTable.NameGo}}
+		{{- $arg := printf "maybe%s" $txt.LocalTable.NameGo -}}
 // Load{{$txt.Function.Name}} allows an eager lookup of values, cached into the
 // loaded structs of the objects.
 func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singular bool, {{$arg}} interface{}) error {
@@ -45,20 +45,20 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 
 	results, err := e.Query(query, args...)
 	if err != nil {
-		return errors.Prefix("failed to eager load {{$txt.ForeignTable.NameGo}}", err)
+		return errors.Wrap(err, "failed to eager load {{$txt.ForeignTable.NameGo}}")
 	}
 	defer results.Close()
 
 	var resultSlice []*{{$txt.ForeignTable.NameGo}}
 	if err = queries.Bind(results, &resultSlice); err != nil {
-		return errors.Prefix("failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}", err)
+		return errors.Wrap(err, "failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}")
 	}
 
 	{{if not $dot.NoHooks -}}
 	if len({{$varNameSingular}}AfterSelectHooks) != 0 {
 		for _, obj := range resultSlice {
 			if err := obj.doAfterSelectHooks(e); err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
diff --git a/templates/08_relationship_one_to_one_eager.tpl b/templates/08_relationship_one_to_one_eager.tpl
index cd587fc..37d1af0 100644
--- a/templates/08_relationship_one_to_one_eager.tpl
+++ b/templates/08_relationship_one_to_one_eager.tpl
@@ -45,20 +45,20 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 
 	results, err := e.Query(query, args...)
 	if err != nil {
-		return errors.Prefix("failed to eager load {{$txt.ForeignTable.NameGo}}", err)
+		return errors.Wrap(err, "failed to eager load {{$txt.ForeignTable.NameGo}}")
 	}
 	defer results.Close()
 
 	var resultSlice []*{{$txt.ForeignTable.NameGo}}
 	if err = queries.Bind(results, &resultSlice); err != nil {
-		return errors.Prefix("failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}", err)
+		return errors.Wrap(err, "failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}")
 	}
 
 	{{if not $dot.NoHooks -}}
 	if len({{$varNameSingular}}AfterSelectHooks) != 0 {
 		for _, obj := range resultSlice {
 			if err := obj.doAfterSelectHooks(e); err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
diff --git a/templates/09_relationship_to_many_eager.tpl b/templates/09_relationship_to_many_eager.tpl
index f3fd2c4..1603188 100644
--- a/templates/09_relationship_to_many_eager.tpl
+++ b/templates/09_relationship_to_many_eager.tpl
@@ -54,7 +54,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 
 	results, err := e.Query(query, args...)
 	if err != nil {
-		return errors.Prefix("failed to eager load {{.ForeignTable}}", err)
+		return errors.Wrap(err, "failed to eager load {{.ForeignTable}}")
 	}
 	defer results.Close()
 
@@ -70,7 +70,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 
 		err = results.Scan({{$foreignTable.Columns | columnNames | stringMap $dot.StringFuncs.titleCase | prefixStringSlice "&one." | join ", "}}, &localJoinCol)
 		if err = results.Err(); err != nil {
-			return errors.Prefix("failed to plebian-bind eager loaded slice {{.ForeignTable}}", err)
+			return errors.Wrap(err, "failed to plebian-bind eager loaded slice {{.ForeignTable}}")
 		}
 
 		resultSlice = append(resultSlice, one)
@@ -78,11 +78,11 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 	}
 
 	if err = results.Err(); err != nil {
-		return errors.Prefix("failed to plebian-bind eager loaded slice {{.ForeignTable}}", err)
+		return errors.Wrap(err, "failed to plebian-bind eager loaded slice {{.ForeignTable}}")
 	}
 	{{else -}}
 	if err = queries.Bind(results, &resultSlice); err != nil {
-		return errors.Prefix("failed to bind eager loaded slice {{.ForeignTable}}", err)
+		return errors.Wrap(err, "failed to bind eager loaded slice {{.ForeignTable}}")
 	}
 	{{end}}
 
@@ -90,7 +90,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
 	if len({{.ForeignTable | singular | camelCase}}AfterSelectHooks) != 0 {
 		for _, obj := range resultSlice {
 			if err := obj.doAfterSelectHooks(e); err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
diff --git a/templates/10_relationship_to_one_setops.tpl b/templates/10_relationship_to_one_setops.tpl
index 200adc3..14f726e 100644
--- a/templates/10_relationship_to_one_setops.tpl
+++ b/templates/10_relationship_to_one_setops.tpl
@@ -20,7 +20,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(exec, insert, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -30,7 +30,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -41,7 +41,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo
 	var err error
 	if insert {
 		if err = related.Insert(exec); err != nil {
-			return errors.Prefix("failed to insert into foreign table", err)
+			return errors.Wrap(err, "failed to insert into foreign table")
 		}
 	}
 
@@ -58,7 +58,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo
 	}
 
 	if _, err = exec.Exec(updateQuery, values...); err != nil {
-		return errors.Prefix("failed to update local table", err)
+		return errors.Wrap(err, "failed to update local table")
 	}
 
 	o.{{$txt.Function.LocalAssignment}} = related.{{$txt.Function.ForeignAssignment}}
@@ -110,7 +110,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related *{{$t
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(exec, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -120,7 +120,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -133,7 +133,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec
 	o.{{$txt.LocalTable.ColumnNameGo}}.Valid = false
 	if err = o.Update(exec, "{{.Column}}"); err != nil {
 		o.{{$txt.LocalTable.ColumnNameGo}}.Valid = true
-		return errors.Prefix("failed to update local table", err)
+		return errors.Wrap(err, "failed to update local table")
 	}
 
 	o.R.{{$txt.Function.Name}} = nil
diff --git a/templates/11_relationship_one_to_one_setops.tpl b/templates/11_relationship_one_to_one_setops.tpl
index 29ce0a1..826eec2 100644
--- a/templates/11_relationship_one_to_one_setops.tpl
+++ b/templates/11_relationship_one_to_one_setops.tpl
@@ -21,7 +21,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(exec, insert, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -31,7 +31,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -48,7 +48,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo
 		{{- end}}
 
 		if err = related.Insert(exec); err != nil {
-			return errors.Prefix("failed to insert into foreign table", err)
+			return errors.Wrap(err, "failed to insert into foreign table")
 		}
 	} else {
 		updateQuery := fmt.Sprintf(
@@ -64,7 +64,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo
 		}
 
 		if _, err = exec.Exec(updateQuery, values...); err != nil {
-			return errors.Prefix("failed to update foreign table", err)
+			return errors.Wrap(err, "failed to update foreign table")
 		}
 
 		related.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}}
@@ -107,7 +107,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related *{{$t
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(exec, related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -117,7 +117,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related *{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -130,7 +130,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec
 	related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = false
 	if err = related.Update(exec, "{{.ForeignColumn}}"); err != nil {
 		related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = true
-		return errors.Prefix("failed to update local table", err)
+		return errors.Wrap(err, "failed to update local table")
 	}
 
 	o.R.{{$txt.Function.Name}} = nil
diff --git a/templates/12_relationship_to_many_setops.tpl b/templates/12_relationship_to_many_setops.tpl
index e54c2fd..06159ee 100644
--- a/templates/12_relationship_to_many_setops.tpl
+++ b/templates/12_relationship_to_many_setops.tpl
@@ -24,7 +24,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}G(insert bool, rel
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Add{{$txt.Function.Name}}(exec, insert, related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -35,7 +35,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}P(exec boil.Execut
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}GP(insert bool, related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Add{{$txt.Function.Name}}(boil.GetDB(), insert, related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -55,7 +55,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo
 			{{end -}}
 
 			if err = rel.Insert(exec); err != nil {
-				return errors.Prefix("failed to insert into foreign table", err)
+				return errors.Wrap(err, "failed to insert into foreign table")
 			}
 		}{{if not .ToJoinTable}} else {
 			updateQuery := fmt.Sprintf(
@@ -71,7 +71,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo
 			}
 
 			if _, err = exec.Exec(updateQuery, values...); err != nil {
-				return errors.Prefix("failed to update foreign table", err)
+				return errors.Wrap(err, "failed to update foreign table")
 			}
 
 			rel.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}}
@@ -93,7 +93,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo
 
 		_, err = exec.Exec(query, values...)
 		if err != nil {
-			return errors.Prefix("failed to insert into join table", err)
+			return errors.Wrap(err, "failed to insert into join table")
 		}
 	}
 	{{end -}}
@@ -152,7 +152,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(exec, insert, related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -165,7 +165,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -190,7 +190,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo
 
 	_, err := exec.Exec(query, values...)
 	if err != nil {
-		return errors.Prefix("failed to remove relationships before set", err)
+		return errors.Wrap(err, "failed to remove relationships before set")
 	}
 
 	{{if .ToJoinTable -}}
@@ -230,7 +230,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related ...*{
 // Panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(exec, related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -240,7 +240,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe
 // Uses the global database handle and panics on error.
 func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related ...*{{$txt.ForeignTable.NameGo}}) {
 	if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -266,7 +266,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec
 
 	_, err = exec.Exec(query, values...)
 	if err != nil {
-		return errors.Prefix("failed to remove relationships before set", err)
+		return errors.Wrap(err, "failed to remove relationships before set")
 	}
 	{{else -}}
 	for _, rel := range related {
@@ -277,7 +277,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec
 		}
 		{{end -}}
 		if err = rel.Update(exec, "{{.ForeignColumn}}"); err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 	{{end -}}
diff --git a/templates/13_all.tpl b/templates/13_all.tpl
index c41f19c..42cf66a 100644
--- a/templates/13_all.tpl
+++ b/templates/13_all.tpl
@@ -1,12 +1,12 @@
 {{- $tableNamePlural := .Table.Name | plural | titleCase -}}
-{{- $tableNameSingular := .Table.Name | singular | titleCase}}
+{{- $varNameSingular := .Table.Name | singular | camelCase}}
 // {{$tableNamePlural}}G retrieves all records.
-func {{$tableNamePlural}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func {{$tableNamePlural}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	return {{$tableNamePlural}}(boil.GetDB(), mods...)
 }
 
 // {{$tableNamePlural}} retrieves all the records using an executor.
-func {{$tableNamePlural}}(exec boil.Executor, mods ...qm.QueryMod) {{$tableNameSingular}}Query {
+func {{$tableNamePlural}}(exec boil.Executor, mods ...qm.QueryMod) {{$varNameSingular}}Query {
 	mods = append(mods, qm.From("{{.Table.Name | .SchemaTable}}"))
-	return {{$tableNameSingular}}Query{NewQuery(exec, mods...)}
+	return {{$varNameSingular}}Query{NewQuery(exec, mods...)}
 }
diff --git a/templates/14_find.tpl b/templates/14_find.tpl
index f9a88c8..097f184 100644
--- a/templates/14_find.tpl
+++ b/templates/14_find.tpl
@@ -12,7 +12,7 @@ func Find{{$tableNameSingular}}G({{$pkArgs}}, selectCols ...string) (*{{$tableNa
 func Find{{$tableNameSingular}}GP({{$pkArgs}}, selectCols ...string) *{{$tableNameSingular}} {
 	retobj, err := Find{{$tableNameSingular}}(boil.GetDB(), {{$pkNames | join ", "}}, selectCols...)
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return retobj
@@ -35,10 +35,10 @@ func Find{{$tableNameSingular}}(exec boil.Executor, {{$pkArgs}}, selectCols ...s
 
 	err := q.Bind({{$varNameSingular}}Obj)
 	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return nil, nil
+		if errors.Cause(err) == sql.ErrNoRows {
+			return nil, sql.ErrNoRows
 		}
-		return nil, errors.Prefix("{{.PkgName}}: unable to select from {{.Table.Name}}", err)
+		return nil, errors.Wrap(err, "{{.PkgName}}: unable to select from {{.Table.Name}}")
 	}
 
 	return {{$varNameSingular}}Obj, nil
@@ -48,79 +48,8 @@ func Find{{$tableNameSingular}}(exec boil.Executor, {{$pkArgs}}, selectCols ...s
 func Find{{$tableNameSingular}}P(exec boil.Executor, {{$pkArgs}}, selectCols ...string) *{{$tableNameSingular}} {
 	retobj, err := Find{{$tableNameSingular}}(exec, {{$pkNames | join ", "}}, selectCols...)
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return retobj
 }
-
-// FindOne{{$tableNameSingular}} retrieves a single record using filters.
-func FindOne{{$tableNameSingular}}(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	obj := &{{$tableNameSingular}}{}
-
-	err := {{$tableNameSingular}}NewQuery(exec).
-    Where(filters).
-    Limit(1).
-    Bind(obj)
-
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return nil, nil
-		}
-		return nil, errors.Prefix("{{.PkgName}}: unable to select from {{.Table.Name}}", err)
-	}
-
-	return obj, nil
-}
-
-// FindOne{{$tableNameSingular}}G retrieves a single record using filters.
-func FindOne{{$tableNameSingular}}G(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	return FindOne{{$tableNameSingular}}(boil.GetDB(), filters)
-}
-
-// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes a new record if one is not found.
-func FindOne{{$tableNameSingular}}OrInit(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	{{$varNameSingular}}Obj, err := FindOne{{$tableNameSingular}}(exec, filters)
-	if err != nil {
-		return nil, err
-	}
-
-	if {{$varNameSingular}}Obj == nil {
-		{{$varNameSingular}}Obj = &{{$tableNameSingular}}{}
-		objR := reflect.ValueOf({{$varNameSingular}}Obj).Elem()
-		r := reflect.ValueOf(filters)
-		for i := 0; i < r.NumField(); i++ {
-			f := r.Field(i)
-			if f.Elem().IsValid() {
-				objR.FieldByName(r.Type().Field(i).Name).Set(f.Elem())
-			}
-		}
-	}
-
-	return {{$varNameSingular}}Obj, nil
-}
-
-// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes a new record if one is not found.
-func FindOne{{$tableNameSingular}}OrInitG(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	return FindOne{{$tableNameSingular}}OrInit(boil.GetDB(), filters)
-}
-
-// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes and inserts a new record if one is not found.
-func FindOne{{$tableNameSingular}}OrCreate(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	{{$varNameSingular}}Obj, err := FindOne{{$tableNameSingular}}OrInit(exec, filters)
-	if err != nil {
-		return nil, err
-	}
-	if {{$varNameSingular}}Obj.IsNew() {
-		err := {{$varNameSingular}}Obj.Insert(exec)
-		if err != nil {
-			return nil, err
-		}
-	}
-	return {{$varNameSingular}}Obj, nil
-}
-
-// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes and inserts a new record if one is not found.
-func FindOne{{$tableNameSingular}}OrCreateG(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) {
-	return FindOne{{$tableNameSingular}}OrCreate(boil.GetDB(), filters)
-}
diff --git a/templates/15_insert.tpl b/templates/15_insert.tpl
index 20905ac..870e20d 100644
--- a/templates/15_insert.tpl
+++ b/templates/15_insert.tpl
@@ -10,7 +10,7 @@ func (o *{{$tableNameSingular}}) InsertG(whitelist ... string) error {
 // behavior description.
 func (o *{{$tableNameSingular}}) InsertGP(whitelist ... string) {
 	if err := o.Insert(boil.GetDB(), whitelist...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -18,7 +18,7 @@ func (o *{{$tableNameSingular}}) InsertGP(whitelist ... string) {
 // for whitelist behavior description.
 func (o *{{$tableNameSingular}}) InsertP(exec boil.Executor, whitelist ... string) {
 	if err := o.Insert(exec, whitelist...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -29,7 +29,7 @@ func (o *{{$tableNameSingular}}) InsertP(exec boil.Executor, whitelist ... strin
 // - All columns with a default, but non-zero are included (i.e. health = 75)
 func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string) error {
 	if o == nil {
-		return errors.Err("{{.PkgName}}: no {{.Table.Name}} provided for insertion")
+		return errors.New("{{.PkgName}}: no {{.Table.Name}} provided for insertion")
 	}
 
 	var err error
@@ -37,7 +37,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 
 	{{if not .NoHooks -}}
 	if err := o.doBeforeInsertHooks(exec); err != nil {
-		return errors.Err(err)
+		return err
 	}
 	{{- end}}
 
@@ -59,11 +59,11 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 
 		cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, wl)
 		if err != nil {
-			return errors.Err(err)
+			return err
 		}
 		cache.retMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, returnColumns)
 		if err != nil {
-			return errors.Err(err)
+			return err
 		}
 		if len(wl) != 0 {
 			cache.query = fmt.Sprintf("INSERT INTO {{$schemaTable}} ({{.LQ}}%s{{.RQ}}) %%sVALUES (%s)%%s", strings.Join(wl, "{{.RQ}},{{.LQ}}"), strmangle.Placeholders(dialect.IndexPlaceholders, len(wl), 1, 1))
@@ -110,7 +110,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 	_, err = exec.Exec(cache.query, vals...)
 	{{- end}}
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to insert into {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to insert into {{.Table.Name}}")
 	}
 	
 	{{if $canLastInsertID -}}
@@ -125,7 +125,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 	{{if $canLastInsertID -}}
 	lastID, err = result.LastInsertId()
 	if err != nil {
-		return errors.Err(ErrSyncFail)
+		return ErrSyncFail
 	}
 
 	{{$colName := index .Table.PKey.Columns 0 -}}
@@ -150,7 +150,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 
 	err = exec.QueryRow(cache.retQuery, identifierCols...).Scan(queries.PtrsFromMapping(value, cache.retMapping)...)
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to populate default values for {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to populate default values for {{.Table.Name}}")
 	}
 	{{else}}
 	if len(cache.retMapping) != 0 {
@@ -160,7 +160,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string
 	}
 
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to insert into {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to insert into {{.Table.Name}}")
 	}
 	{{end}}
 
diff --git a/templates/16_update.tpl b/templates/16_update.tpl
index a4a688c..50c7f49 100644
--- a/templates/16_update.tpl
+++ b/templates/16_update.tpl
@@ -12,7 +12,7 @@ func (o *{{$tableNameSingular}}) UpdateG(whitelist ...string) error {
 // Panics on error. See Update for whitelist behavior description.
 func (o *{{$tableNameSingular}}) UpdateGP(whitelist ...string) {
 	if err := o.Update(boil.GetDB(), whitelist...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -21,7 +21,7 @@ func (o *{{$tableNameSingular}}) UpdateGP(whitelist ...string) {
 func (o *{{$tableNameSingular}}) UpdateP(exec boil.Executor, whitelist ... string) {
 	err := o.Update(exec, whitelist...)
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -38,7 +38,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string
 	var err error
 	{{if not .NoHooks -}}
 	if err = o.doBeforeUpdateHooks(exec); err != nil {
-		return errors.Err(err)
+		return err
 	}
 	{{end -}}
 
@@ -56,11 +56,13 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string
 		{{if eq .DriverName "mssql"}}
 		wl = strmangle.SetComplement(wl, {{$varNameSingular}}ColumnsWithAuto)
 		{{end}}
+		{{if not .NoAutoTimestamps}}
 		if len(whitelist) == 0 {
-			wl = strmangle.SetComplement(wl, []string{"created_at","updated_at"})
+			wl = strmangle.SetComplement(wl, []string{"created_at"})
 		}
+		{{end -}}
 		if len(wl) == 0 {
-			return errors.Err("{{.PkgName}}: unable to update {{.Table.Name}}, could not build whitelist")
+			return errors.New("{{.PkgName}}: unable to update {{.Table.Name}}, could not build whitelist")
 		}
 
 		cache.query = fmt.Sprintf("UPDATE {{$schemaTable}} SET %s WHERE %s",
@@ -69,7 +71,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string
 		)
 		cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, append(wl, {{$varNameSingular}}PrimaryKeyColumns...))
 		if err != nil {
-			return errors.Err(err)
+			return err
 		}
 	}
 
@@ -82,7 +84,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string
 
 	_, err = exec.Exec(cache.query, values...)
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to update {{.Table.Name}} row", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to update {{.Table.Name}} row")
 	}
 
 	if !cached {
@@ -99,19 +101,19 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string
 }
 
 // UpdateAllP updates all rows with matching column names, and panics on error.
-func (q {{$tableNameSingular}}Query) UpdateAllP(cols M) {
+func (q {{$varNameSingular}}Query) UpdateAllP(cols M) {
 	if err := q.UpdateAll(cols); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
 // UpdateAll updates all rows with the specified column values.
-func (q {{$tableNameSingular}}Query) UpdateAll(cols M) error {
+func (q {{$varNameSingular}}Query) UpdateAll(cols M) error {
 	queries.SetUpdate(q.Query, cols)
 
 	_, err := q.Query.Exec()
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to update all for {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to update all for {{.Table.Name}}")
 	}
 
 	return nil
@@ -125,14 +127,14 @@ func (o {{$tableNameSingular}}Slice) UpdateAllG(cols M) error {
 // UpdateAllGP updates all rows with the specified column values, and panics on error.
 func (o {{$tableNameSingular}}Slice) UpdateAllGP(cols M) {
 	if err := o.UpdateAll(boil.GetDB(), cols); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
 // UpdateAllP updates all rows with the specified column values, and panics on error.
 func (o {{$tableNameSingular}}Slice) UpdateAllP(exec boil.Executor, cols M) {
 	if err := o.UpdateAll(exec, cols); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -144,7 +146,7 @@ func (o {{$tableNameSingular}}Slice) UpdateAll(exec boil.Executor, cols M) error
 	}
 
 	if len(cols) == 0 {
-		return errors.Err("{{.PkgName}}: update all requires at least one column argument")
+		return errors.New("{{.PkgName}}: update all requires at least one column argument")
 	}
 
 	colNames := make([]string, len(cols))
@@ -174,7 +176,7 @@ func (o {{$tableNameSingular}}Slice) UpdateAll(exec boil.Executor, cols M) error
 
 	_, err := exec.Exec(sql, args...)
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to update all in {{$varNameSingular}} slice", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to update all in {{$varNameSingular}} slice")
 	}
 
 	return nil
diff --git a/templates/17_upsert.tpl b/templates/17_upsert.tpl
index b713243..f3d51e7 100644
--- a/templates/17_upsert.tpl
+++ b/templates/17_upsert.tpl
@@ -9,7 +9,7 @@ func (o *{{$tableNameSingular}}) UpsertG({{if eq .DriverName "postgres"}}updateO
 // UpsertGP attempts an insert, and does an update or ignore on conflict. Panics on error.
 func (o *{{$tableNameSingular}}) UpsertGP({{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string,	whitelist ...string) {
 	if err := o.Upsert(boil.GetDB(), {{if eq .DriverName "postgres"}}updateOnConflict, conflictColumns, {{end}}updateColumns, whitelist...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -17,21 +17,21 @@ func (o *{{$tableNameSingular}}) UpsertGP({{if eq .DriverName "postgres"}}update
 // UpsertP panics on error.
 func (o *{{$tableNameSingular}}) UpsertP(exec boil.Executor, {{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string,	whitelist ...string) {
 	if err := o.Upsert(exec, {{if eq .DriverName "postgres"}}updateOnConflict, conflictColumns, {{end}}updateColumns, whitelist...); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
 // Upsert attempts an insert using an executor, and does an update or ignore on conflict.
 func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string, whitelist ...string) error {
 	if o == nil {
-		return errors.Err("{{.PkgName}}: no {{.Table.Name}} provided for upsert")
+		return errors.New("{{.PkgName}}: no {{.Table.Name}} provided for upsert")
 	}
 
 	{{- template "timestamp_upsert_helper" . }}
 
 	{{if not .NoHooks -}}
 	if err := o.doBeforeUpsertHooks(exec); err != nil {
-		return errors.Err(err)
+		return err
 	}
 	{{- end}}
 
@@ -87,7 +87,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 			}
 		}
 		if len(insert) == 0 {
-			return errors.Err("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build insert column list")
+			return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build insert column list")
 		}
 
 		ret = strmangle.SetMerge(ret, {{$varNameSingular}}ColumnsWithAuto)
@@ -104,7 +104,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 		{{end -}}
 
 		if len(update) == 0 {
-			return errors.Err("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list")
+			return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list")
 		}
 
 		{{if eq .DriverName "postgres"}}
@@ -115,7 +115,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 		}
 		cache.query = queries.BuildUpsertQueryPostgres(dialect, "{{$schemaTable}}", updateOnConflict, ret, update, conflict, insert)
 		{{else if eq .DriverName "mysql"}}
-		cache.query = queries.BuildUpsertQueryMySQL(dialect, "{{.Table.Name}}", update, insert, {{$varNameSingular}}AutoIncrementColumn)
+		cache.query = queries.BuildUpsertQueryMySQL(dialect, "{{.Table.Name}}", update, insert)
 		cache.retQuery = fmt.Sprintf(
 			"SELECT %s FROM {{.LQ}}{{.Table.Name}}{{.RQ}} WHERE {{whereClause .LQ .RQ 0 .Table.PKey.Columns}}",
 			strings.Join(strmangle.IdentQuoteSlice(dialect.LQ, dialect.RQ, ret), ","),
@@ -129,12 +129,12 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 
 		cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, {{if eq .DriverName "mssql"}}whitelist{{else}}insert{{end}})
 		if err != nil {
-			return errors.Err(err)
+			return err
 		}
 		if len(ret) != 0 {
 			cache.retMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, ret)
 			if err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
@@ -159,7 +159,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 	_, err = exec.Exec(cache.query, vals...)
 	{{- end}}
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to upsert for {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to upsert for {{.Table.Name}}")
 	}
 
 	{{if $canLastInsertID -}}
@@ -174,7 +174,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 	{{if $canLastInsertID -}}
 	lastID, err = result.LastInsertId()
 	if err != nil {
-		return errors.Err(ErrSyncFail)
+		return ErrSyncFail
 	}
 
 	{{$colName := index .Table.PKey.Columns 0 -}}
@@ -199,7 +199,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 
 	err = exec.QueryRow(cache.retQuery, identifierCols...).Scan(returns...)
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to populate default values for {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to populate default values for {{.Table.Name}}")
 	}
 	{{- else}}
 	if len(cache.retMapping) != 0 {
@@ -211,7 +211,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName
 		_, err = exec.Exec(cache.query, vals...)
 	}
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to upsert {{.Table.Name}}", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to upsert {{.Table.Name}}")
 	}
 	{{- end}}
 
diff --git a/templates/18_delete.tpl b/templates/18_delete.tpl
index 1ab82a3..f2ddbb6 100644
--- a/templates/18_delete.tpl
+++ b/templates/18_delete.tpl
@@ -6,7 +6,7 @@
 // Panics on error.
 func (o *{{$tableNameSingular}}) DeleteP(exec boil.Executor) {
 	if err := o.Delete(exec); err != nil {
-	panic(errors.Err(err))
+	panic(boil.WrapErr(err))
 	}
 }
 
@@ -14,7 +14,7 @@ func (o *{{$tableNameSingular}}) DeleteP(exec boil.Executor) {
 // DeleteG will match against the primary key column to find the record to delete.
 func (o *{{$tableNameSingular}}) DeleteG() error {
 	if o == nil {
-	  return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for deletion")
+	return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for deletion")
 	}
 
 	return o.Delete(boil.GetDB())
@@ -25,7 +25,7 @@ func (o *{{$tableNameSingular}}) DeleteG() error {
 // Panics on error.
 func (o *{{$tableNameSingular}}) DeleteGP() {
 	if err := o.DeleteG(); err != nil {
-	  panic(errors.Err(err))
+	panic(boil.WrapErr(err))
 	}
 }
 
@@ -33,12 +33,12 @@ func (o *{{$tableNameSingular}}) DeleteGP() {
 // Delete will match against the primary key column to find the record to delete.
 func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error {
 	if o == nil {
-	  return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for delete")
+	return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for delete")
 	}
 
 	{{if not .NoHooks -}}
 	if err := o.doBeforeDeleteHooks(exec); err != nil {
-	  return errors.Err(err)
+	return err
 	}
 	{{- end}}
 
@@ -52,12 +52,12 @@ func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error {
 
 	_, err := exec.Exec(sql, args...)
 	if err != nil {
-  	return errors.Prefix("{{.PkgName}}: unable to delete from {{.Table.Name}}", err)
+	return errors.Wrap(err, "{{.PkgName}}: unable to delete from {{.Table.Name}}")
 	}
 
 	{{if not .NoHooks -}}
 	if err := o.doAfterDeleteHooks(exec); err != nil {
-	  return errors.Err(err)
+	return err
 	}
 	{{- end}}
 
@@ -65,23 +65,23 @@ func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error {
 }
 
 // DeleteAllP deletes all rows, and panics on error.
-func (q {{$tableNameSingular}}Query) DeleteAllP() {
+func (q {{$varNameSingular}}Query) DeleteAllP() {
 	if err := q.DeleteAll(); err != nil {
-	  panic(errors.Err(err))
+	panic(boil.WrapErr(err))
 	}
 }
 
 // DeleteAll deletes all matching rows.
-func (q {{$tableNameSingular}}Query) DeleteAll() error {
+func (q {{$varNameSingular}}Query) DeleteAll() error {
 	if q.Query == nil {
-	  return errors.Err("{{.PkgName}}: no {{$tableNameSingular}}Query provided for delete all")
+	return errors.New("{{.PkgName}}: no {{$varNameSingular}}Query provided for delete all")
 	}
 
 	queries.SetDelete(q.Query)
 
 	_, err := q.Query.Exec()
 	if err != nil {
-	  return errors.Prefix("{{.PkgName}}: unable to delete all from {{.Table.Name}}", err)
+	return errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{.Table.Name}}")
 	}
 
 	return nil
@@ -90,14 +90,14 @@ func (q {{$tableNameSingular}}Query) DeleteAll() error {
 // DeleteAllGP deletes all rows in the slice, and panics on error.
 func (o {{$tableNameSingular}}Slice) DeleteAllGP() {
 	if err := o.DeleteAllG(); err != nil {
-	  panic(errors.Err(err))
+	panic(boil.WrapErr(err))
 	}
 }
 
 // DeleteAllG deletes all rows in the slice.
 func (o {{$tableNameSingular}}Slice) DeleteAllG() error {
 	if o == nil {
-	  return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all")
+	return errors.New("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all")
 	}
 	return o.DeleteAll(boil.GetDB())
 }
@@ -105,14 +105,14 @@ func (o {{$tableNameSingular}}Slice) DeleteAllG() error {
 // DeleteAllP deletes all rows in the slice, using an executor, and panics on error.
 func (o {{$tableNameSingular}}Slice) DeleteAllP(exec boil.Executor) {
 	if err := o.DeleteAll(exec); err != nil {
-	  panic(errors.Err(err))
+	panic(boil.WrapErr(err))
 	}
 }
 
 // DeleteAll deletes all rows in the slice, using an executor.
 func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error {
 	if o == nil {
-		return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all")
+		return errors.New("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all")
 	}
 
 	if len(o) == 0 {
@@ -123,7 +123,7 @@ func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error {
 	if len({{$varNameSingular}}BeforeDeleteHooks) != 0 {
 		for _, obj := range o {
 			if err := obj.doBeforeDeleteHooks(exec); err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
@@ -145,14 +145,14 @@ func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error {
 
 	_, err := exec.Exec(sql, args...)
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to delete all from {{$varNameSingular}} slice", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{$varNameSingular}} slice")
 	}
 
 	{{if not .NoHooks -}}
 	if len({{$varNameSingular}}AfterDeleteHooks) != 0 {
 		for _, obj := range o {
 			if err := obj.doAfterDeleteHooks(exec); err != nil {
-				return errors.Err(err)
+				return err
 			}
 		}
 	}
diff --git a/templates/19_reload.tpl b/templates/19_reload.tpl
index c7c5273..b1201b8 100644
--- a/templates/19_reload.tpl
+++ b/templates/19_reload.tpl
@@ -5,21 +5,21 @@
 // ReloadGP refetches the object from the database and panics on error.
 func (o *{{$tableNameSingular}}) ReloadGP() {
 	if err := o.ReloadG(); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
 // ReloadP refetches the object from the database with an executor. Panics on error.
 func (o *{{$tableNameSingular}}) ReloadP(exec boil.Executor) {
 	if err := o.Reload(exec); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
 // ReloadG refetches the object from the database using the primary keys.
 func (o *{{$tableNameSingular}}) ReloadG() error {
 	if o == nil {
-		return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for reload")
+		return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for reload")
 	}
 
 	return o.Reload(boil.GetDB())
@@ -30,7 +30,7 @@ func (o *{{$tableNameSingular}}) ReloadG() error {
 func (o *{{$tableNameSingular}}) Reload(exec boil.Executor) error {
 	ret, err := Find{{$tableNameSingular}}(exec, {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}})
 	if err != nil {
-		return errors.Err(err)
+		return err
 	}
 
 	*o = *ret
@@ -42,7 +42,7 @@ func (o *{{$tableNameSingular}}) Reload(exec boil.Executor) error {
 // Panics on error.
 func (o *{{$tableNameSingular}}Slice) ReloadAllGP() {
 	if err := o.ReloadAllG(); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -51,7 +51,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAllGP() {
 // Panics on error.
 func (o *{{$tableNameSingular}}Slice) ReloadAllP(exec boil.Executor) {
 	if err := o.ReloadAll(exec); err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 }
 
@@ -59,7 +59,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAllP(exec boil.Executor) {
 // and overwrites the original object slice with the newly updated slice.
 func (o *{{$tableNameSingular}}Slice) ReloadAllG() error {
 	if o == nil {
-		return errors.Err("{{.PkgName}}: empty {{$tableNameSingular}}Slice provided for reload all")
+		return errors.New("{{.PkgName}}: empty {{$tableNameSingular}}Slice provided for reload all")
 	}
 
 	return o.ReloadAll(boil.GetDB())
@@ -86,7 +86,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAll(exec boil.Executor) error {
 
 	err := q.Bind(&{{$varNamePlural}})
 	if err != nil {
-		return errors.Prefix("{{.PkgName}}: unable to reload all in {{$tableNameSingular}}Slice", err)
+		return errors.Wrap(err, "{{.PkgName}}: unable to reload all in {{$tableNameSingular}}Slice")
 	}
 
 	*o = {{$varNamePlural}}
diff --git a/templates/20_exists.tpl b/templates/20_exists.tpl
index 2a36c23..22a67a0 100644
--- a/templates/20_exists.tpl
+++ b/templates/20_exists.tpl
@@ -1,5 +1,4 @@
 {{- $tableNameSingular := .Table.Name | singular | titleCase -}}
-{{- $varNameSingular := .Table.Name | singular | camelCase -}}
 {{- $colDefs := sqlColDefinitions .Table.Columns .Table.PKey.Columns -}}
 {{- $pkNames := $colDefs.Names | stringMap .StringFuncs.camelCase | stringMap .StringFuncs.replaceReserved -}}
 {{- $pkArgs := joinSlices " " $pkNames $colDefs.Types | join ", " -}}
@@ -22,7 +21,7 @@ func {{$tableNameSingular}}Exists(exec boil.Executor, {{$pkArgs}}) (bool, error)
 
 	err := row.Scan(&exists)
 	if err != nil {
-		return false, errors.Prefix("{{.PkgName}}: unable to check if {{.Table.Name}} exists", err)
+		return false, errors.Wrap(err, "{{.PkgName}}: unable to check if {{.Table.Name}} exists")
 	}
 
 	return exists, nil
@@ -37,7 +36,7 @@ func {{$tableNameSingular}}ExistsG({{$pkArgs}}) (bool, error) {
 func {{$tableNameSingular}}ExistsGP({{$pkArgs}}) bool {
 	e, err := {{$tableNameSingular}}Exists(boil.GetDB(), {{$pkNames | join ", "}})
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return e
@@ -47,43 +46,8 @@ func {{$tableNameSingular}}ExistsGP({{$pkArgs}}) bool {
 func {{$tableNameSingular}}ExistsP(exec boil.Executor, {{$pkArgs}}) bool {
 	e, err := {{$tableNameSingular}}Exists(exec, {{$pkNames | join ", "}})
 	if err != nil {
-		panic(errors.Err(err))
+		panic(boil.WrapErr(err))
 	}
 
 	return e
 }
-
-// IsNew() checks if record exists in db (aka if its primary key is set).
-func (o *{{$tableNameSingular}}) IsNew() bool {
-	r := reflect.ValueOf(o).Elem()
-	for i := 0; i < r.NumField(); i++ {
-		column := r.Type().Field(i).Tag.Get("boil")
-		for _, pkColumn := range {{$varNameSingular}}PrimaryKeyColumns {
-			if column == pkColumn {
-				field := r.Field(i)
-				if field.Interface() != reflect.Zero(field.Type()).Interface() {
-					return false
-				}
-			}
-		}
-	}
-	return true
-}
-
-// Save() inserts the record if it does not exist, or updates it if it does.
-func (o *{{$tableNameSingular}}) Save(exec boil.Executor, whitelist ...string) error {
-  if o.IsNew() {
-    return o.Insert(exec, whitelist...)
-  } else {
-    return o.Update(exec, whitelist...)
-  }
-}
-
-// SaveG() inserts the record if it does not exist, or updates it if it does.
-func (o *{{$tableNameSingular}}) SaveG(whitelist ...string) error {
-  if o.IsNew() {
-    return o.InsertG(whitelist...)
-  } else {
-    return o.UpdateG(whitelist...)
-  }
-}
diff --git a/templates/22_query.tpl b/templates/22_query.tpl
deleted file mode 100644
index 2dcf973..0000000
--- a/templates/22_query.tpl
+++ /dev/null
@@ -1,33 +0,0 @@
-{{- $tableNameSingular := .Table.Name | singular | titleCase -}}
-
-// {{$tableNameSingular}}NewQuery filters query results
-func {{$tableNameSingular}}NewQuery(exec boil.Executor) *{{$tableNameSingular}}Query {
-	return &{{$tableNameSingular}}Query{NewQuery(exec, qm.Select("*"), qm.From("{{.Table.Name | .SchemaTable}}"))}
-}
-
-// {{$tableNameSingular}}NewQuery filters query results
-func {{$tableNameSingular}}NewQueryG() *{{$tableNameSingular}}Query {
-	return {{$tableNameSingular}}NewQuery(boil.GetDB())
-}
-
-// Where filters query results
-func (q *{{$tableNameSingular}}Query) Where(filters {{$tableNameSingular}}Filter) *{{$tableNameSingular}}Query {
-	r := reflect.ValueOf(filters)
-	for i := 0; i < r.NumField(); i++ {
-		f := r.Field(i)
-		if f.Elem().IsValid() {
-			if nullable, ok := f.Elem().Interface().(null.Nullable); ok && nullable.IsNull() {
-				queries.AppendWhere(q.Query, r.Type().Field(i).Tag.Get("boil")+" IS NULL")
-			} else {
-				queries.AppendWhere(q.Query, r.Type().Field(i).Tag.Get("boil")+" = ?", f.Elem().Interface())
-			}
-		}
-	}
-	return q
-}
-
-// Limit limits query results
-func (q *{{$tableNameSingular}}Query) Limit(limit int) *{{$tableNameSingular}}Query {
-	queries.SetLimit(q.Query, limit)
-	return q
-}
\ No newline at end of file
diff --git a/templates/23_merge.tpl b/templates/23_merge.tpl
deleted file mode 100644
index 16a7b58..0000000
--- a/templates/23_merge.tpl
+++ /dev/null
@@ -1,107 +0,0 @@
-{{- $tableNamePlural := .Table.Name | plural | titleCase -}}
-{{- $tableNameSingular := .Table.Name | singular | titleCase -}}
-{{- if .Table.IsJoinTable -}}
-{{- else -}}
-	{{- $dot := . }}
-// Merge combines two {{$tableNamePlural}} into one. The primary record will be kept, and the secondary will be deleted.
-func Merge{{$tableNamePlural}}(exec boil.Executor, primaryID uint64, secondaryID uint64) (err error) {
-	tx, ok := exec.(boil.Transactor)
-	if !ok {
-		txdb, ok := exec.(boil.Beginner)
-		if !ok {
-			return errors.Err("database does not support transactions")
-		}
-
-		tx, err = txdb.Begin()
-		if err != nil {
-			return errors.Err(err)
-		}
-
-		defer func() {
-			if p := recover(); p != nil {
-				tx.Rollback()
-				panic(p) // Rollback, then propagate panic
-			} else if err != nil {
-				tx.Rollback()
-			} else {
-				err = tx.Commit()
-			}
-		}()
-	}
-
-  primary, err := Find{{$tableNameSingular}}(tx, primaryID)
-  if err != nil {
-    return errors.Err(err)
-  } else if primary == nil {
-		return errors.Err("primary {{$tableNameSingular}} not found")
-	}
-
-  secondary, err := Find{{$tableNameSingular}}(tx, secondaryID)
-  if err != nil {
-    return errors.Err(err)
-  } else if secondary == nil {
-		return errors.Err("secondary {{$tableNameSingular}} not found")
-	}
-
-  foreignKeys := []foreignKey{
-	{{- range .Tables -}}
-	  {{- range .FKeys -}}
-	    {{- if eq $dot.Table.Name .ForeignTable }}
-		  {foreignTable: "{{.Table}}", foreignColumn: "{{.Column}}"},
-      {{- end -}}
-    {{- end -}}
-  {{- end }}
-  }
-
-  conflictingKeys := []conflictingUniqueKey{
-    {{- range .Tables -}}
-      {{- $table := . -}}
-      {{- range .FKeys -}}
-        {{- $fk := . -}}
-        {{- if eq $dot.Table.Name .ForeignTable -}}
-          {{- range $table.UKeys -}}
-            {{- if setInclude $fk.Column .Columns }}
-              {table: "{{$fk.Table}}", objectIdColumn: "{{$fk.Column}}", columns: []string{`{{ .Columns | join "`,`" }}`}},
-            {{- end -}}
-          {{- end -}}
-        {{- end -}}
-      {{- end -}}
-    {{- end }}
-  }
-
-  err = mergeModels(tx, primaryID, secondaryID, foreignKeys, conflictingKeys)
-  if err != nil {
-    return err
-  }
-
-	pr := reflect.ValueOf(primary)
-	sr := reflect.ValueOf(secondary)
-	// for any column thats null on the primary and not null on the secondary, copy from secondary to primary
-	for i := 0; i < sr.Elem().NumField(); i++ {
-		pf := pr.Elem().Field(i)
-		sf := sr.Elem().Field(i)
-		if sf.IsValid() {
-			if nullable, ok := sf.Interface().(null.Nullable); ok && !nullable.IsNull() && pf.Interface().(null.Nullable).IsNull() {
-				pf.Set(sf)
-			}
-		}
-	}
-
-	err = primary.Update(tx)
-	if err != nil {
-		return err
-	}
-
-	err = secondary.Delete(tx)
-	if err != nil {
-		return err
-	}
-
-  return nil
-}
-
-// Merge combines two {{$tableNamePlural}} into one. The primary record will be kept, and the secondary will be deleted.
-func Merge{{$tableNamePlural}}G(primaryID uint64, secondaryID uint64) error {
-  return Merge{{$tableNamePlural}}(boil.GetDB(), primaryID, secondaryID)
-}
-{{- end -}}{{/* join table */}}
\ No newline at end of file
diff --git a/templates/singleton/boil_queries.tpl b/templates/singleton/boil_queries.tpl
index 3e9ebb8..3883e8e 100644
--- a/templates/singleton/boil_queries.tpl
+++ b/templates/singleton/boil_queries.tpl
@@ -19,168 +19,3 @@ func NewQuery(exec boil.Executor, mods ...qm.QueryMod) *queries.Query {
 
 	return q
 }
-
-func mergeModels(tx boil.Executor, primaryID uint64, secondaryID uint64, foreignKeys []foreignKey, conflictingKeys []conflictingUniqueKey) error {
-	if len(foreignKeys) < 1 {
-		return nil
-	}
-	var err error
-
-	for _, conflict := range conflictingKeys {
-        if len(conflict.columns) == 1 && conflict.columns[0] == conflict.objectIdColumn {
-            err = deleteOneToOneConflictsBeforeMerge(tx, conflict, primaryID, secondaryID)
-        } else {
-            err = deleteOneToManyConflictsBeforeMerge(tx, conflict, primaryID, secondaryID)
-        }
-        if err != nil {
-            return err
-        }
-     }
-
-	for _, fk := range foreignKeys {
-		// TODO: use NewQuery here, not plain sql
-		query := fmt.Sprintf(
-			"UPDATE %s SET %s = %s WHERE %s = %s",
-			fk.foreignTable, fk.foreignColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 1, 1),
-			fk.foreignColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 2, 1),
-		)
-		_, err = tx.Exec(query, primaryID, secondaryID)
-		if err != nil {
-			return errors.Err(err)
-		}
-	}
-	return checkMerge(tx, foreignKeys)
-}
-
-func deleteOneToOneConflictsBeforeMerge(tx boil.Executor, conflict conflictingUniqueKey, primaryID uint64, secondaryID uint64) error {
-	query := fmt.Sprintf(
-		"SELECT COUNT(*) FROM %s WHERE %s IN (%s)",
-		conflict.table, conflict.objectIdColumn,
-		strmangle.Placeholders(dialect.IndexPlaceholders, 2, 1, 1),
-	)
-
-	var count int
-	err := tx.QueryRow(query, primaryID, secondaryID).Scan(&count)
-	if err != nil {
-		return errors.Err(err)
-	}
-
-	if count > 2 {
-		return errors.Err("it should not be possible to have more than two rows here")
-	} else if count != 2 {
-		return nil // no conflicting rows
-	}
-
-	query = fmt.Sprintf(
-		"DELETE FROM %s WHERE %s = %s",
-		conflict.table, conflict.objectIdColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 1, 1),
-	)
-
-	_, err = tx.Exec(query, secondaryID)
-	return errors.Err(err)
-}
-
-func deleteOneToManyConflictsBeforeMerge(tx boil.Executor, conflict conflictingUniqueKey, primaryID uint64, secondaryID uint64) error {
-	conflictingColumns := strmangle.SetComplement(conflict.columns, []string{conflict.objectIdColumn})
-
-	query := fmt.Sprintf(
-		"SELECT %s FROM %s WHERE %s IN (%s) GROUP BY %s HAVING count(distinct %s) > 1",
-		strings.Join(conflictingColumns, ","), conflict.table, conflict.objectIdColumn,
-		strmangle.Placeholders(dialect.IndexPlaceholders, 2, 1, 1),
-		strings.Join(conflictingColumns, ","), conflict.objectIdColumn,
-	)
-
-	//The selectParams should be the ObjectIDs to search for regarding the conflict.
-	rows, err := tx.Query(query, primaryID, secondaryID)
-	if err != nil {
-		return errors.Err(err)
-	}
-
-	//Since we don't don't know if advance how many columns the query returns, we have dynamically assign them to be
-	// used in the delete query.
-	colNames, err := rows.Columns()
-	if err != nil {
-		return errors.Err(err)
-	}
-	//Each row result of the query needs to be removed for being a conflicting row. Store each row's keys in an array.
-	var rowsToRemove = [][]interface{}(nil)
-	for rows.Next() {
-		//Set pointers for dynamic scan
-		iColPtrs := make([]interface{}, len(colNames))
-		for i := 0; i < len(colNames); i++ {
-			s := string("")
-			iColPtrs[i] = &s
-		}
-		//Dynamically scan n columns
-		err = rows.Scan(iColPtrs...)
-		if err != nil {
-			return errors.Err(err)
-		}
-		//Grab scanned values for query arguments
-		iCol := make([]interface{}, len(colNames))
-		for i, col := range iColPtrs {
-			x := col.(*string)
-			iCol[i] = *x
-		}
-		rowsToRemove = append(rowsToRemove, iCol)
-	}
-	defer rows.Close()
-
-	//This query will adjust dynamically depending on the number of conflicting keys, adding AND expressions for each
-	// key to ensure the right conflicting rows are deleted.
-	query = fmt.Sprintf(
-		"DELETE FROM %s %s",
-		conflict.table,
-		"WHERE "+strings.Join(conflict.columns, " = ? AND ")+" = ?",
-	)
-
-	//There could be multiple conflicting rows between ObjectIDs. In the SELECT query we grab each row and their column
-	// keys to be deleted here in a loop.
-	for _, rowToDelete := range rowsToRemove {
-		rowToDelete = append(rowToDelete, secondaryID)
-		_, err = tx.Exec(query, rowToDelete...)
-		if err != nil {
-			return errors.Err(err)
-		}
-	}
-	return nil
-}
-
-func checkMerge(tx boil.Executor, foreignKeys []foreignKey) error {
-	uniqueColumns := []interface{}{}
-	uniqueColumnNames := map[string]bool{}
-	handledTablesColumns := map[string]bool{}
-
-	for _, fk := range foreignKeys {
-		handledTablesColumns[fk.foreignTable+"."+fk.foreignColumn] = true
-		if _, ok := uniqueColumnNames[fk.foreignColumn]; !ok {
-			uniqueColumns = append(uniqueColumns, fk.foreignColumn)
-			uniqueColumnNames[fk.foreignColumn] = true
-		}
-	}
-
-	q := fmt.Sprintf(
-		`SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND column_name IN (%s)`,
-		strmangle.Placeholders(dialect.IndexPlaceholders, len(uniqueColumns), 1, 1),
-	)
-	rows, err := tx.Query(q, uniqueColumns...)
-	defer rows.Close()
-	if err != nil {
-		return errors.Err(err)
-	}
-
-	for rows.Next() {
-		var tableName string
-		var columnName string
-		err = rows.Scan(&tableName, &columnName)
-		if err != nil {
-			return errors.Err(err)
-		}
-
-		if _, exists := handledTablesColumns[tableName+"."+columnName]; !exists {
-			return errors.Err("missing merge for " + tableName + "." + columnName)
-		}
-	}
-
-	return nil
-}
diff --git a/templates/singleton/boil_table_names.tpl b/templates/singleton/boil_table_names.tpl
deleted file mode 100644
index 062bcad..0000000
--- a/templates/singleton/boil_table_names.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-var TableNames = struct {
-	{{range $table := .Tables -}}
-	{{titleCase $table.Name}} string
-	{{end -}}
-}{
-	{{range $table := .Tables -}}
-	{{titleCase $table.Name}}: "{{$table.Name}}",
-	{{end -}}
-}
diff --git a/templates/singleton/boil_types.tpl b/templates/singleton/boil_types.tpl
index 48a85e2..9bf13e8 100644
--- a/templates/singleton/boil_types.tpl
+++ b/templates/singleton/boil_types.tpl
@@ -1,26 +1,10 @@
 // M type is for providing columns and column values to UpdateAll.
 type M map[string]interface{}
 
-// foreignKey connects two tables. When merging records, foreign keys from secondary record must
-// be reassigned to primary record.
-type foreignKey struct {
-	foreignTable  string
-	foreignColumn string
-}
-
-// conflictingUniqueKey records a merge conflict. If two rows exist with the same value in the
-// conflicting column for two records being merged, one row must be deleted.
-type conflictingUniqueKey struct {
-	table          string
-	objectIdColumn string
-	columns        []string
-}
-
-
 // ErrSyncFail occurs during insert when the record could not be retrieved in
 // order to populate default value information. This usually happens when LastInsertId
 // fails or there was a primary key configuration that was not resolvable.
-var ErrSyncFail = errors.Base("{{.PkgName}}: failed to synchronize data after insert")
+var ErrSyncFail = errors.New("{{.PkgName}}: failed to synchronize data after insert")
 
 type insertCache struct {
 	query        string
diff --git a/templates_test/main_test/mssql_main.tpl b/templates_test/main_test/mssql_main.tpl
index 5b0b5e1..ba46be7 100644
--- a/templates_test/main_test/mssql_main.tpl
+++ b/templates_test/main_test/mssql_main.tpl
@@ -25,17 +25,17 @@ func (m *mssqlTester) setup() error {
 	m.testDBName = randomize.StableDBName(m.dbName)
 
 	if err = m.dropTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 	if err = m.createTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 
 	createCmd := exec.Command("sqlcmd", "-S", m.host, "-U", m.user, "-P", m.pass, "-d", m.testDBName)
 
 	f, err := os.Open("tables_schema.sql")
 	if err != nil {
-		return errors.Prefix("failed to open tables_schema.sql file", err)
+		return errors.Wrap(err, "failed to open tables_schema.sql file")
 	}
 
 	defer f.Close()
@@ -43,12 +43,12 @@ func (m *mssqlTester) setup() error {
 	createCmd.Stdin = newFKeyDestroyer(rgxMSSQLkey, f)
 
 	if err = createCmd.Start(); err != nil {
-		return errors.Prefix("failed to start sqlcmd command", err)
+		return errors.Wrap(err, "failed to start sqlcmd command")
 	}
 
 	if err = createCmd.Wait(); err != nil {
 		fmt.Println(err)
-		return errors.Prefix("failed to wait for sqlcmd command", err)
+		return errors.Wrap(err, "failed to wait for sqlcmd command")
 	}
 
 	return nil
@@ -92,7 +92,7 @@ func (m *mssqlTester) teardown() error {
 	}
 
 	if err := m.dropTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 
 	return nil
@@ -110,7 +110,7 @@ func (m *mssqlTester) runCmd(stdin, command string, args ...string) error {
 		fmt.Println("failed running:", command, args)
 		fmt.Println(stdout.String())
 		fmt.Println(stderr.String())
-		return errors.Err(err)
+		return err
 	}
 
 	return nil
diff --git a/templates_test/main_test/mysql_main.tpl b/templates_test/main_test/mysql_main.tpl
index ef735e2..b95b32c 100644
--- a/templates_test/main_test/mysql_main.tpl
+++ b/templates_test/main_test/mysql_main.tpl
@@ -30,14 +30,14 @@ func (m *mysqlTester) setup() error {
 	m.testDBName = randomize.StableDBName(m.dbName)
 
 	if err = m.makeOptionFile(); err != nil {
-		return errors.Prefix("couldn't make option file", err)
+		return errors.Wrap(err, "couldn't make option file")
 	}
 
 	if err = m.dropTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 	if err = m.createTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 
 	dumpCmd := exec.Command("mysqldump", m.defaultsFile(), "--no-data", m.dbName)
@@ -48,22 +48,22 @@ func (m *mysqlTester) setup() error {
 	createCmd.Stdin = newFKeyDestroyer(rgxMySQLkey, r)
 
 	if err = dumpCmd.Start(); err != nil {
-		return errors.Prefix("failed to start mysqldump command", err)
+		return errors.Wrap(err, "failed to start mysqldump command")
 	}
 	if err = createCmd.Start(); err != nil {
-		return errors.Prefix("failed to start mysql command", err)
+		return errors.Wrap(err, "failed to start mysql command")
 	}
 
 	if err = dumpCmd.Wait(); err != nil {
 		fmt.Println(err)
-		return errors.Prefix("failed to wait for mysqldump command", err)
+		return errors.Wrap(err, "failed to wait for mysqldump command")
 	}
 
 	w.Close() // After dumpCmd is done, close the write end of the pipe
 
 	if err = createCmd.Wait(); err != nil {
 		fmt.Println(err)
-		return errors.Prefix("failed to wait for mysql command", err)
+		return errors.Wrap(err, "failed to wait for mysql command")
 	}
 
 	return nil
@@ -87,7 +87,7 @@ func (m *mysqlTester) defaultsFile() string {
 func (m *mysqlTester) makeOptionFile() error {
 	tmp, err := ioutil.TempFile("", "optionfile")
 	if err != nil {
-		return errors.Prefix("failed to create option file", err)
+		return errors.Wrap(err, "failed to create option file")
 	}
 
 	isTCP := false
@@ -95,7 +95,7 @@ func (m *mysqlTester) makeOptionFile() error {
 	if os.IsNotExist(err) {
 		isTCP = true
 	} else if err != nil {
-		return errors.Prefix("could not stat m.host", err)
+		return errors.Wrap(err, "could not stat m.host")
 	}
 
 	fmt.Fprintln(tmp, "[client]")
@@ -139,7 +139,7 @@ func (m *mysqlTester) teardown() error {
 	}
 
 	if err := m.dropTestDB(); err != nil {
-		return errors.Err(err)
+		return err
 	}
 
 	return os.Remove(m.optionFile)
@@ -159,7 +159,7 @@ func (m *mysqlTester) runCmd(stdin, command string, args ...string) error {
 	fmt.Println("failed running:", command, args)
 	fmt.Println(stdout.String())
 	fmt.Println(stderr.String())
-	return errors.Err(err)
+	return err
 	}
 
 	return nil
diff --git a/templates_test/main_test/postgres_main.tpl b/templates_test/main_test/postgres_main.tpl
index 3110325..0abcba3 100644
--- a/templates_test/main_test/postgres_main.tpl
+++ b/templates_test/main_test/postgres_main.tpl
@@ -33,14 +33,14 @@ func (p *pgTester) setup() error {
   p.testDBName = randomize.StableDBName(p.dbName)
 
   if err = p.makePGPassFile(); err != nil {
-    return errors.Err(err)
+    return err
   }
 
   if err = p.dropTestDB(); err != nil {
-    return errors.Err(err)
+    return err
   }
   if err = p.createTestDB(); err != nil {
-    return errors.Err(err)
+    return err
   }
 
   dumpCmd := exec.Command("pg_dump", "--schema-only", p.dbName)
@@ -53,22 +53,22 @@ func (p *pgTester) setup() error {
   createCmd.Stdin = newFKeyDestroyer(rgxPGFkey, r)
 
   if err = dumpCmd.Start(); err != nil {
-    return errors.Prefix("failed to start pg_dump command", err)
+    return errors.Wrap(err, "failed to start pg_dump command")
   }
   if err = createCmd.Start(); err != nil {
-    return errors.Prefix("failed to start psql command", err)
+    return errors.Wrap(err, "failed to start psql command")
   }
 
   if err = dumpCmd.Wait(); err != nil {
     fmt.Println(err)
-    return errors.Prefix("failed to wait for pg_dump command", err)
+    return errors.Wrap(err, "failed to wait for pg_dump command")
   }
 
   w.Close() // After dumpCmd is done, close the write end of the pipe
 
   if err = createCmd.Wait(); err != nil {
     fmt.Println(err)
-    return errors.Prefix("failed to wait for psql command", err)
+    return errors.Wrap(err, "failed to wait for psql command")
   }
 
   return nil
@@ -90,7 +90,7 @@ func (p *pgTester) runCmd(stdin, command string, args ...string) error {
     fmt.Println("failed running:", command, args)
     fmt.Println(stdout.String())
     fmt.Println(stderr.String())
-    return errors.Err(err)
+    return err
   }
 
   return nil
@@ -108,7 +108,7 @@ func (p *pgTester) pgEnv() []string {
 func (p *pgTester) makePGPassFile() error {
   tmp, err := ioutil.TempFile("", "pgpass")
   if err != nil {
-    return errors.Prefix("failed to create option file", err)
+    return errors.Wrap(err, "failed to create option file")
   }
 
   fmt.Fprintf(tmp, "%s:%d:postgres:%s", p.host, p.port, p.user)
@@ -145,12 +145,12 @@ func (p *pgTester) dropTestDB() error {
 func (p *pgTester) teardown() error {
   var err error
   if err = p.dbConn.Close(); err != nil {
-    return errors.Err(err)
+    return err
   }
   p.dbConn = nil
 
   if err = p.dropTestDB(); err != nil {
-    return errors.Err(err)
+    return err
   }
 
   return os.Remove(p.pgPassFile)
diff --git a/templates_test/relationship_to_one.tpl b/templates_test/relationship_to_one.tpl
index 9211284..e95c61a 100644
--- a/templates_test/relationship_to_one.tpl
+++ b/templates_test/relationship_to_one.tpl
@@ -13,10 +13,10 @@ func test{{$txt.LocalTable.NameGo}}ToOne{{$txt.ForeignTable.NameGo}}Using{{$txt.
 	var foreign {{$txt.ForeignTable.NameGo}}
 
 	seed := randomize.NewSeed()
-	if err := randomize.Struct(seed, &local, {{$varNameSingular}}DBTypes, {{if .Nullable}}true{{else}}false{{end}}, {{$varNameSingular}}ColumnsWithDefault...); err != nil {
+	if err := randomize.Struct(seed, &local, {{$varNameSingular}}DBTypes, true, {{$varNameSingular}}ColumnsWithDefault...); err != nil {
 		t.Errorf("Unable to randomize {{$txt.LocalTable.NameGo}} struct: %s", err)
 	}
-	if err := randomize.Struct(seed, &foreign, {{$foreignVarNameSingular}}DBTypes, {{if .ForeignColumnNullable}}true{{else}}false{{end}}, {{$foreignVarNameSingular}}ColumnsWithDefault...); err != nil {
+	if err := randomize.Struct(seed, &foreign, {{$foreignVarNameSingular}}DBTypes, true, {{$foreignVarNameSingular}}ColumnsWithDefault...); err != nil {
 		t.Errorf("Unable to randomize {{$txt.ForeignTable.NameGo}} struct: %s", err)
 	}
 
diff --git a/templates_test/singleton/boil_main_test.tpl b/templates_test/singleton/boil_main_test.tpl
index 3cf466d..ebb4758 100644
--- a/templates_test/singleton/boil_main_test.tpl
+++ b/templates_test/singleton/boil_main_test.tpl
@@ -143,5 +143,5 @@ func validateConfig(driverName string) error {
 		).Check()
 	}
 
-	return errors.Err("not a valid driver name")
+	return errors.New("not a valid driver name")
 }