diff --git a/examples/example2/pages/de.yaml b/examples/example2/pages/de.yaml
index 7b24b9611a52046c574472754890c12985dbb6f1..cb3ebe59bf8d3a132a835248399638c0433a78d1 100644
--- a/examples/example2/pages/de.yaml
+++ b/examples/example2/pages/de.yaml
@@ -53,27 +53,27 @@ test.html:
           id: date
         - text: Nutzername
           id: username
-        - text: Customer
+        - text: Kundin
           id: customer
-        - text: Stadt
+        - text: PLZ
           id: city
-        - text: Land
+        - text: Stadt
           id: country
-        - text: Straße
+        - text: Land
           id: street
-        - text: Zustand der Bestellung
+        - text: Straße
           id: order-state
-        - text: Workflow-Status
+        - text: Zustand der Bestellung
           id: workflow-state
-        - text: gesamt
+        - text: Workflow-Status
           id: total
-        - text: firma
+        - text: gesamt
           id: company
-        - text: Bestellnummer des Kanals
+        - text: firma
           id: channel-order-number
-        - text: Datum der erneuten Einreichung
+        - text: Bestellnummer des Kanals
           id: resubmission-date
-        - text: Art der Zahlung
+        - text: Datum der erneuten Einreichung
           id: payment-type
     translations:
         - id: the-translation
diff --git a/source/translate/main.go b/source/translate/main.go
index 5cd487a8a65ef20cefdb2f93590883fa2aca0411..436bd733968c8ef406b372ce7a2062780c76aeec 100644
--- a/source/translate/main.go
+++ b/source/translate/main.go
@@ -83,7 +83,9 @@ func Do(dataFile, api string, targetLanguages []string) {
 
 		for name, page := range pageTarget {
 
-			translatedPage := applyTranslations(*page, translationsByLang[lang])
+			origin := storage[name]
+
+			translatedPage := applyTranslations(*page, *origin, translationsByLang[lang])
 			// Optional: Sprache im PageData anpassen
 			translatedPage.Lang = lang
 
@@ -162,18 +164,23 @@ func collectUniqueTexts(storage *types.PageDataStorage) []string {
 }
 
 // applyTranslations nimmt die Originalstruktur und ersetzt alle übersetzbaren Felder durch die entsprechenden Übersetzungen.
-func applyTranslations(page types.PageData, translations map[string]string) types.PageData {
+func applyTranslations(page, origin types.PageData, translations map[string]string) types.PageData {
 	newPage := page
 
 	// PageData.Title
-	if t, ok := translations[page.Title]; ok {
+	originPageTitle := origin.Title
+
+	if t, ok := translations[originPageTitle]; ok {
 		newPage.Title = t
+	} else {
+		newPage.Title = originPageTitle
 	}
 
 	// PageData.Meta
 	newMeta := make(map[string]string)
 	for k, v := range page.Meta {
-		if t, ok := translations[v]; ok {
+		vv := origin.Meta[k]
+		if t, ok := translations[vv]; ok {
 			newMeta[k] = t
 		} else {
 			newMeta[k] = v
@@ -183,25 +190,41 @@ func applyTranslations(page types.PageData, translations map[string]string) type
 
 	// Text.Text
 	for i, t := range newPage.Text {
-		if tr, ok := translations[t.Text]; ok {
+		tt := origin.Text[i]
+		if tr, ok := translations[tt.Text]; ok {
 			newPage.Text[i].Text = tr
+		} else {
+			newPage.Text[i].Text = t.Text
 		}
 	}
 
 	// Images: Alt und Title
 	for i, img := range newPage.Images {
-		if tr, ok := translations[img.Alt]; ok {
+
+		imgOrigin := origin.Images[i]
+
+		if tr, ok := translations[imgOrigin.Alt]; ok {
 			newPage.Images[i].Alt = tr
+		} else {
+			newPage.Images[i].Alt = img.Alt
 		}
-		if tr, ok := translations[img.Title]; ok {
+
+		if tr, ok := translations[imgOrigin.Title]; ok {
 			newPage.Images[i].Title = tr
+		} else {
+			newPage.Images[i].Title = img.Title
 		}
 	}
 
 	// Anchors: Title
 	for i, anc := range newPage.Anchors {
-		if tr, ok := translations[anc.Title]; ok {
+
+		ancOrigin := origin.Anchors[i]
+
+		if tr, ok := translations[ancOrigin.Title]; ok {
 			newPage.Anchors[i].Title = tr
+		} else {
+			newPage.Anchors[i].Title = anc.Title
 		}
 	}
 
@@ -210,7 +233,13 @@ func applyTranslations(page types.PageData, translations map[string]string) type
 		newKV := make(map[string]interface{})
 		for k, v := range t.KeyValues {
 			if s, ok := v.(string); ok {
-				if tr, found := translations[s]; found {
+
+				originStr, ok := origin.Translations[i].KeyValues[k].(string)
+				if !ok {
+					originStr = s
+				}
+
+				if tr, found := translations[originStr]; found {
 					newKV[k] = tr
 				} else {
 					newKV[k] = s
@@ -219,6 +248,7 @@ func applyTranslations(page types.PageData, translations map[string]string) type
 				newKV[k] = v
 			}
 		}
+
 		newPage.Translations[i].KeyValues = newKV
 	}