diff --git a/mapstructure.go b/mapstructure.go
index d83ad0e..b61070f 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -14,6 +14,16 @@
 	"strings"
 )
 
+// Error implements the error interface and can represents multiple
+// errors that occur in the course of a single decode.
+type Error struct {
+	Errors []string
+}
+
+func (e *Error) Error() string {
+	return fmt.Sprintf("%d error(s) decoding", len(e.Errors))
+}
+
 // Decode takes a map and uses reflection to convert it into the
 // given Go native structure. val must be a pointer to a struct.
 func Decode(m map[string]interface{}, rawVal interface{}) error {
@@ -169,6 +179,8 @@
 			name, dataValType.Key().Kind())
 	}
 
+	errors := make([]string, 0)
+
 	valType := val.Type()
 	for i := 0; i < valType.NumField(); i++ {
 		fieldType := valType.Field(i)
@@ -202,9 +214,18 @@
 
 		fieldName = fmt.Sprintf("%s.%s", name, fieldName)
 		if err := decode(fieldName, rawMapVal.Interface(), field); err != nil {
-			return err
+			switch e := err.(type) {
+			case *Error:
+				errors = append(errors, e.Errors...)
+			default:
+				errors = append(errors, e.Error())
+			}
 		}
 	}
 
+	if len(errors) > 0 {
+		return &Error{errors}
+	}
+
 	return nil
 }
diff --git a/mapstructure_test.go b/mapstructure_test.go
index e913b6c..713e621 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -287,7 +287,13 @@
 		t.FailNow()
 	}
 
-	if err.Error() != "'root.Vstring' expected type 'string', got 'int'" {
+	derr, ok := err.(*Error)
+	if !ok {
+		t.Errorf("error should be kind of Error, instead: %#v", err)
+		t.FailNow()
+	}
+
+	if derr.Errors[0] != "'root.Vstring' expected type 'string', got 'int'" {
 		t.Errorf("got unexpected error: %s", err)
 	}
 }
