diff --git a/viper.go b/viper.go
index a5a59f9..3be1c63 100644
--- a/viper.go
+++ b/viper.go
@@ -851,6 +851,7 @@ func (v *Viper) Sub(key string) *Viper {
 	if reflect.TypeOf(data).Kind() == reflect.Map {
 		subv.parents = append(v.parents, strings.ToLower(key))
 		subv.automaticEnvApplied = v.automaticEnvApplied
+		subv.envPrefix = v.envPrefix
 		subv.envKeyReplacer = v.envKeyReplacer
 		subv.config = cast.ToStringMap(data)
 		return subv
diff --git a/viper_test.go b/viper_test.go
index d278183..9ed4478 100644
--- a/viper_test.go
+++ b/viper_test.go
@@ -609,12 +609,17 @@ func TestEnvSubConfig(t *testing.T) {
 
 	v.AutomaticEnv()
 
-	replacer := strings.NewReplacer(".", "_")
-	v.SetEnvKeyReplacer(replacer)
+	v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
 
 	testutil.Setenv(t, "CLOTHING_PANTS_SIZE", "small")
 	subv := v.Sub("clothing").Sub("pants")
 	assert.Equal(t, "small", subv.Get("size"))
+
+	// again with EnvPrefix
+	v.SetEnvPrefix("foo") // will be uppercased automatically
+	subWithPrefix := v.Sub("clothing").Sub("pants")
+	testutil.Setenv(t, "FOO_CLOTHING_PANTS_SIZE", "large")
+	assert.Equal(t, "large", subWithPrefix.Get("size"))
 }
 
 func TestAllKeys(t *testing.T) {