diff --git a/Changes b/Changes
index 8c3e963..467c752 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
 0.63.1 2024-06-24
     - [feature] Add fields array to matches in search responses (diewald)
+    - [feature] Temporarily add all requested fields in flat legacy fields
+      maps (diewald)
 
 0.63.0 2024-06-24
     - [bugfix] Show all inline markers and pagebreaks at match borders (diewald).
diff --git a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
index 207a9cb..2979822 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -361,7 +361,9 @@
         return this.getFieldValue("ID");
     };
 
-    @JsonAnyGetter
+    //@JsonAnyGetter
+    @Deprecated
+    @JsonIgnore
     public Map<String, JsonNode> getLegacyMetaFields () {
 
         Iterator<MetaField> mfIterator = mFields.iterator();
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index 1eceb5a..c5ab6ab 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -26,6 +26,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.node.TextNode;
 
 import de.ids_mannheim.korap.index.AbstractDocument;
 import de.ids_mannheim.korap.index.PositionsToOffset;
@@ -2489,7 +2490,15 @@
 		while (fIter.hasNext()) {
             MetaField mf = fIter.next();
             fields.add(mf.toJsonNode());
+
+            // Legacy flat field support
+            String mfs = mf.key;
+            String value = this.getFieldValue(mfs);
+            if (value != null)
+                json.set(mfs, new TextNode(value));
 		};
+
+        this.addMessage(0, "Support for flat field values is eprecated");
         
         return json;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/response/Text.java b/src/main/java/de/ids_mannheim/korap/response/Text.java
index 2cf3e6d..68dab3c 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Text.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Text.java
@@ -8,6 +8,9 @@
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.TextNode;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -39,8 +42,26 @@
 
 
     public String toJsonString () {
-        JsonNode json = (JsonNode) this.toJsonNode();
+        ObjectNode json = (ObjectNode) this.toJsonNode();
 
+		ArrayNode fields = json.putArray("fields");
+       
+		// Iterate over all fields
+		Iterator<MetaField> fIter = mFields.iterator();
+		while (fIter.hasNext()) {
+            MetaField mf = fIter.next();
+            fields.add(mf.toJsonNode());
+
+            // Legacy flat field support
+            String mfs = mf.key;
+            String value = this.getFieldValue(mfs);
+            if (value != null)
+                json.set(mfs, new TextNode(value));
+		};
+
+        this.addMessage(0, "Support for flat field values is eprecated");
+
+        
         // Match was no match
         if (json.size() == 0)
             return "{}";
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index 353d428..bbf1b3e 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -262,8 +262,7 @@
         assertEquals(0, res.at("/matches/0/UID").asInt());
         assertEquals("KED/KLX/03212", res.at("/matches/0/textSigle").asText());
         assertTrue(res.at("/matches/0/title").isMissingNode());
-        // assertEquals("data:,Kinder", res.at("/matches/0/KED.corpusRcpntLabel").asText());
-        assertTrue(res.at("/matches/0/KED.corpusRcpntLabel").isMissingNode());
+        assertEquals("data:,Kinder", res.at("/matches/0/KED.corpusRcpntLabel").asText());
         assertFalse(res.at("/matches/0/fields").isMissingNode());
 
         Iterator fieldIter = res.at("/matches/0/fields").elements();
