Decode pointers
diff --git a/mapstructure.go b/mapstructure.go
index 1e17e76..cdd87c0 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -182,6 +182,8 @@
 		err = d.decodeStruct(name, data, val)
 	case reflect.Map:
 		err = d.decodeMap(name, data, val)
+	case reflect.Ptr:
+		err = d.decodePtr(name, data, val)
 	case reflect.Slice:
 		err = d.decodeSlice(name, data, val)
 	default:
@@ -444,6 +446,20 @@
 	return nil
 }
 
+func (d *Decoder) decodePtr(name string, data interface{}, val reflect.Value) error {
+	// Create an element of the concrete (non pointer) type and decode
+	// into that. Then set the value of the pointer to this type.
+	valType := val.Type()
+	valElemType := valType.Elem()
+	realVal := reflect.New(valElemType)
+	if err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {
+		return err
+	}
+
+	val.Set(realVal)
+	return nil
+}
+
 func (d *Decoder) decodeSlice(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 8d86099..6b83c66 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -46,6 +46,11 @@
 	Vbar Basic
 }
 
+type NestedPointer struct {
+	Vfoo string
+	Vbar *Basic
+}
+
 type Slice struct {
 	Vfoo string
 	Vbar []string
@@ -536,7 +541,7 @@
 		},
 	}
 
-	var result Nested
+	var result NestedPointer
 	err := Decode(input, &result)
 	if err != nil {
 		t.Fatalf("got an err: %s", err.Error())