Caste now returns error instead of bool.
diff --git a/caste.go b/caste.go
index af60fe5..78c9483 100644
--- a/caste.go
+++ b/caste.go
@@ -8,140 +8,136 @@
 import (
 	"errors"
 	"fmt"
+	"reflect"
 	"strconv"
 	"time"
 
 	jww "github.com/spf13/jwalterweatherman"
 )
 
-func ToTimeE(i interface{}) (tim time.Time, ok bool) {
+func ToTimeE(i interface{}) (tim time.Time, err error) {
+	jww.DEBUG.Println("ToTimeE called on type:", reflect.TypeOf(i))
+
 	switch s := i.(type) {
 	case time.Time:
-		return s, true
+		return s, nil
 	case string:
 		d, e := StringToDate(s)
 		if e == nil {
-			return d, true
+			return d, nil
 		}
-
-		jww.ERROR.Println("Could not parse Date/Time format:", e)
-		return time.Time{}, false
+		return time.Time{}, fmt.Errorf("Could not parse Date/Time format: %v\n", e)
 	default:
-		jww.ERROR.Printf("Unable to Cast %#v to Time", i)
-		return time.Time{}, false
+		return time.Time{}, fmt.Errorf("Unable to Cast %#v to Time\n", i)
 	}
-
-	return time.Time{}, false
 }
 
-func ToBoolE(i interface{}) (bool, bool) {
+func ToBoolE(i interface{}) (bool, error) {
+	jww.DEBUG.Println("ToBoolE called on type:", reflect.TypeOf(i))
+
 	switch b := i.(type) {
 	case bool:
-		return b, true
+		return b, nil
 	case nil:
-		return false, true
+		return false, nil
 	case int:
 		if i.(int) > 0 {
-			return true, true
+			return true, nil
 		}
-		return false, true
+		return false, nil
 	default:
-		return false, false
-		jww.ERROR.Printf("Unable to Cast %#v to bool", i)
+		return false, fmt.Errorf("Unable to Cast %#v to bool", i)
 	}
-
-	return false, false
 }
 
-func ToFloat64E(i interface{}) (float64, bool) {
+func ToFloat64E(i interface{}) (float64, error) {
+	jww.DEBUG.Println("ToFloat64E called on type:", reflect.TypeOf(i))
+
 	switch s := i.(type) {
 	case float64:
-		return s, true
+		return s, nil
 	case float32:
-		return float64(s), true
+		return float64(s), nil
 	case int64:
-		return float64(s), true
+		return float64(s), nil
 	case int32:
-		return float64(s), true
+		return float64(s), nil
 	case int16:
-		return float64(s), true
+		return float64(s), nil
 	case int8:
-		return float64(s), true
+		return float64(s), nil
 	case int:
-		return float64(s), true
+		return float64(s), nil
 	case string:
 		v, err := strconv.ParseFloat(s, 64)
 		if err == nil {
-			return float64(v), true
+			return float64(v), nil
 		} else {
-			jww.ERROR.Printf("Unable to Cast %#v to float", i)
-			jww.ERROR.Println(err)
+			return 0.0, fmt.Errorf("Unable to Cast %#v to float", i)
 		}
-
 	default:
-		jww.ERROR.Printf("Unable to Cast %#v to float", i)
+		return 0.0, fmt.Errorf("Unable to Cast %#v to float", i)
 	}
-
-	return 0.0, false
 }
 
-func ToIntE(i interface{}) (int, bool) {
+func ToIntE(i interface{}) (int, error) {
+	jww.DEBUG.Println("ToIntE called on type:", reflect.TypeOf(i))
+
 	switch s := i.(type) {
 	case int:
-		return s, true
+		return s, nil
 	case int64:
-		return int(s), true
+		return int(s), nil
 	case int32:
-		return int(s), true
+		return int(s), nil
 	case int16:
-		return int(s), true
+		return int(s), nil
 	case int8:
-		return int(s), true
+		return int(s), nil
 	case string:
 		v, err := strconv.ParseInt(s, 0, 0)
 		if err == nil {
-			return int(v), true
+			return int(v), nil
 		} else {
-			jww.ERROR.Printf("Unable to Cast %#v to int", i)
-			jww.ERROR.Println(err)
+			return 0, fmt.Errorf("Unable to Cast %#v to int", i)
 		}
 	case float64:
-		return int(s), true
+		return int(s), nil
 	case bool:
 		if bool(s) {
-			return 1, true
+			return 1, nil
 		} else {
-			return 0, true
+			return 0, nil
 		}
 	case nil:
-		return 0, true
+		return 0, nil
 	default:
-		jww.ERROR.Printf("Unable to Cast %#v to int", i)
+		return 0, fmt.Errorf("Unable to Cast %#v to int", i)
 	}
-
-	return 0, false
 }
 
-func ToStringE(i interface{}) (string, bool) {
+func ToStringE(i interface{}) (string, error) {
+	jww.DEBUG.Println("ToStringE called on type:", reflect.TypeOf(i))
+
 	switch s := i.(type) {
 	case string:
-		return s, true
+		return s, nil
 	case float64:
-		return strconv.FormatFloat(i.(float64), 'f', -1, 64), true
+		return strconv.FormatFloat(i.(float64), 'f', -1, 64), nil
 	case int:
-		return strconv.FormatInt(int64(i.(int)), 10), true
+		return strconv.FormatInt(int64(i.(int)), 10), nil
 	case []byte:
-		return string(s), true
+		return string(s), nil
 	case nil:
-		return "", true
+		return "", nil
 	default:
-		jww.ERROR.Printf("Unable to Cast %#v to string", i)
+		return "", fmt.Errorf("Unable to Cast %#v to string", i)
 	}
-
-	return "", false
 }
 
-func ToStringMapStringE(i interface{}) (map[string]string, bool) {
+func ToStringMapStringE(i interface{}) (map[string]string, error) {
+	jww.DEBUG.Println("ToStringMapStringE called on type:", reflect.TypeOf(i))
+
 	var m = map[string]string{}
 
 	switch v := i.(type) {
@@ -149,20 +145,23 @@
 		for k, val := range v {
 			m[ToString(k)] = ToString(val)
 		}
+		return m, nil
 	case map[string]interface{}:
 		for k, val := range v {
 			m[ToString(k)] = ToString(val)
 		}
+		return m, nil
 	case map[string]string:
-		return v, true
+		return v, nil
 	default:
-		return m, false
+		return m, fmt.Errorf("Unable to Cast %#v to map[string]string", i)
 	}
-
-	return m, true
+	return m, fmt.Errorf("Unable to Cast %#v to map[string]string", i)
 }
 
-func ToStringMapE(i interface{}) (map[string]interface{}, bool) {
+func ToStringMapE(i interface{}) (map[string]interface{}, error) {
+	jww.DEBUG.Println("ToStringMapE called on type:", reflect.TypeOf(i))
+
 	var m = map[string]interface{}{}
 
 	switch v := i.(type) {
@@ -170,16 +169,19 @@
 		for k, val := range v {
 			m[ToString(k)] = val
 		}
+		return m, nil
 	case map[string]interface{}:
-		return v, true
+		return v, nil
 	default:
-		return m, false
+		return m, fmt.Errorf("Unable to Cast %#v to map[string]interface{}", i)
 	}
 
-	return m, true
+	return m, fmt.Errorf("Unable to Cast %#v to map[string]interface{}", i)
 }
 
-func ToStringSliceE(i interface{}) ([]string, bool) {
+func ToStringSliceE(i interface{}) ([]string, error) {
+	jww.DEBUG.Println("ToStringSliceE called on type:", reflect.TypeOf(i))
+
 	var a []string
 
 	switch v := i.(type) {
@@ -187,13 +189,14 @@
 		for _, u := range v {
 			a = append(a, ToString(u))
 		}
+		return a, nil
 	case []string:
-		return v, true
+		return v, nil
 	default:
-		return a, false
+		return a, fmt.Errorf("Unable to Cast %#v to []string", i)
 	}
 
-	return a, true
+	return a, fmt.Errorf("Unable to Cast %#v to []string", i)
 }
 
 func StringToDate(s string) (time.Time, error) {