Parse json, where the modifying part is in "query".
diff --git a/mapper/mapper_test.go b/mapper/mapper_test.go
index c84b7a2..74696ec 100644
--- a/mapper/mapper_test.go
+++ b/mapper/mapper_test.go
@@ -204,7 +204,7 @@
 			require.NoError(t, err)
 
 			// Apply mappings
-			result, err := m.ApplyMappings(tt.mappingID, tt.opts, inputData)
+			result, err := m.ApplyQueryMappings(tt.mappingID, tt.opts, inputData)
 			if tt.expectError {
 				assert.Error(t, err)
 				return
@@ -354,7 +354,7 @@
 			err := json.Unmarshal([]byte(tt.input), &inputData)
 			require.NoError(t, err)
 
-			result, err := m.ApplyMappings("test-mapper", MappingOptions{Direction: AtoB}, inputData)
+			result, err := m.ApplyQueryMappings("test-mapper", MappingOptions{Direction: AtoB}, inputData)
 			if tt.expectError {
 				assert.Error(t, err)
 				assert.Equal(t, tt.errorMsg, err.Error())
@@ -366,3 +366,170 @@
 		})
 	}
 }
+
+func TestQueryWrapperMappings(t *testing.T) {
+
+	mappingList := config.MappingList{
+		ID:       "test-wrapper",
+		FoundryA: "opennlp",
+		LayerA:   "orth",
+		FoundryB: "upos",
+		LayerB:   "orth",
+		Mappings: []config.MappingRule{
+			"[opennlp/orth=Baum] <> [opennlp/orth=X]",
+		},
+	}
+
+	// Create a new mapper
+	m, err := NewMapper([]config.MappingList{mappingList})
+	require.NoError(t, err)
+
+	tests := []struct {
+		name        string
+		mappingID   string
+		opts        MappingOptions
+		input       string
+		expected    string
+		expectError bool
+	}{
+		{
+			name:      "Query wrapper case",
+			mappingID: "test-wrapper",
+			opts: MappingOptions{
+				Direction: AtoB,
+			},
+			input: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"collection": {
+					"@type": "koral:doc",
+					"key": "availability",
+					"match": "match:eq",
+					"rewrites": [
+						{
+							"@type": "koral:rewrite",
+							"_comment": "Free corpus access policy has been added.",
+							"editor": "Kustvakt",
+							"operation": "operation:injection",
+							"src": "Kustvakt"
+						}
+					],
+					"type": "type:regex",
+					"value": "CC.*"
+				},
+				"query": {
+					"@type": "koral:token",
+					"wrap": {
+						"@type": "koral:term",
+						"foundry": "opennlp",
+						"key": "Baum",
+						"layer": "orth",
+						"match": "match:eq"
+					}
+				}
+			}`,
+			expected: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"collection": {
+					"@type": "koral:doc",
+					"key": "availability",
+					"match": "match:eq",
+					"rewrites": [
+						{
+							"@type": "koral:rewrite",
+							"_comment": "Free corpus access policy has been added.",
+							"editor": "Kustvakt",
+							"operation": "operation:injection",
+							"src": "Kustvakt"
+						}
+					],
+					"type": "type:regex",
+					"value": "CC.*"
+				},
+				"query": {
+					"@type": "koral:token",
+					"wrap": {
+						"@type": "koral:term",
+						"foundry": "opennlp",
+						"key": "X",
+						"layer": "orth",
+						"match": "match:eq"
+					}
+				}
+			}`,
+		},
+		{
+			name:      "Empty query field",
+			mappingID: "test-wrapper",
+			opts: MappingOptions{
+				Direction: AtoB,
+			},
+			input: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"query": null
+			}`,
+			expected: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"query": null
+			}`,
+		},
+		{
+			name:      "Missing query field",
+			mappingID: "test-wrapper",
+			opts: MappingOptions{
+				Direction: AtoB,
+			},
+			input: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"collection": {
+					"@type": "koral:doc"
+				}
+			}`,
+			expected: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"collection": {
+					"@type": "koral:doc"
+				}
+			}`,
+		},
+		{
+			name:      "Query field with non-object value",
+			mappingID: "test-wrapper",
+			opts: MappingOptions{
+				Direction: AtoB,
+			},
+			input: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"query": "invalid"
+			}`,
+			expected: `{
+				"@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+				"query": "invalid"
+			}`,
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			// Parse input JSON
+			var inputData interface{}
+			err := json.Unmarshal([]byte(tt.input), &inputData)
+			require.NoError(t, err)
+
+			// Apply mappings
+			result, err := m.ApplyQueryMappings(tt.mappingID, tt.opts, inputData)
+			if tt.expectError {
+				assert.Error(t, err)
+				return
+			}
+			require.NoError(t, err)
+
+			// Parse expected JSON
+			var expectedData interface{}
+			err = json.Unmarshal([]byte(tt.expected), &expectedData)
+			require.NoError(t, err)
+
+			// Compare results
+			assert.Equal(t, expectedData, result)
+		})
+	}
+}