diff --git a/mapstructure.go b/mapstructure.go
index eda04fd..536e8c2 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -49,6 +49,8 @@
 		return decodeBasic(name, data, val)
 	case reflect.Struct:
 		return decodeStruct(name, data, val)
+	case reflect.Map:
+		return decodeMap(name, data, val)
 	}
 
 	// If we reached this point then we weren't able to decode it
@@ -75,6 +77,25 @@
 	return nil
 }
 
+func decodeMap(name string, data interface{}, val reflect.Value) error {
+	dataVal := reflect.Indirect(reflect.ValueOf(data))
+	if dataVal.Kind() != reflect.Map {
+		return fmt.Errorf("'%s' expected a map, got '%s'", name, dataVal.Kind())
+	}
+
+	dataValType := dataVal.Type()
+	if dataValType.Key().Kind() != reflect.String {
+		return fmt.Errorf(
+			"'%s' needs a map with string keys, has '%s' keys",
+			name, dataValType.Key().Kind())
+	}
+
+	// Just go ahead and set one map to the other...
+	val.Set(dataVal)
+
+	return nil
+}
+
 func decodeStruct(name string, data interface{}, val reflect.Value) error {
 	dataVal := reflect.Indirect(reflect.ValueOf(data))
 	dataValKind := dataVal.Kind()
diff --git a/mapstructure_test.go b/mapstructure_test.go
index f420fc5..d87d151 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -9,6 +9,11 @@
 	Vextra  string
 }
 
+type Map struct {
+	Vfoo   string
+	Vother map[string]interface{}
+}
+
 type Nested struct {
 	Vfoo string
 	Vbar Basic
@@ -47,6 +52,46 @@
 	}
 }
 
+func TestMap(t *testing.T) {
+	t.Parallel()
+
+	input := map[string]interface{}{
+		"vfoo": "foo",
+		"vother": map[string]interface{}{
+			"foo": 42,
+			"bar": true,
+		},
+	}
+
+	var result Map
+	err := Decode(input, &result)
+	if err != nil {
+		t.Errorf("got an error: %s", err)
+		t.FailNow()
+	}
+
+	if result.Vfoo != "foo" {
+		t.Errorf("vfoo value should be 'foo': %#v", result.Vfoo)
+	}
+
+	if result.Vother == nil {
+		t.Error("vother should not be nil")
+		t.FailNow()
+	}
+
+	if len(result.Vother) != 2 {
+		t.Error("vother should have two items")
+	}
+
+	if result.Vother["foo"].(int) != 42 {
+		t.Errorf("'foo' key should be 42, got: %#v", result.Vother["foo"])
+	}
+
+	if result.Vother["bar"].(bool) != true {
+		t.Errorf("'bar' key should be true, got: %#v", result.Vother["bar"])
+	}
+}
+
 func TestNestedType(t *testing.T) {
 	t.Parallel()
 
