diff --git a/issue_7_test.go b/issue_7_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..20c31d39328c8798c73b74343a645bebfb6762d0
--- /dev/null
+++ b/issue_7_test.go
@@ -0,0 +1,40 @@
+package pathfinder
+
+import (
+	"testing"
+)
+
+//// Ihre Fehlerdefinitionen
+//func newInvalidPathError(path string) error {
+//	return fmt.Errorf("invalid path: %s", path)
+//}
+//
+//func newCannotSetError(path string) error {
+//	return fmt.Errorf("cannot set: %s", path)
+//}
+
+// ... weitere Fehlerdefinitionen
+
+// Test für SetValue
+func TestSetValue(t *testing.T) {
+	type Inner struct {
+		Field PathValue
+	}
+	type Outer struct {
+		InnerField *Inner
+	}
+	obj := &Outer{
+		InnerField: &Inner{
+			Field: "oldValue",
+		},
+	}
+
+	err := SetValue(obj, "InnerField.Field", PathValue("newValue"))
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+
+	if obj.InnerField.Field != "newValue" {
+		t.Fatalf("expected newValue, got: %s", obj.InnerField.Field)
+	}
+}
diff --git a/set.go b/set.go
index f4face6853abdbd8d23ca9e5de3201ff9f3eb55a..1c2babb1eca4db438c852ce643926da170b51861 100644
--- a/set.go
+++ b/set.go
@@ -34,7 +34,7 @@ func SetValue[D any](obj D, keyWithDots string, newValue any) error {
 	for keyIndex, key := range keySlice[0 : len(keySlice)-1] {
 
 		if v.Kind() == reflect.Map {
-			
+
 			if v.IsNil() {
 				return newInvalidPathError(keyWithDots)
 			}
@@ -160,8 +160,22 @@ func SetValue[D any](obj D, keyWithDots string, newValue any) error {
 
 	switch v.Kind() {
 	case reflect.String:
-		if newValueKind == reflect.String {
-			v.SetString(newValue.(string))
+		if v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface {
+			if v.Elem().CanSet() && v.Elem().Kind() == reflect.String {
+				if newValueKind == reflect.String {
+					v.Elem().SetString(newValue.(string))
+				} else {
+					v.Elem().SetString(fmt.Sprintf("%v", newValue))
+				}
+			}
+		} else if newValueKind == reflect.String {
+
+			if reflect.TypeOf(newValue).ConvertibleTo(reflect.TypeOf("")) {
+				newValueString := reflect.ValueOf(newValue).Convert(reflect.TypeOf("")).Interface().(string)
+				v.SetString(newValueString)
+			} else {
+				return newUnsupportedTypePathError(keyWithDots, v.Type())
+			}
 		} else {
 			v.SetString(fmt.Sprintf("%v", newValue))
 		}