diff --git a/env.go b/env.go
index 72719309da177bbef851ba3a6bb24bf4ae949db4..050a92092307a970a1cfe688843514824c261918 100644
--- a/env.go
+++ b/env.go
@@ -7,6 +7,7 @@ import (
 	"os"
 	"reflect"
 	"strconv"
+	"strings"
 )
 
 func (s *Settings[C]) InitFromEnv(prefix string) *Settings[C] {
@@ -21,12 +22,18 @@ func (s *Settings[C]) InitFromEnv(prefix string) *Settings[C] {
 		}
 	}()
 
+	if prefix != "" {
+		prefix = strings.ToUpper(prefix) + "_"
+	}
+
 	err := runOnTags(&s.config, []string{envTagKey}, func(k string, field reflect.Value) {
 
 		if !field.CanSet() {
 			return
 		}
 
+		k = prefix + strings.ToUpper(k)
+
 		v, found := os.LookupEnv(k)
 		if !found {
 			return // env not found
diff --git a/env_test.go b/env_test.go
index 99ef4b4f0f23846ded5139cc5e318686d604b065..d85d37288f03b3e9e0d59250845b79e25501fc8c 100644
--- a/env_test.go
+++ b/env_test.go
@@ -20,6 +20,7 @@ func TestReadmeExample2(t *testing.T) {
 
 	// Set value
 	os.Setenv("HOST", "www.example.com")
+	defer os.Unsetenv("HOST")
 
 	s := New(config)
 	//fmt.Println(s.Config().Host) // localhost
@@ -31,6 +32,27 @@ func TestReadmeExample2(t *testing.T) {
 
 }
 
+func TestWithPrefix(t *testing.T) {
+	config := struct {
+		Host string `env:"HOST"`
+	}{
+		Host: "localhost",
+	}
+
+	// Set value
+	os.Setenv("XYZ_HOST", "www.example.com")
+	defer os.Unsetenv("XYZ_HOST")
+
+	s := New(config)
+	//fmt.Println(s.Config().Host) // localhost
+	assert.Equal(t, s.Config().Host, "localhost")
+
+	s.InitFromEnv("XYZ") // no prefix
+	//fmt.Println(s.Config().Host) // www.example.com
+	assert.Equal(t, s.Config().Host, "www.example.com")
+
+}
+
 func TestFromEnvNotSet(t *testing.T) {
 	config := ConfigStruct6{
 		IA: 1234,
@@ -43,6 +65,7 @@ func TestFromEnvNotSet(t *testing.T) {
 
 	// Value not set
 	s.InitFromEnv("VALUE_IB")
+	defer os.Unsetenv("VALUE_IB")
 
 	if s.Config().IA != 1234 {
 		t.Errorf("Expected 1234, got %d", s.Config().IA)
@@ -61,7 +84,7 @@ func TestFromEnv(t *testing.T) {
 	s := New(config)
 
 	// Value not set
-	s.InitFromEnv("VALUE_IB")
+	s.InitFromEnv("NIX")
 
 	if s.Config().IA != 1234 {
 		t.Errorf("Expected 1234, got %d", s.Config().IA)
@@ -69,7 +92,8 @@ func TestFromEnv(t *testing.T) {
 
 	// Set value
 	os.Setenv("VALUE_IB", "i-am-b")
-	s.InitFromEnv("VALUE_IB")
+	defer os.Unsetenv("VALUE_IB")
+	s.InitFromEnv("")
 
 	if s.Config().IB != "i-am-b" {
 		t.Errorf("Expected i-am-b, got %s", s.Config().IB)