diff --git a/mapstructure.go b/mapstructure.go
index a554e79..81b0c01 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -546,7 +546,12 @@
 	// into that. Then set the value of the pointer to this type.
 	valType := val.Type()
 	valElemType := valType.Elem()
-	realVal := reflect.New(valElemType)
+
+	realVal:=val
+	if realVal.IsNil() || d.config.ZeroFields {
+		realVal = reflect.New(valElemType)
+	}
+
 	if err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {
 		return err
 	}
@@ -562,20 +567,24 @@
 	valElemType := valType.Elem()
 	sliceType := reflect.SliceOf(valElemType)
 
-	// Check input type
-	if dataValKind != reflect.Array && dataValKind != reflect.Slice {
-		// Accept empty map instead of array/slice in weakly typed mode
-		if d.config.WeaklyTypedInput && dataVal.Kind() == reflect.Map && dataVal.Len() == 0 {
-			val.Set(reflect.MakeSlice(sliceType, 0, 0))
-			return nil
-		} else {
-			return fmt.Errorf(
-				"'%s': source data must be an array or slice, got %s", name, dataValKind)
-		}
-	}
+	valSlice:=val
+	if valSlice.IsNil() || d.config.ZeroFields {
 
-	// Make a new slice to hold our result, same size as the original data.
-	valSlice := reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())
+		// Check input type
+		if dataValKind != reflect.Array && dataValKind != reflect.Slice {
+			// Accept empty map instead of array/slice in weakly typed mode
+			if d.config.WeaklyTypedInput && dataVal.Kind() == reflect.Map && dataVal.Len() == 0 {
+				val.Set(reflect.MakeSlice(sliceType, 0, 0))
+				return nil
+			} else {
+				return fmt.Errorf(
+					"'%s': source data must be an array or slice, got %s", name, dataValKind)
+			}
+		}
+
+		// Make a new slice to hold our result, same size as the original data.
+		valSlice = reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())
+	}
 
 	// Accumulate any errors
 	errors := make([]string, 0)
diff --git a/mapstructure_bugs_test.go b/mapstructure_bugs_test.go
index c6b8697..2e210ca 100644
--- a/mapstructure_bugs_test.go
+++ b/mapstructure_bugs_test.go
@@ -46,6 +46,7 @@
 	}
 }
 
+// #48
 func TestNestedTypePointerWithDefaults(t *testing.T) {
 	t.Parallel()
 
@@ -90,12 +91,60 @@
 
 	// this is the error
 	if result.Vbar.Vuint != 42 {
-		t.Errorf("vuint value should be 42: %#v", result.Vbar.Vint)
+		t.Errorf("vuint value should be 42: %#v", result.Vbar.Vuint)
 	}
 
 }
 
 
+type NestedSlice struct {
+	Vfoo string
+	Vbars []Basic
+	Vempty []Basic
+}
+
+// #48
+func TestNestedTypeSliceWithDefaults(t *testing.T) {
+	t.Parallel()
+
+	input := map[string]interface{}{
+		"vfoo": "foo",
+		"vbars": []map[string]interface{}{
+			{ "vstring": "foo", "vint":    42, "vbool":   true },
+			{ "vint":    42, "vbool":   true },
+		},
+		"vempty": []map[string]interface{}{
+			{ "vstring": "foo", "vint":    42, "vbool":   true },
+			{ "vint":    42, "vbool":   true },
+		},
+	}
+
+	result:=NestedSlice{
+		Vbars: []Basic{
+			{Vuint: 42},
+			{Vstring: "foo"},
+		},
+	}
+	err := Decode(input, &result)
+	if err != nil {
+		t.Fatalf("got an err: %s", err.Error())
+	}
+
+	if result.Vfoo != "foo" {
+		t.Errorf("vfoo value should be 'foo': %#v", result.Vfoo)
+	}
+
+	if result.Vbars[0].Vstring != "foo" {
+		t.Errorf("vstring value should be 'foo': %#v", result.Vbars[0].Vstring)
+	}
+	// this is the error
+	if result.Vbars[0].Vuint != 42 {
+		t.Errorf("vuint value should be 42: %#v", result.Vbars[0].Vuint)
+	}
+
+}
+
+// #48 workaround
 func TestNestedTypeWithDefaults(t *testing.T) {
 	t.Parallel()
 
@@ -140,7 +189,7 @@
 
 	// this is the error
 	if result.Vbar.Vuint != 42 {
-		t.Errorf("vuint value should be 42: %#v", result.Vbar.Vint)
+		t.Errorf("vuint value should be 42: %#v", result.Vbar.Vuint)
 	}
 
 }
\ No newline at end of file
