diff --git a/decode.go b/decode.go
index cef8c3a..7364ccc 100644
--- a/decode.go
+++ b/decode.go
@@ -89,13 +89,49 @@
 //     Field map[string]string `properties:"myName"`
 func (p *Properties) Decode(x interface{}) error {
 	t, v := reflect.TypeOf(x), reflect.ValueOf(x)
-	if t.Kind() != reflect.Ptr || v.Elem().Type().Kind() != reflect.Struct {
-		return fmt.Errorf("not a pointer to struct: %s", t)
+
+	if isPtr(t) {
+		elemT := v.Elem().Type()
+		switch {
+		case isMap(elemT):
+			m, ok := x.(*map[string]interface{})
+			if !ok {
+				return fmt.Errorf("map type not map[string]interface {}", elemT)
+			}
+			for _, key := range p.Keys() {
+				value, _ := p.Get(key)
+				setNestedKey(*m, key, value)
+			}
+			return nil
+
+		case isStruct(elemT):
+			if err := dec(p, "", nil, nil, v); err != nil {
+				return err
+			}
+			return nil
+		}
 	}
-	if err := dec(p, "", nil, nil, v); err != nil {
-		return err
+
+	return fmt.Errorf("not a pointer to map or struct: %s", t)
+}
+
+func setNestedKey(m map[string]interface{}, key string, value interface{}) {
+	if strings.Contains(key, ".") {
+		kk := strings.SplitN(key, ".", 2)
+		prefix, rest := kk[0], kk[1]
+		if _, ok := m[prefix]; !ok {
+			m[prefix] = map[string]interface{}{}
+		}
+		setNestedKey(m[prefix].(map[string]interface{}), rest, value)
+	} else {
+		if reflect.TypeOf(value).Kind() == reflect.String {
+			val := value.(string)
+			if strings.Contains(val, ";") {
+				value = split(val, ";")
+			}
+		}
+		m[key] = value
 	}
-	return nil
 }
 
 func dec(p *Properties, key string, def *string, opts map[string]string, v reflect.Value) error {
diff --git a/decode_test.go b/decode_test.go
index 4115fbb..bd74f3b 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -273,6 +273,31 @@
 	testDecode(t, in, &X{}, out)
 }
 
+func TestDecodeToStringMap(t *testing.T) {
+	type S struct {
+		A string
+	}
+	X := make(map[string]interface{})
+	in := `
+	A.foo=bar
+	A.bar=bang
+	B.foo=a;b;c
+	B.bar=1;2;3
+	C.foo.one=1
+	C.foo.two=2
+	C.bar.three=3
+	C.bar.four=4
+	D.foo.a=bar
+	`
+	out := &map[string]interface{}{
+		"A": map[string]interface{}{"foo": "bar", "bar": "bang"},
+		"B": map[string]interface{}{"foo": []string{"a", "b", "c"}, "bar": []string{"1", "2", "3"}},
+		"C": map[string]interface{}{"foo": map[string]interface{}{"one": "1", "two": "2"}, "bar": map[string]interface{}{"three": "3", "four": "4"}},
+		"D": map[string]interface{}{"foo": map[string]interface{}{"a": "bar"}},
+	}
+	testDecode(t, in, &X, out)
+}
+
 func testDecode(t *testing.T, in string, v, out interface{}) {
 	p, err := parse(in)
 	if err != nil {
