diff --git a/mapstructure.go b/mapstructure.go
index 536e8c2..1233c73 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -51,6 +51,8 @@
 		return decodeStruct(name, data, val)
 	case reflect.Map:
 		return decodeMap(name, data, val)
+	case reflect.Slice:
+		return decodeSlice(name, data, val)
 	}
 
 	// If we reached this point then we weren't able to decode it
@@ -96,6 +98,12 @@
 	return nil
 }
 
+func decodeSlice(name string, data interface{}, val reflect.Value) error {
+	dataVal := reflect.Indirect(reflect.ValueOf(data))
+	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 d87d151..7070dd4 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -19,6 +19,11 @@
 	Vbar Basic
 }
 
+type Slice struct {
+	Vfoo string
+	Vbar []string
+}
+
 func TestBasicTypes(t *testing.T) {
 	t.Parallel()
 
@@ -172,6 +177,28 @@
 	}
 }
 
+func TestSlice(t *testing.T) {
+	t.Parallel()
+
+	inputStringSlice := map[string]interface{}{
+		"vfoo": "foo",
+		"vbar": []string{"foo", "bar", "baz"},
+	}
+
+	inputStringSlicePointer := map[string]interface{}{
+		"vfoo": "foo",
+		"vbar": &[]string{"foo", "bar", "baz"},
+	}
+
+	outputStringSlice := &Slice{
+		"foo",
+		[]string{"foo", "bar", "baz"},
+	}
+
+	testSliceInput(t, inputStringSlice, outputStringSlice)
+	testSliceInput(t, inputStringSlicePointer, outputStringSlice)
+}
+
 func TestInvalidType(t *testing.T) {
 	t.Parallel()
 
@@ -219,3 +246,33 @@
 		t.Errorf("got unexpected error: %s", err)
 	}
 }
+
+func testSliceInput(t *testing.T, input map[string]interface{}, expected *Slice) {
+	var result Slice
+	err := Decode(input, &result)
+	if err != nil {
+		t.Errorf("got error: %s", err)
+		t.FailNow()
+	}
+
+	if result.Vfoo != expected.Vfoo {
+		t.Errorf("Vfoo expected '%s', got '%s'", expected.Vfoo, result.Vfoo)
+	}
+
+	if result.Vbar == nil {
+		t.Errorf("Vbar a slice, got '%#v'", result.Vbar)
+		t.FailNow()
+	}
+
+	if len(result.Vbar) != len(expected.Vbar) {
+		t.Errorf("Vbar length should be %d, got %d", len(expected.Vbar), len(result.Vbar))
+	}
+
+	for i, v := range result.Vbar {
+		if v != expected.Vbar[i] {
+			t.Errorf(
+				"Vbar[%d] should be '%#v', got '%#v'",
+				i, expected.Vbar[i], v)
+		}
+	}
+}
