Fields don't need to be anonymous to support "squash"
diff --git a/mapstructure.go b/mapstructure.go
index d3cb4e8..ecc8218 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -617,22 +617,22 @@
 						fmt.Errorf("%s: unsupported type: %s", fieldType.Name, fieldKind))
 					continue
 				}
+			}
 
-				// We have an embedded field. We "squash" the fields down
-				// if specified in the tag.
-				squash := false
-				tagParts := strings.Split(fieldType.Tag.Get(d.config.TagName), ",")
-				for _, tag := range tagParts[1:] {
-					if tag == "squash" {
-						squash = true
-						break
-					}
+			// We have an embedded field. We "squash" the fields down
+			// if specified in the tag.
+			squash := false
+			tagParts := strings.Split(fieldType.Tag.Get(d.config.TagName), ",")
+			for _, tag := range tagParts[1:] {
+				if tag == "squash" {
+					squash = true
+					break
 				}
+			}
 
-				if squash {
-					structs = append(structs, val.FieldByName(fieldType.Name))
-					continue
-				}
+			if squash {
+				structs = append(structs, val.FieldByName(fieldType.Name))
+				continue
 			}
 
 			// Normal struct field, store it away
diff --git a/mapstructure_test.go b/mapstructure_test.go
index e1a47db..8a27647 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -17,6 +17,10 @@
 	Vdata   interface{}
 }
 
+type BasicSquash struct {
+	Test Basic `mapstructure:",squash"`
+}
+
 type Embedded struct {
 	Basic
 	Vunique string
@@ -181,6 +185,24 @@
 	}
 }
 
+func TestDecode_BasicSquash(t *testing.T) {
+	t.Parallel()
+
+	input := map[string]interface{}{
+		"vstring": "foo",
+	}
+
+	var result BasicSquash
+	err := Decode(input, &result)
+	if err != nil {
+		t.Fatalf("got an err: %s", err.Error())
+	}
+
+	if result.Test.Vstring != "foo" {
+		t.Errorf("vstring value should be 'foo': %#v", result.Test.Vstring)
+	}
+}
+
 func TestDecode_Embedded(t *testing.T) {
 	t.Parallel()