diff --git a/mapstructure.go b/mapstructure.go
index 1233c73..ec0941e 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -100,7 +100,28 @@
 
 func decodeSlice(name string, data interface{}, val reflect.Value) error {
 	dataVal := reflect.Indirect(reflect.ValueOf(data))
-	val.Set(dataVal)
+	valType := val.Type()
+	valElemType := valType.Elem()
+
+	// TODO: Error checking to make sure data is an array/slice type
+
+	// Make a new slice to hold our result, same size as the original data.
+	sliceType := reflect.SliceOf(valElemType)
+	valSlice := reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())
+
+	for i := 0; i < dataVal.Len(); i++ {
+		currentData := dataVal.Index(i).Interface()
+		currentField := valSlice.Index(i)
+
+		fieldName := fmt.Sprintf("%s[%d]", name, i)
+		if err := decode(fieldName, currentData, currentField); err != nil {
+			return err
+		}
+	}
+
+	// Finally, set the value to the slice we built up
+	val.Set(valSlice)
+
 	return nil
 }
 
diff --git a/mapstructure_test.go b/mapstructure_test.go
index 7070dd4..df98537 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -24,6 +24,10 @@
 	Vbar []string
 }
 
+type SliceOfStruct struct {
+	Value []Basic
+}
+
 func TestBasicTypes(t *testing.T) {
 	t.Parallel()
 
@@ -199,6 +203,37 @@
 	testSliceInput(t, inputStringSlicePointer, outputStringSlice)
 }
 
+func TestSliceOfStruct(t *testing.T) {
+	t.Parallel()
+
+	input := map[string]interface{}{
+		"value": []map[string]interface{}{
+			{"vstring": "one"},
+			{"vstring": "two"},
+		},
+	}
+
+	var result SliceOfStruct
+	err := Decode(input, &result)
+	if err != nil {
+		t.Errorf("got unexpected error: %s", err)
+		t.FailNow()
+	}
+
+	if len(result.Value) != 2 {
+		t.Errorf("expected two values, got %d", len(result.Value))
+		t.FailNow()
+	}
+
+	if result.Value[0].Vstring != "one" {
+		t.Errorf("first value should be 'one', got: %s", result.Value[0].Vstring)
+	}
+
+	if result.Value[1].Vstring != "two" {
+		t.Errorf("second value should be 'two', got: %s", result.Value[1].Vstring)
+	}
+}
+
 func TestInvalidType(t *testing.T) {
 	t.Parallel()
 
