diff --git a/cast_test.go b/cast_test.go
index 13318a4..e8cb176 100644
--- a/cast_test.go
+++ b/cast_test.go
@@ -8,8 +8,9 @@
 import (
 	"testing"
 
-	"github.com/stretchr/testify/assert"
 	"html/template"
+
+	"github.com/stretchr/testify/assert"
 )
 
 func TestToInt(t *testing.T) {
@@ -40,6 +41,35 @@
 	assert.Equal(t, ToString(nil), "")
 }
 
+type foo struct {
+	val string
+}
+
+func (x foo) String() string {
+	return x.val
+}
+
+func TestStringerToString(t *testing.T) {
+
+	var x foo
+	x.val = "bar"
+	assert.Equal(t, "bar", ToString(x))
+}
+
+type fu struct {
+	val string
+}
+
+func (x fu) Error() string {
+	return x.val
+}
+
+func TestErrorToString(t *testing.T) {
+	var x fu
+	x.val = "bar"
+	assert.Equal(t, "bar", ToString(x))
+}
+
 func TestMaps(t *testing.T) {
 	var taxonomies = map[interface{}]interface{}{"tag": "tags", "group": "groups"}
 	var stringMapBool = map[interface{}]interface{}{"v1": true, "v2": false}
diff --git a/caste.go b/caste.go
index d639da7..40bde04 100644
--- a/caste.go
+++ b/caste.go
@@ -119,10 +119,6 @@
 	}
 }
 
-var (
-	errorType       = reflect.TypeOf((*error)(nil)).Elem()
-	fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()
-)
 
 func ToStringE(i interface{}) (string, error) {
 	jww.DEBUG.Println("ToStringE called on type:", reflect.TypeOf(i))
@@ -140,13 +136,12 @@
 		return string(s), nil
 	case nil:
 		return "", nil
+	case fmt.Stringer:
+		return s.String(), nil
+	case error:
+		return s.Error(), nil
 	default:
-		// shamelessly borrowed from html/template
-		v := reflect.ValueOf(i)
-		for !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() {
-			v = v.Elem()
-		}
-		return fmt.Sprint(v), nil
+		return "", fmt.Errorf("Unable to Cast %#v to string", i)
 	}
 }
 
