diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
index 2931ad4..bcd51de 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
@@ -133,7 +133,8 @@
 		}
 		
 		System.out.println("Processing Cosmas");
-		QueryUtils.prepareContext(requestMap);
+		requestMap.put("context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
+//		QueryUtils.prepareContext(requestMap);
 		processNode(tree);
 	}
 	
@@ -177,8 +178,8 @@
 					if (hasSequentiableSiblings) {
 						// Step I: create sequence
 						LinkedHashMap<String, Object> sequence = new LinkedHashMap<String, Object>();
-						sequence.put("type", "group");
-						sequence.put("operation", "sequence");
+						sequence.put("@type", "korap:group");
+						sequence.put("operation", "operation:"+ "sequence");
 						sequence.put("operands", new ArrayList<Object>());
 						// push sequence on object stack but don't increment stackedObjects counter since
 						// we've got to wait until the parent node is processed - therefore, add the parent
@@ -198,13 +199,13 @@
 			
 			//Step I: get info
 			LinkedHashMap<String, Object> token = new LinkedHashMap<String, Object>();
-			token.put("type", "token");
+			token.put("@type", "korap:token");
 			objectStack.push(token);
 			stackedObjects++;
 			LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
-			token.put("key", fieldMap);
+			token.put("wrap", fieldMap);
 			
-			fieldMap.put("type", "term");			
+			fieldMap.put("@type", "korap:term");			
 			// make category-specific fieldMap entry
 			String attr = nodeCat.equals("OPWF") ? "orth" : "lemma";
 			String value = node.getChild(0).toStringTree().replaceAll("\"", "");
@@ -224,11 +225,11 @@
 		if (nodeCat.equals("OPMORPH")) {
 			//Step I: get info
 			LinkedHashMap<String, Object> token = new LinkedHashMap<String, Object>();
-			token.put("type", "token");
+			token.put("@type", "korap:token");
 			LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
-			token.put("key", fieldMap);
+			token.put("wrap", fieldMap);
 			
-			fieldMap.put("type", "term");
+			fieldMap.put("@type", "korap:term");
 //			fieldMap.put("key", "morph:"+node.getChild(0).toString().replace(" ", "_"));
 			fieldMap.put("key", node.getChild(0).toString().replace(" ", "_"));
 			// make category-specific fieldMap entry
@@ -244,34 +245,34 @@
 //				LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
 //				token.put("key", fieldMap);
 //				
-//				fieldMap.put("type", "term");
+//				fieldMap.put("@type", "korap:term");
 //				fieldMap.put("key", morphValues.get(0));
 //				// make category-specific fieldMap entry
 //				// negate field (see above)
 //				if (negate) {
-//					fieldMap.put("operation", "!=");
+//					fieldMap.put("operation", "operation:"+ "!=");
 //				} else {
-//					fieldMap.put("operation", "=");
+//					fieldMap.put("operation", "operation:"+ "=");
 //				}
 //			} else {
 //				LinkedHashMap<String, Object> conjGroup = new LinkedHashMap<String, Object>();
 //				token.put("key", conjGroup);
 //				ArrayList<Object> conjOperands = new ArrayList<Object>();
-//				conjGroup.put("type", "group");
-//				conjGroup.put("operation", "and");
+//				conjGroup.put("@type", "korap:group");
+//				conjGroup.put("operation", "operation:"+ "and");
 //				conjGroup.put("operands", conjOperands);
 //				for (String value : morphValues) {
 //					LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
 //					token.put("key", fieldMap);
 //					
-//					fieldMap.put("type", "term");
+//					fieldMap.put("@type", "korap:term");
 //					fieldMap.put("key", value);
 //					// make category-specific fieldMap entry
 //					// negate field (see above)
 //					if (negate) {
-//						fieldMap.put("operation", "!=");
+//						fieldMap.put("operation", "operation:"+ "!=");
 //					} else {
-//						fieldMap.put("operation", "=");
+//						fieldMap.put("operation", "operation:"+ "=");
 //					}
 //				}
 //			}
@@ -284,7 +285,7 @@
 		if (nodeCat.equals("OPELEM")) {
 			// Step I: create element
 			LinkedHashMap<String, Object> elem = new LinkedHashMap<String, Object>();
-			elem.put("type", "span");
+			elem.put("@type", "korap:span");
 			elem.put("key", node.getChild(0).getChild(0).toStringTree().toLowerCase());
 			//Step II: decide where to put
 			putIntoSuperObject(elem);
@@ -293,7 +294,7 @@
 		if (nodeCat.equals("OPLABEL")) {
 			// Step I: create element
 			LinkedHashMap<String, Object> elem = new LinkedHashMap<String, Object>();
-			elem.put("type", "span");
+			elem.put("@type", "korap:span");
 			elem.put("key", node.getChild(0).toStringTree().replaceAll("<|>", ""));
 			//Step II: decide where to put
 			putIntoSuperObject(elem);
@@ -302,11 +303,11 @@
 		if (nodeCat.equals("OPOR") || nodeCat.equals("OPAND") || nodeCat.equals("OPNOT")) {
 			// Step I: create group
 			LinkedHashMap<String, Object> disjunction = new LinkedHashMap<String, Object>();
-			disjunction.put("type", "group");
+			disjunction.put("@type", "korap:group");
 			String relation = "or";
 			if (nodeCat.equals("OPAND")) relation = "and";
 			if (nodeCat.equals("OPNOT")) relation = "not";
-			disjunction.put("operation", relation);
+			disjunction.put("operation", "operation:"+ relation);
 			disjunction.put("operands", new ArrayList<Object>());
 			objectStack.push(disjunction);
 			stackedObjects++;
@@ -322,8 +323,8 @@
 			Tree dist_list = prox_opts.getChild(1);
 			// Step I: create group
 			LinkedHashMap<String, Object> proxSequence = new LinkedHashMap<String, Object>();
-			proxSequence.put("type", "group");
-			proxSequence.put("operation", "sequence");
+			proxSequence.put("@type", "korap:group");
+			proxSequence.put("operation", "operation:"+ "sequence");
 			objectStack.push(proxSequence);
 			stackedObjects++;
 //			if (openNodeCats.get(1).equals("OPALL")) proxSequence.put("match", "all");
@@ -332,7 +333,7 @@
 			ArrayList<Object> constraints = new ArrayList<Object>();
 			boolean exclusion = ! typ.getChild(0).toStringTree().equals("PROX"); 
 			
-			String inOrder = "true";
+			boolean inOrder = true;
 			proxSequence.put("inOrder", inOrder);
 			proxSequence.put("distances", constraints);
 			
@@ -352,11 +353,11 @@
 					direction = "plus";
 					invertedOperandsLists.add(operands);
 				} else if (direction.equals("both")) {
-					inOrder="false";
+					inOrder=false;
 				}
 				LinkedHashMap<String, Object> distance = new LinkedHashMap<String, Object>();
-				distance.put("type", "distance");
-				distance.put("measure", meas);
+				distance.put("@type", "korap:distance");
+				distance.put("key", meas);
 				distance.put("min", Integer.parseInt(min));
 				distance.put("max", Integer.parseInt(max));
 				if (exclusion) {
@@ -370,8 +371,8 @@
 			else {
 				LinkedHashMap<String, Object> distanceGroup = new LinkedHashMap<String, Object>();
 				ArrayList<Object> groupOperands = new ArrayList<Object>();
-				distanceGroup.put("type", "group");
-				distanceGroup.put("operation", "and");
+				distanceGroup.put("@type", "korap:group");
+				distanceGroup.put("operation", "operation:"+ "and");
 				distanceGroup.put("operands", groupOperands);
 				constraints.add(distanceGroup);
 				for (int i=0; i<dist_list.getChildCount(); i++) {
@@ -383,18 +384,18 @@
 						min=max;
 					}
 					LinkedHashMap<String, Object> distance = new LinkedHashMap<String, Object>();
-					distance.put("type", "distance");
-					distance.put("measure", meas);
-					distance.put("min", min);
-					distance.put("max", max);
+					distance.put("@type", "korap:distance");
+					distance.put("key", meas);
+					distance.put("min", Integer.parseInt(min));
+					distance.put("max", Integer.parseInt(max));
 					if (exclusion) {
 						distance.put("exclude", exclusion);
 					}
 					groupOperands.add(distance);
 					if (direction.equals("plus")) {
-						inOrder="true";
+						inOrder=true;
 					} else if (direction.equals("minus")) {
-						inOrder="true";
+						inOrder=true;
 						invertedOperandsLists.add(operands);
 					}
 				}
@@ -408,17 +409,19 @@
 		if (nodeCat.equals("OPIN") || nodeCat.equals("OPOV")) {
 			// Step I: create group
 			LinkedHashMap<String, Object> submatchgroup = new LinkedHashMap<String, Object>();
-			submatchgroup.put("type", "group");
-			submatchgroup.put("operation", "submatch");
-			submatchgroup.put("classRef", "1");
+			submatchgroup.put("@type", "korap:group");
+			submatchgroup.put("operation", "operation:"+ "submatch");
+			ArrayList<Integer> classRef = new ArrayList<Integer>();
+			classRef.add(1);
+			submatchgroup.put("classRef", classRef);
 			
 			ArrayList<Object> submatchoperands = new ArrayList<Object>(); 
 			LinkedHashMap<String, Object> posgroup = new LinkedHashMap<String, Object>();
 			submatchgroup.put("operands", submatchoperands);
 			submatchoperands.add(posgroup);
-			posgroup.put("type", "group");
+			posgroup.put("@type", "korap:group");
 //			String relation = nodeCat.equals("OPIN") ? "position" : "overlaps";
-			posgroup.put("operation", "position");
+			posgroup.put("operation", "operation:"+ "position");
 			if (nodeCat.equals("OPIN")) {
 				parseOPINOptions(node, posgroup);
 			} else {
@@ -439,9 +442,9 @@
 		if (nodeCat.equals("ARG1") && (openNodeCats.get(1).equals("OPIN") || openNodeCats.get(1).equals("OPOV"))) {
 			// Step I: create group
 			LinkedHashMap<String, Object> classGroup = new LinkedHashMap<String, Object>();
-			classGroup.put("type", "group");
-			classGroup.put("operation", "class");
-			classGroup.put("class", "1");
+			classGroup.put("@type", "korap:group");
+			classGroup.put("operation", "operation:"+ "class");
+			classGroup.put("class", 1);
 			classGroup.put("operands", new ArrayList<Object>());
 			objectStack.push(classGroup);
 			stackedObjects++;
@@ -453,13 +456,13 @@
 		if (nodeCat.equals("OPNHIT")) {
 //			proxGroupMatching = nodeCat.equals("OPALL") ? "all" : "exclude";
 			LinkedHashMap<String, Object> exclGroup = new LinkedHashMap<String, Object>();
-			exclGroup.put("type", "group");
-			exclGroup.put("operation", "shrink");
+			exclGroup.put("@type", "korap:group");
+			exclGroup.put("operation", "operation:"+ "shrink");
 			ArrayList<Integer> classRef = new ArrayList<Integer>();
 			classRef.add(1);
 			classRef.add(2);
 			exclGroup.put("classRef", classRef);
-			exclGroup.put("classRefOp", "intersection");
+			exclGroup.put("classRefOp", "classRefOp:"+"intersection");
 			ArrayList<Object> operands = new ArrayList<Object>();
 			exclGroup.put("operands", operands);
 			objectStack.push(exclGroup);
@@ -470,8 +473,8 @@
 		if (nodeCat.equals("OPEND") || nodeCat.equals("OPBEG")) {
 			// Step I: create group
 			LinkedHashMap<String, Object> beggroup = new LinkedHashMap<String, Object>();
-			beggroup.put("type", "group");
-			beggroup.put("operation", "submatch");
+			beggroup.put("@type", "korap:group");
+			beggroup.put("operation", "operation:"+ "submatch");
 			ArrayList<Integer> spanRef = new ArrayList<Integer>();
 			if (nodeCat.equals("OPBEG")) {
 				spanRef.add(0); spanRef.add(1);
@@ -494,16 +497,16 @@
 			// Distinguish two cases. Normal case: query has just one condition, like #BED(XY, sa) ...
 			if (conditions.getChildCount()==1) {
 				LinkedHashMap<String, Object> posgroup = new LinkedHashMap<String, Object>();
-				posgroup.put("type", "group");
-				posgroup.put("operation", "position");
+				posgroup.put("@type", "korap:group");
+				posgroup.put("operation", "operation:"+ "position");
 				CosmasCondition c = new CosmasCondition(conditions.getChild(0));
-				posgroup.put("frame", c.position);
-				if (c.negated) posgroup.put("operation", "!=");
+				posgroup.put("frame", "frame:"+c.position);
+				if (c.negated) posgroup.put("operation", "operation:"+ "!=");
 				ArrayList<Object> operands = new ArrayList<Object>();
 				posgroup.put("operands", operands);
 				LinkedHashMap<String, Object> bedElem = new LinkedHashMap<String, Object>();
 				operands.add(bedElem);
-				bedElem.put("type", "span");
+				bedElem.put("@type", "korap:span");
 				bedElem.put("key", c.elem);
 				objectStack.push(posgroup);
 				stackedObjects++;
@@ -515,8 +518,8 @@
 				// node has several conditions (like 'sa, -pa')
 				// -> create 'and' group and embed all position groups there
 				LinkedHashMap<String, Object> conjunct = new LinkedHashMap<String, Object>();
-				conjunct.put("type", "group");
-				conjunct.put("operation", "and");
+				conjunct.put("@type", "korap:group");
+				conjunct.put("operation", "operation:"+ "and");
 				ArrayList<Object> operands = new ArrayList<Object>();
 				conjunct.put("operands", operands);
 				ArrayList<ArrayList<Object>> distributedOperands = new ArrayList<ArrayList<Object>>();
@@ -528,16 +531,16 @@
 					operands.add(posGroup);
 					
 					CosmasCondition c = new CosmasCondition(conditions.getChild(i));
-					posGroup.put("type", "group");
-					posGroup.put("operation", "position");
-					posGroup.put("frame", c.position);
+					posGroup.put("@type", "korap:group");
+					posGroup.put("operation", "operation:"+ "position");
+					posGroup.put("frame", "frame:"+c.position);
 					if (c.negated) posGroup.put("exclude", "true");
 					ArrayList<Object> posOperands = new ArrayList<Object>();
 					distributedOperands.add(posOperands);
 					posGroup.put("operands", posOperands);
 					LinkedHashMap<String, Object> bedElem = new LinkedHashMap<String, Object>();
 					posOperands.add(bedElem);
-					bedElem.put("type", "span");
+					bedElem.put("@type", "korap:span");
 					bedElem.put("key", c.elem);
 					
 					
@@ -610,7 +613,7 @@
 		} else {
 			position = "contains";
 		}
-		posgroup.put("frame", position);
+		posgroup.put("frame", "frame:"+position);
 		position = openNodeCats.get(1).equals("OPIN") ? "contains" : "full";
 		
 		if (rangenode != null) {
@@ -645,7 +648,7 @@
 			String value = posnode.getChild(0).toStringTree();
 			position = "-"+translateTextAreaArgument(value, "ov");
 		}
-		posgroup.put("frame", "overlaps"+position);
+		posgroup.put("frame", "frame:"+"overlaps"+position);
 		
 		if (exclnode != null) {
 			if (exclnode.getChild(0).toStringTree().equals("YES")) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
index 7fa8b5e..b2a195d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
@@ -179,7 +179,8 @@
 			}
 		}
 		System.out.println("Processing PoliqarpPlus");
-		QueryUtils.prepareContext(requestMap);
+		requestMap.put("context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
+//		QueryUtils.prepareContext(requestMap);
 		processNode(tree);
 	}
 	
@@ -259,10 +260,10 @@
 						String[] minmax = parseEmptySegments(emptySegments);
 						Integer min = Integer.parseInt(minmax[0]);
 						Integer max = Integer.parseInt(minmax[1]);
-						sequence.put("type", "group");
-						sequence.put("operation", "sequence");
-//						sequence.put("operation", "distance");
-						sequence.put("inOrder", "true");
+						sequence.put("@type", "korap:group");
+						sequence.put("operation", "operation:"+"sequence");
+//						sequence.put("operation", "operation:"+"distance");
+						sequence.put("inOrder", true);
 						ArrayList<Object> constraint = new ArrayList<Object>(); 
 						sequence.put("distances", constraint);
 						ArrayList<Object> sequenceOperands = new ArrayList<Object>();
@@ -271,13 +272,13 @@
 						stackedObjects++;
 						LinkedHashMap<String, Object> distMap = new LinkedHashMap<String, Object>();
 						constraint.add(distMap);
-						distMap.put("type", "distance");
-						distMap.put("measure", "w");
+						distMap.put("@type", "korap:distance");
+						distMap.put("key", "w");
 						distMap.put("min", min);
 						distMap.put("max", max);
 					} else {
-						sequence.put("type", "group");
-						sequence.put("operation", "sequence");
+						sequence.put("@type", "korap:group");
+						sequence.put("operation", "operation:"+"sequence");
 						ArrayList<Object> sequenceOperands = new ArrayList<Object>();
 						if (emptySegments != null) {
 							String[] minmax = parseEmptySegments(emptySegments);
@@ -296,14 +297,14 @@
 					if (QueryUtils.getNodeCat(node.getChild(0)).equals("cq_segment")
 						|| QueryUtils.getNodeCat(node.getChild(0)).equals("sq_segment")
 						|| QueryUtils.getNodeCat(node.getChild(0)).equals("element")	) {
-						sequence.put("type", "token");
+						sequence.put("@type", "korap:token");
 						tokenStack.push(sequence);
 						stackedTokens++;
 						objectStack.push(sequence);
 						stackedObjects++;
 					// else, it's a group (with shrink()/spanclass/align... as child)
 					} else {
-						sequence.put("type", "group");
+						sequence.put("@type", "korap:group");
 					}
 				}
 				// Step II: decide where to put this element 
@@ -323,8 +324,8 @@
 							if (node.getParent().getChild(0).equals(node)) {
 								// if first child, create containing sequence and embed there
 								LinkedHashMap<String,Object> superSequence = new LinkedHashMap<String,Object>();
-								superSequence.put("type", "group");
-								superSequence.put("operation", "sequence");
+								superSequence.put("@type", "korap:group");
+								superSequence.put("operation", "operation:"+"sequence");
 								ArrayList<Object> operands = new ArrayList<Object>();
 								superSequence.put("operands", operands);
 								operands.add(sequence);
@@ -365,7 +366,7 @@
 			}
 			curToken = token;
 			// Step II: start filling object and add to containing sequence
-			token.put("type", "token");
+			token.put("@type", "korap:token");
 			// add token to sequence only if it is not an only child (in that case, cq_segments has already added the info and is just waiting for the values from "field")
 			// take into account a possible 'occ' child
 			if (node.getParent().getChildCount()>1) {				
@@ -390,7 +391,7 @@
 		if (nodeCat.equals("cq_seg_occ")) {
 			LinkedHashMap<String,Object> group = new LinkedHashMap<String,Object>();
 			curOccGroup = group;
-			group.put("type", "group");
+			group.put("@type", "korap:group");
 			group.put("operands", new ArrayList<Object>());
 			objectStack.push(group);
 			stackedObjects++;
@@ -410,8 +411,8 @@
 			objectStack.push(disjunction);
 			stackedObjects++;
 			ArrayList<Object> disjOperands = new ArrayList<Object>();
-			disjunction.put("type", "group");
-			disjunction.put("operation", "or");
+			disjunction.put("@type", "korap:group");
+			disjunction.put("operation", "operation:"+"or");
 			disjunction.put("operands", disjOperands);
 			// decide where to put the disjunction
 			if (openNodeCats.get(1).equals("query")) {
@@ -455,7 +456,7 @@
 			String value = "";
 			ParseTree valNode = node.getChild(2);
 			String valType = QueryUtils.getNodeCat(valNode);
-			fieldMap.put("type", "term");
+			fieldMap.put("@type", "korap:term");
 			if (valType.equals("simple_query")) {
 				value = valNode.getChild(0).getChild(0).toStringTree(poliqarpParser);   //e.g. (simple_query (sq_segment foo))
 			} else if (valType.equals("re_query")) {
@@ -475,7 +476,7 @@
 			// Step II: decide where to put the field map (as the only value of a token or the meta filter or as a part of a group in case of coordinated fields)
 			if (fieldStack.isEmpty()) {
 				if (!inMeta) {
-					tokenStack.getFirst().put("key", fieldMap);
+					tokenStack.getFirst().put("wrap", fieldMap);
 				} else {
 					((HashMap<String, Object>) requestMap.get("meta")).put("key", fieldMap);
 				}
@@ -495,7 +496,7 @@
 		if (nodeCat.equals("conj_field")) {
 			LinkedHashMap<String,Object> group = new LinkedHashMap<String,Object>(); 
 			ArrayList<Object> groupOperands = new ArrayList<Object>();
-			group.put("type", "group");
+			group.put("@type", "korap:group");
 			group.put("operands", groupOperands);
 			fieldStack.push(groupOperands);
 			stackedFields++;
@@ -506,16 +507,16 @@
 			if (negField) {
 				relation = relation.equals("or") ? "and": "or";
 			}
-			group.put("operation", relation);
+			group.put("operation", "operation:"+relation);
 			// Step II: decide where to put the group (directly under token or in top meta filter section or embed in super group)
 			if (openNodeCats.get(1).equals("cq_segment")) {
-				tokenStack.getFirst().put("key", group);
+				tokenStack.getFirst().put("wrap", group);
 			} else if (openNodeCats.get(1).equals("meta_field_group")) {
 				((HashMap<String, Object>) requestMap.get("meta")).put("key", group);
 			} else if (openNodeCats.get(2).equals("conj_field")) {
 				fieldStack.get(1).add(group);
 			} else {
-				tokenStack.getFirst().put("key", group);
+				tokenStack.getFirst().put("wrap", group);
 			}
 			// skip the operator
 			visited.add(node.getChild(1));
@@ -540,11 +541,11 @@
 			if (node.getText().equals("[]")) {
 				
 			} else {
-				token.put("type", "token");
+				token.put("@type", "korap:token");
 				String word = node.getChild(0).toStringTree(poliqarpParser);
 				LinkedHashMap<String,Object> tokenValues = new LinkedHashMap<String,Object>();
-				token.put("key", tokenValues);
-				tokenValues.put("type", "term");
+				token.put("wrap", tokenValues);
+				tokenValues.put("@type", "korap:term");
 				tokenValues.put("key", word);
 				tokenValues.put("layer", "orth");
 				tokenValues.put("match", "eq");
@@ -567,9 +568,9 @@
 			// if in field, regex was already added there
 			if (!openNodeCats.get(1).equals("field")) {
 				LinkedHashMap<String,Object> token = new LinkedHashMap<String,Object>();
-				token.put("type", "token");
-				token.put("key", reQuery);
-				reQuery.put("type", "term");
+				token.put("@type", "korap:token");
+				token.put("wrap", reQuery);
+				reQuery.put("@type", "korap:term");
 				
 				if (openNodeCats.get(1).equals("query")) {
 					requestMap.put("query", token);
@@ -591,7 +592,7 @@
 			stackedObjects++;
 			// Step I: get info
 			// fill group
-			alignGroup.put("type", "group");
+			alignGroup.put("@type", "korap:group");
 			alignGroup.put("alignment", "left");
 			alignGroup.put("operands", new ArrayList<Object>());
 			// Step II: decide where to put the group
@@ -621,7 +622,7 @@
 			objectStack.push(elem);
 			stackedObjects++;
 			// Step II: fill object (token values) and put into containing sequence
-			elem.put("type", "span");
+			elem.put("@type", "korap:span");
 			String value = node.getChild(1).toStringTree(poliqarpParser);
 			elem.put("key", value);
 			// add token to sequence only if it is not an only child (in that case, cq_segments has already added the info and is just waiting for the values from "field")
@@ -636,8 +637,8 @@
 		
 		if (nodeCat.equals("spanclass")) {
 			LinkedHashMap<String,Object> span = new LinkedHashMap<String,Object>();
-			span.put("type", "group");
-			span.put("operation", "class");
+			span.put("@type", "korap:group");
+			span.put("operation", "operation:"+"class");
 			objectStack.push(span);
 			stackedObjects++;
 			ArrayList<Object> spanOperands = new ArrayList<Object>();
@@ -680,9 +681,9 @@
 			ArrayList<Object> posOperands = new ArrayList<Object>();
 			// Step I: get info
 			String relation = QueryUtils.getNodeCat(node.getChild(0));
-			positionGroup.put("type", "group");
-			positionGroup.put("operation", "position");
-			positionGroup.put("frame", relation.toLowerCase());
+			positionGroup.put("@type", "korap:group");
+			positionGroup.put("operation", "operation:"+"position");
+			positionGroup.put("frame", "frame:"+relation.toLowerCase());
 //			positionGroup.put("@subtype", "incl");
 			positionGroup.put("operands", posOperands);
 			// Step II: decide where to put the group
@@ -704,7 +705,6 @@
 			stackedObjects++;
 			ArrayList<Object> shrinkOperands = new ArrayList<Object>();
 			// Step I: get info
-			System.out.println("WAAAAAAAHHHHHHHHHHHHHHHHHHHHHH "+node.getChild(2).toStringTree(poliqarpParser));
 			ArrayList<Integer> classRefs = new ArrayList<Integer>();
 			String classRefOp = null;
 			if (QueryUtils.getNodeCat(node.getChild(2)).equals("spanclass_id")) {
@@ -730,13 +730,13 @@
 			} else {
 				classRefs.add(0);
 			}
-			shrinkGroup.put("type", "group");
+			shrinkGroup.put("@type", "korap:group");
 			String type = node.getChild(0).toStringTree(poliqarpParser);
 			String operation = type.equals("shrink") ? "submatch" : "split";
-			shrinkGroup.put("operation", operation);
+			shrinkGroup.put("operation", "operation:"+operation);
 			shrinkGroup.put("classRef", classRefs);
 			if (classRefOp != null) {
-				shrinkGroup.put("classRefOp", classRefOp);
+				shrinkGroup.put("classRefOp", "classRefOp:"+classRefOp);
 			}
 			shrinkGroup.put("operands", shrinkOperands);
 			int i=1;
@@ -758,10 +758,10 @@
 		if (nodeCat.equals("occ")) {
 			ParseTree occChild = node.getChild(0);
 			String repetition = occChild.toStringTree(poliqarpParser);
-			String[] minmax = parseRepetition(repetition);
-			curOccGroup.put("operation", "repetition");
-			curOccGroup.put("@min", minmax[0]);
-			curOccGroup.put("@max", minmax[1]);
+			int[] minmax = parseRepetition(repetition);
+			curOccGroup.put("operation", "operation:"+"repetition");
+			curOccGroup.put("min", minmax[0]);
+			curOccGroup.put("max", minmax[1]);
 			visited.add(occChild);
 		}
 				
@@ -769,14 +769,14 @@
 		if (nodeCat.equals("flag")) {
 			String flag = QueryUtils.getNodeCat(node.getChild(0)).substring(1); //substring removes leading slash '/'
 			// add to current token's value
-			((HashMap<String, Object>) curToken.get("key")).put("flag", flag);
+			((HashMap<String, Object>) curToken.get("wrap")).put("flag", flag);
 		}
 		
 		if (nodeCat.equals("meta")) {
 			inMeta=true;
 			LinkedHashMap<String,Object> metaFilter = new LinkedHashMap<String,Object>();
 			requestMap.put("meta", metaFilter);
-			metaFilter.put("type", "meta");
+			metaFilter.put("@type", "korap:meta");
 		}
 		
 		if (nodeCat.equals("within") && !QueryUtils.getNodeCat(node.getParent()).equals("position")) {
@@ -833,16 +833,17 @@
 		openNodeCats.pop();
 	}
 
-	private String[] parseRepetition(String repetition) {
+	private int[] parseRepetition(String repetition) {
 		if (repetition.equals("*")) {
-			return new String[] {"0", "100"};
+			return new int[] {0, 100};
 		} else if (repetition.equals("+")) {
-			return new String[] {"1", "100"};
+			return new int[] {1, 100};
 		} else if (repetition.equals("?")) {
-			return new String[] {"0", "1"};
+			return new int[] {0, 1};
 		} else {
 			repetition = repetition.substring(1, repetition.length()-1); // remove braces
-			return repetition.split(",");
+			String[] splitted = repetition.split(",");
+			return new int[] {Integer.parseInt(splitted[0]), Integer.parseInt(splitted[1])};
 		}
 	}
 
@@ -888,7 +889,7 @@
 	@SuppressWarnings("unchecked")
 	private void createOccGroup(ParseTree node) {
 		LinkedHashMap<String,Object> occGroup = new LinkedHashMap<String,Object>();
-		occGroup.put("type", "group");
+		occGroup.put("@type", "korap:group");
 		ArrayList<Object> groupOperands = new ArrayList<Object>();
 		occGroup.put("operands", groupOperands);
 		curOccGroup = occGroup;
diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/CosmasTreeTest.java
index 24306b5..1b28c5a 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/CosmasTreeTest.java
@@ -7,7 +7,7 @@
 
 public class CosmasTreeTest {
 	
-	CosmasTree ppt;
+	CosmasTree ct;
 	String map;
 	String query;
 	
@@ -19,20 +19,20 @@
 	
 	private boolean equalsQueryContent(String res, String query) throws QueryException {
 		res = res.replaceAll(" ", "");
-		ppt = new CosmasTree(query);
-		String queryMap = ppt.getRequestMap().get("query").toString().replaceAll(" ", "");
+		ct = new CosmasTree(query);
+		String queryMap = ct.getRequestMap().get("query").toString().replaceAll(" ", "");
 		return res.equals(queryMap);
 	}
 	
 //	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap = http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/, " +
+		String contextString = "{korap = http://korap.ids-mannheim.de/ns/KorAP/json-ld/v0.1/, " +
 							"boundary = korap:boundary/,"+
 							"group = korap:group/,"+ 
 							"operation = {@id = group:operation/, @type = @id},"+
 							"class = {@id = group:class, @type = xsd:integer},"+
 							"operands = {@id = group:operands, @container = @list},"+
-							"frame = {@id = group:frame/, @type = xsd:integer},"+
+							"frame = {@id = group:frame/, @type = @id},"+
 							"classRef = {@id = group:classRef, @type = xsd:integer},"+
 							"spanRef = {@id = group:spanRef, @type = xsd:integer},"+
 							"classRefOp = {@id = group:classRefOp, @type = @id},"+
@@ -40,11 +40,10 @@
 							"max = {@id = boundary:max, @type = xsd:integer},"+
 							"exclude = {@id = group:exclude, @type = xsd:boolean},"+
 							"distances = {@id = group:distances, @container = @list},"+
-							"inOrder = {@id = group:inOrder, @type = xsd:boolean},"+
+							"inOrder = {@id = group:inOrder, @type = xsd:boolean}"+
 							"}";
-		ppt = new CosmasTree("Test");
-//		assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
-		assertEquals(contextString.replaceAll(" ", ""), ppt.getRequestMap().get("@context"));
+		ct = new CosmasTree("Test");
+		assertEquals(contextString.replaceAll(" ", ""), ct.getRequestMap().get("@context").toString().replaceAll(" ", ""));
 	}
 	
 	
@@ -52,23 +51,23 @@
 	public void testSingleToken() throws QueryException {
 		query="der";
 		String single1 = 
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(single1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Mann";
 		String single2 = 
-				"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(single2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="&Mann";
 		String single3 = 
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(single3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -81,9 +80,9 @@
 	public void testMORPH() throws QueryException {
 		query="#MORPH(V)";
 		String morph1 = 
-					"{type=token, key={type=term, key=V, match=eq}}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+					"{@type=korap:token, wrap={@type=korap:term, key=V, match=eq}}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(morph1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -91,35 +90,35 @@
 	public void testSequence() throws QueryException {
 		query="der Mann";
 		String seq1 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(seq1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="der Mann schläft";
 		String seq2 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=schläft, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=schläft, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(seq2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="der Mann schläft lang";
 		String seq3 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=schläft, layer=orth, match=eq}}," +
-					"{type=token, key={type=term, key=lang, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=schläft, layer=orth, match=eq}}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=lang, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(seq3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -127,41 +126,41 @@
 	public void testOPOR() throws QueryException {
 		query="Sonne oder Mond";
 		String disj1 = 
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(disj1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="(Sonne scheint) oder Mond";
 		String disj2 = 
-					"{type=group, operation=or, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=scheint, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=scheint, layer=orth, match=eq}}" +
 						"]}," +
-						"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(disj2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="(Sonne scheint) oder (Mond scheint)";
 		String disj3 = 
-				"{type=group, operation=or, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=scheint, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=scheint, layer=orth, match=eq}}" +
 						"]}," +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=scheint, layer=orth, match=eq}}" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=scheint, layer=orth, match=eq}}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(disj3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 	}
@@ -170,28 +169,28 @@
 	public void testOPORAND() throws QueryException {
 		query="(Sonne oder Mond) und scheint";
 		String orand1 = 
-				"{type=group, operation=and, operands=[" +
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:and, operands=[" +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 					"]}," +
-					"{type=token, key={type=term, key=scheint, layer=orth, match=eq}}" +
+					"{@type=korap:token, wrap={@type=korap:term, key=scheint, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(orand1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="scheint und (Sonne oder Mond)";
 		String orand2 = 
-				"{type=group, operation=and, operands=[" +
-					"{type=token, key={type=term, key=scheint, layer=orth, match=eq}}," +
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:and, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=scheint, layer=orth, match=eq}}," +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 					"]}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(orand2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -199,85 +198,85 @@
 	public void testOPPROX() throws QueryException {
 		query="Sonne /+w1:4 Mond";
 		String prox1 = 
-					"{type=group, operation=sequence, inOrder=true, " +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=distance, measure=w, min=1, max=4}" +
+							"{@type=korap:distance, key=w, min=1, max=4}" +
 						"], " +
 						"operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Sonne /+w1:4,s0,p1:3 Mond";
 		String prox2 = 
-					"{type=group, operation=sequence, inOrder=true, " +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=group, operation=and, operands=[" +
-								"{type=distance, measure=w, min=1, max=4}," +
-								"{type=distance, measure=s, min=0, max=0}," +
-								"{type=distance, measure=p, min=1, max=3}" +
+							"{@type=korap:group, operation=operation:and, operands=[" +
+								"{@type=korap:distance, key=w, min=1, max=4}," +
+								"{@type=korap:distance, key=s, min=0, max=0}," +
+								"{@type=korap:distance, key=p, min=1, max=3}" +
 							"]}" +
 						"], " +
 						"operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Sonne %+w1:4,s0,p1:3 Mond";
 		String prox3 = 
-				"{type=group, operation=sequence, inOrder=true, " +
+				"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=group, operation=and, operands=[" +
-								"{type=distance, measure=w, min=1, max=4, exclude=true}," +
-								"{type=distance, measure=s, min=0, max=0, exclude=true}," +
-								"{type=distance, measure=p, min=1, max=3, exclude=true}" +
+							"{@type=korap:group, operation=operation:and, operands=[" +
+								"{@type=korap:distance, key=w, min=1, max=4, exclude=true}," +
+								"{@type=korap:distance, key=s, min=0, max=0, exclude=true}," +
+								"{@type=korap:distance, key=p, min=1, max=3, exclude=true}" +
 							"]}" +
 						"], " +
 						"operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Sonne /+w4 Mond";
 		String prox4 = 
-					"{type=group, operation=sequence, inOrder=true, " +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=distance, measure=w, min=0, max=4}" +
+							"{@type=korap:distance, key=w, min=0, max=4}" +
 						"], " +
 						"operands=[" +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox4.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Sonne /-w4 Mond";
 		String prox5 = 
-					"{type=group, operation=sequence, inOrder=true, " +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=distance, measure=w, min=0, max=4}" +
+							"{@type=korap:distance, key=w, min=0, max=4}" +
 						"], " +
 						"operands=[" +
-							"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox5.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -285,24 +284,24 @@
 	public void testOPPROXNested() throws QueryException {	
 		query="Sonne /-w4 Mond /+w2 Sterne";
 		String prox6 = 
-					"{type=group, operation=sequence, inOrder=true, " +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 						"distances=[" +
-							"{type=distance, measure=w, min=0, max=4}" +
+							"{@type=korap:distance, key=w, min=0, max=4}" +
 						"], " +
 						"operands=[" +
-							"{type=group, operation=sequence, inOrder=true, " +
+							"{@type=korap:group, operation=operation:sequence, inOrder=true, " +
 								"distances=[" +
-									"{type=distance, measure=w, min=0, max=2}" +
+									"{@type=korap:distance, key=w, min=0, max=2}" +
 								"], " +
 								"operands=[" +
-									"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}," +
-									"{type=token, key={type=term, key=Sterne, layer=orth, match=eq}}" +
+									"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}," +
+									"{@type=korap:token, wrap={@type=korap:term, key=Sterne, layer=orth, match=eq}}" +
 								"]}," +
-							"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}" +
 						"]" +
 					"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(prox6.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -310,58 +309,58 @@
 	public void testOPIN() throws QueryException {
 		query="wegen #IN <s>";
 		String opin1 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=contains, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opin1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="wegen #IN(L) <s>";
 		String opin2 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=startswith, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opin2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="wegen #IN(%, L) <s>";
 		String opin3 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=startswith, exclude=true, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:startswith, exclude=true, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opin3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="wegen #IN('FE,ALL,%,MIN') <s>";
 		String opin4 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=matches, range=all, exclude=true, grouping=false, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:matches, range=all, exclude=true, grouping=false, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opin4.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -369,30 +368,30 @@
 	public void testOPOV() throws QueryException {
 		query="wegen #OV <s>";
 		String opov1 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=overlaps, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:overlaps, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opov1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="wegen #OV(L) <s>";
 		String opov2 = 
-					"{type=group, operation=submatch, classRef=1, operands=[" +
-						"{type=group, operation=position, frame=overlaps-left, operands=[" +
-							"{type=span, key=s}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=token, key={type=term, key=wegen, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:overlaps-left, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opov2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -400,12 +399,12 @@
 	public void testOPNOT() throws QueryException {
 		query="Sonne nicht Mond";
 		String opnot1 = 
-					"{type=group, operation=not, operands=[" +
-						"{type=token, key={type=term, key=Sonne, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mond, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:not, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=eq}}" +
 					"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(opnot1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -417,52 +416,52 @@
 		// http://www.ids-mannheim.de/cosmas2/web-app/hilfe/suchanfrage/eingabe-zeile/thematische-bsp/bsp-satzlaenge.html
 		query="#BEG(der /w3:5 Mann)";
 		String beg1 = 
-				"{type=group, operation=submatch, @spanRef=[0,1], operands=[" +
-					"{type=group, operation=sequence, inOrder=false, distances=[" +
-						"{type=distance, measure=w, min=3, max=5}" +
+				"{@type=korap:group, operation=operation:submatch, @spanRef=[0,1], operands=[" +
+					"{@type=korap:group, operation=operation:sequence, inOrder=false, distances=[" +
+						"{@type=korap:distance, key=w, min=3, max=5}" +
 					"]," +
 					"operands = [" +
-						"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 					"]}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(beg1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="#BEG(der /w3:5 Mann) /+w10 kommt"; // nesting #BEG() in a distance group
 		String beg2 = 
-				"{type=group, operation=sequence, inOrder=true, distances=[" +
-					"{type=distance, measure=w, min=0, max=10}" +
+				"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+					"{@type=korap:distance, key=w, min=0, max=10}" +
 				"], operands=[" +
-					"{type=group, operation=submatch, @spanRef=[0,1], operands=[" +
-						"{type=group, operation=sequence, inOrder=false, distances=[" +
-							"{type=distance, measure=w, min=3, max=5}" +
+					"{@type=korap:group, operation=operation:submatch, @spanRef=[0,1], operands=[" +
+						"{@type=korap:group, operation=operation:sequence, inOrder=false, distances=[" +
+							"{@type=korap:distance, key=w, min=3, max=5}" +
 						"]," +
 						"operands = [" +
-							"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 						"]}" +
 					"]}," +
-					"{type=token, key={type=term, key=kommt, layer=orth, match=eq}}" +
+					"{@type=korap:token, wrap={@type=korap:term, key=kommt, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(beg2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="#END(der /w3:5 Mann)";
 		String end1 = 
-				"{type=group, operation=submatch, @spanRef=[-1,1], operands=[" +
-					"{type=group, operation=sequence, inOrder=false, distances=[" +
-						"{type=distance, measure=w, min=3, max=5}" +
+				"{@type=korap:group, operation=operation:submatch, @spanRef=[-1,1], operands=[" +
+					"{@type=korap:group, operation=operation:sequence, inOrder=false, distances=[" +
+						"{@type=korap:distance, key=w, min=3, max=5}" +
 					"], " +
 					"operands = [" +
-						"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 					"]}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(end1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -471,9 +470,9 @@
 	public void testELEM() throws QueryException {
 		// http://www.ids-mannheim.de/cosmas2/web-app/hilfe/suchanfrage/eingabe-zeile/syntax/elem.html
 		query="#ELEM(S)";
-		String elem1 = "{type=span, key=s}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		String elem1 = "{@type=korap:span, key=s}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(elem1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -481,17 +480,17 @@
 	public void testOPALL() throws QueryException {
 		query="#ALL(gehen /w1:10 voran)";
 		String all1 =
-				"{type=group, operation=sequence, inOrder=false, " +
+				"{@type=korap:group, operation=operation:sequence, inOrder=false, " +
 					"distances=[" +
-						"{type=distance, measure=w, min=1, max=10}" +
+						"{@type=korap:distance, key=w, min=1, max=10}" +
 					"], " +
 					"operands=[" +
-						"{type=token, key={type=term, key=gehen, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=voran, layer=orth, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=eq}}" +
 					"]" +
 				"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(all1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -499,17 +498,17 @@
 	public void testOPNHIT() throws QueryException {
 		query="#NHIT(gehen /w1:10 voran)";
 		String nhit1 = 
-				"{type=group, operation=sequence, inOrder=false, " +
+				"{@type=korap:group, operation=operation:sequence, inOrder=false, " +
 					"distances=[" +
-						"{type=distance, measure=w, min=1, max=10}" +
+						"{@type=korap:distance, key=w, min=1, max=10}" +
 					"], " +
 					"operands=[" +
-						"{type=token, key={type=term, key=gehen, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=voran, layer=orth, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=eq}}" +
 					"]" +
 				"}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(nhit1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -517,47 +516,47 @@
 	public void testOPBED() throws QueryException {
 		query = "#BED(der , sa)";
 		String bed1 = 
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=s}," +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(bed1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "#BED(der Mann , +pe)";
 		String bed2 = 
-				"{type=group, operation=position, frame=endswith, operands=[" +
-					"{type=span, key=p}," +
-					"{type=group, operation=sequence, operands=[" +
-						"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-						"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:position, frame=frame:endswith, operands=[" +
+					"{@type=korap:span, key=p}," +
+					"{@type=korap:group, operation=operation:sequence, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 					"]}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(bed2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "#BED(der Mann , sa,-pa)";
 		String bed3 = 
-				"{type=group, operation=and, operands=[" +
-					"{type=group, operation=position, frame=startswith, operands=[" +
-						"{type=span, key=s}," +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:and, operands=[" +
+					"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+						"{@type=korap:span, key=s}," +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 						"]}" +
 					"]}," +
-					"{type=group, operation=position, frame=startswith, exclude=true, operands=[" +
-						"{type=span, key=p}," +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+					"{@type=korap:group, operation=operation:position, frame=frame:startswith, exclude=true, operands=[" +
+						"{@type=korap:span, key=p}," +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 						"]}" +
 					"]}" +
 				"]}";
-		ppt = new CosmasTree(query);
-		map = ppt.getRequestMap().get("query").toString();
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
 		assertEquals(bed3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 1837a1b..5a69053 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -2,6 +2,7 @@
 
 import org.junit.Test;
 
+import de.ids_mannheim.korap.query.serialize.CosmasTree;
 import de.ids_mannheim.korap.query.serialize.PoliqarpPlusTree;
 import de.ids_mannheim.korap.util.QueryException;
 
@@ -25,39 +26,53 @@
 	
 //	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, operation={@id=korap:relation, type=korap:relation#types}, class={@id=korap:class, type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}";
-		ppt = new PoliqarpPlusTree("[base=test]");
-//		assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
-		assertEquals(contextString, ppt.getRequestMap().get("@context"));
+		String contextString = "{korap = http://korap.ids-mannheim.de/ns/KorAP/json-ld/v0.1/, " +
+							"boundary = korap:boundary/,"+
+							"group = korap:group/,"+ 
+							"operation = {@id = group:operation/, @type = @id},"+
+							"class = {@id = group:class, @type = xsd:integer},"+
+							"operands = {@id = group:operands, @container = @list},"+
+							"frame = {@id = group:frame/, @type = @id},"+
+							"classRef = {@id = group:classRef, @type = xsd:integer},"+
+							"spanRef = {@id = group:spanRef, @type = xsd:integer},"+
+							"classRefOp = {@id = group:classRefOp, @type = @id},"+
+							"min = {@id = boundary:min, @type = xsd:integer},"+
+							"max = {@id = boundary:max, @type = xsd:integer},"+
+							"exclude = {@id = group:exclude, @type = xsd:boolean},"+
+							"distances = {@id = group:distances, @container = @list},"+
+							"inOrder = {@id = group:inOrder, @type = xsd:boolean}"+
+							"}";
+		ppt = new PoliqarpPlusTree("Test");
+		assertEquals(contextString.replaceAll(" ", ""), ppt.getRequestMap().get("@context").toString().replaceAll(" ", ""));
 	}
 	
 	@Test
 	public void testSingleTokens() throws QueryException {
 		// [base=Mann]
-		String token1 = "{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}";
+		String token1 = "{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}";
 		assertTrue(equalsQueryContent(token1, "[base=Mann]"));
 		
 		// [orth!=Frau]
-		String token2 = "{type=token, key={type=term, key=Frau, layer=orth, match=ne}}";
+		String token2 = "{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=ne}}";
 		assertTrue(equalsQueryContent(token2, "[orth!=Frau]"));
 		
 		// [!p=NN]
-		String token3 = "{type=token, key={type=term, key=NN, layer=p, match=ne}}";
+		String token3 = "{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=ne}}";
 		assertTrue(equalsQueryContent(token3, "[!p=NN]"));
 		
 		// [!p!=NN]
-		String token4 = "{type=token, key={type=term, key=NN, layer=p, match=eq}}";
+		String token4 = "{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=eq}}";
 		assertTrue(equalsQueryContent(token4, "[!p!=NN]"));
 	}
 	
 	@Test
 	public void testElements() throws QueryException {
 		// <s>
-		String elem1 = "{type=span, key=s}";
+		String elem1 = "{@type=korap:span, key=s}";
 		assertTrue(equalsQueryContent(elem1, "<s>"));
 		
 		// <vp>
-		String elem2 = "{type=span, key=vp}";
+		String elem2 = "{@type=korap:span, key=vp}";
 		assertTrue(equalsQueryContent(elem2, "<vp>"));
 	}
 	
@@ -65,12 +80,12 @@
 	public void testEmptyTokens() throws QueryException {
 		// [base=der][][base=Mann]
 		String et1 = 
-			"{type=group, operation=sequence, inOrder=true, distances=[" +
-				"{type=distance, measure=w, min=1, max=1}" +
+			"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+				"{@type=korap:distance, key=w, min=1, max=1}" +
 			"], " +
 			"operands=[" +
-				"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+				"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -78,12 +93,12 @@
 		
 		// [base=der][][][base=Mann]
 		String et2 = 
-			"{type=group, operation=sequence, inOrder=true, distances=[" +
-				"{type=distance, measure=w, min=2, max=2}" +
+			"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+				"{@type=korap:distance, key=w, min=2, max=2}" +
 			"], " +
 			"operands=[" +
-				"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+				"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][][base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -91,12 +106,12 @@
 		
 		// [base=der][][]?[base=Mann]
 		String et3 = 
-			"{type=group, operation=sequence, inOrder=true, distances=[" +
-				"{type=distance, measure=w, min=1, max=2}" +
+			"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+				"{@type=korap:distance, key=w, min=1, max=2}" +
 			"], " +
 			"operands=[" +
-				"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+				"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][]?[base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -105,10 +120,10 @@
 		
 		// startswith(<s>, [][base=Mann]
 		String et4 = 
-			"{type=group, operation=position, frame=startswith, operands=[" +	
-				"{type=span, key=s}," +
-				"{type=group, operation=sequence, offset-min=1, offset-max=1, operands=[" +
-					"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+			"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +	
+				"{@type=korap:span, key=s}," +
+				"{@type=korap:group, operation=operation:sequence, offset-min=1, offset-max=1, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 				"]}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("startswith(<s>, [][base=Mann])");
@@ -117,17 +132,17 @@
 		
 		// [base=der][]{2,5}[base=Mann][]?[][base=Frau]   nested distances=
 		String et5 = 
-				"{type=group, operation=sequence, inOrder=true, distances=[" +
-					"{type=distance, measure=w, min=2, max=5}" +
+				"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+					"{@type=korap:distance, key=w, min=2, max=5}" +
 				"], " +
 				"operands=[" +
-					"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-					"{type=group, operation=sequence, inOrder=true, distances=[" +
-						"{type=distance, measure=w, min=1, max=2}" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+					"{@type=korap:group, operation=operation:sequence, inOrder=true, distances=[" +
+						"{@type=korap:distance, key=w, min=1, max=2}" +
 					"], " +
 					"operands=[" +
-						"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}," +
-						"{type=token, key={type=term, key=Frau, layer=lemma, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=lemma, match=eq}}" +
 					"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[base=der][]{2,5}[base=Mann][]?[][base=Frau]");
@@ -140,14 +155,14 @@
 	public void testCoordinatedFields() throws QueryException {
 		// [base=Mann&(cas=N|cas=A)]
 		String cof1 = 
-			"{type=token, key=" +
-				"{type=group, operands=[" +
-					"{type=term, key=Mann, layer=lemma, match=eq}," +
-					"{type=group, operands=[" +
-						"{type=term, key=N, layer=cas, match=eq}," +
-						"{type=term, key=A, layer=cas, match=eq}" +
-					"], operation=or}" +
-				"], operation=and}" +
+			"{@type=korap:token, wrap=" +
+				"{@type=korap:group, operands=[" +
+					"{@type=korap:term, key=Mann, layer=lemma, match=eq}," +
+					"{@type=korap:group, operands=[" +
+						"{@type=korap:term, key=N, layer=cas, match=eq}," +
+						"{@type=korap:term, key=A, layer=cas, match=eq}" +
+					"], operation=operation:or}" +
+				"], operation=operation:and}" +
 			"}";
 		ppt = new PoliqarpPlusTree("[base=Mann&(cas=N|cas=A)]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -161,12 +176,12 @@
 		
 		// [base=Mann&cas=N&gen=m]
 		String cof2 = 
-			"{type=token, key=" +
-				"{type=group, operands=[" +
-					"{type=term, key=Mann, layer=lemma, match=eq}," +
-					"{type=term, key=N, layer=cas, match=eq}," +
-					"{type=term, key=m, layer=gen, match=eq}" +
-				"], operation=and}" +
+			"{@type=korap:token, wrap=" +
+				"{@type=korap:group, operands=[" +
+					"{@type=korap:term, key=Mann, layer=lemma, match=eq}," +
+					"{@type=korap:term, key=N, layer=cas, match=eq}," +
+					"{@type=korap:term, key=m, layer=gen, match=eq}" +
+				"], operation=operation:and}" +
 			"}";
 		ppt = new PoliqarpPlusTree("[base=Mann&cas=N&gen=m]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -176,20 +191,20 @@
 	@Test
 	public void testOccurrence() throws QueryException {
 		// [base=foo]*
-		String occ1 = "{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					  "], operation=repetition, @min=0, @max=100}"; 
+		String occ1 = "{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					  "], operation=operation:repetition, min=0, max=100}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]*");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]*[base=bar]
 		String occ2 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					"], operation=repetition, @min=0, @max=100 }," +
-					"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					"], operation=operation:repetition, min=0, max=100 }," +
+					"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -197,11 +212,11 @@
 		
 		// [base=bar][base=foo]*
 		String occ3 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-					"{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					"], operation=repetition, @min=0, @max=100 }" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+					"{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					"], operation=operation:repetition, min=0, max=100 }" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=bar][base=foo]*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -209,26 +224,26 @@
 		
 		// ([base=bar][base=foo])*
 		String occ4 = 
-				"{type=group, operands=[" +	
-					"{type=group, operation=sequence, operands=[" +
-						"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-						"{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operands=[" +	
+					"{@type=korap:group, operation=operation:sequence, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
 					"]}" +
-				"], operation=repetition, @min=0, @max=100 }" ;
+				"], operation=operation:repetition, min=0, max=100 }" ;
 		ppt = new PoliqarpPlusTree("([base=bar][base=foo])*");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ4.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// <s>([base=bar][base=foo])*
 		String occ5 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=span, key=s}," +
-					"{type=group, operands=[" +	
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-							"{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:group, operands=[" +	
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
 						"]}" +
-					"], operation=repetition, @min=0, @max=100 }" +
+					"], operation=operation:repetition, min=0, max=100 }" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s>([base=bar][base=foo])*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -236,15 +251,15 @@
 		
 		// <s><np>([base=bar][base=foo])*
 		String occ6 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=span, key=s}," +
-					"{type=span, key=np}," +
-					"{type=group, operands=[" +	
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-							"{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:span, key=np}," +
+					"{@type=korap:group, operands=[" +	
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
 						"]}" +
-					"], operation=repetition, @min=0, @max=100 }" +
+					"], operation=operation:repetition, min=0, max=100 }" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -254,16 +269,16 @@
 		// comment: embedded sequence shouldn't really be here, but does not really hurt, either. (?)
 		// really hard to get this behaviour out of the PQPlus grammar...
 		String occ7 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=span, key=s}," +
-					"{type=span, key=np}," +
-					"{type=group, operands=[" +	
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-							"{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:span, key=np}," +
+					"{@type=korap:group, operands=[" +	
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
 						"]}" +
-					"], operation=repetition, @min=0, @max=100 }," +
-					"{type=token, key={type=term, key=NN, layer=p, match=eq}}" +
+					"], operation=operation:repetition, min=0, max=100 }," +
+					"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=eq}}" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*[p=NN]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -271,39 +286,39 @@
 		
 		// ([base=bar][base=foo])*[p=NN]
 		String occ8 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=group, operands=[" +	
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=bar, layer=lemma, match=eq}}," +
-							"{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:group, operands=[" +	
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
 						"]}" +
-					"], operation=repetition, @min=0, @max=100 }," +
-					"{type=token, key={type=term, key=NN, layer=p, match=eq}}" +
+					"], operation=operation:repetition, min=0, max=100 }," +
+					"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=eq}}" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("([base=bar][base=foo])*[p=NN]");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ8.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]+
-		String occ9 = "{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					  "], operation=repetition, @min=1, @max=100}"; 
+		String occ9 = "{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					  "], operation=operation:repetition, min=1, max=100}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]+");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ9.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]?
-		String occ10 = "{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					  "], operation=repetition, @min=0, @max=1}"; 
+		String occ10 = "{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					  "], operation=operation:repetition, min=0, max=1}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]?");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ10.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]{2,5}
-		String occ11 = "{type=group, operands=[" +
-					     "{type=token, key={type=term, key=foo, layer=lemma, match=eq}}" +
-					  "], operation=repetition, @min=2, @max=5}"; 
+		String occ11 = "{@type=korap:group, operands=[" +
+					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=eq}}" +
+					  "], operation=operation:repetition, min=2, max=5}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]{2,5}");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ11.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -312,17 +327,17 @@
 	@Test
 	public void testTokenSequence() throws QueryException {
 		// [base=Mann][orth=Frau]
-		String seq1 = "{type=group, operation=sequence, operands=[" +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}, " +
-				"{type=token, key={type=term, key=Frau, layer=orth, match=eq}}" +
+		String seq1 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}, " +
+				"{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=eq}}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "[base=Mann][orth=Frau]"));
 		
 		// [base=Mann][orth=Frau][p=NN]
-		String seq2 = "{type=group, operation=sequence, operands=[" +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}, " +
-				"{type=token, key={type=term, key=Frau, layer=orth, match=eq}}, " +
-				"{type=token, key={type=term, key=NN,layer=p, match=eq}}" +
+		String seq2 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}, " +
+				"{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=eq}}, " +
+				"{@type=korap:token, wrap={@type=korap:term, key=NN,layer=p, match=eq}}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "[base=Mann][orth=Frau][p=NN]"));
 	}
@@ -331,12 +346,12 @@
 	public void testDisjSegments() throws QueryException {
 		// ([base=der]|[base=das])[base=Schild]
 		String disj1 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-						"{type=token, key={type=term, key=das, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=das, layer=lemma, match=eq}}" +
 					"]}," +
-					"{type=token, key={type=term, key=Schild, layer=lemma, match=eq}}" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Schild, layer=lemma, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=der]|[base=das])[base=Schild]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -344,11 +359,11 @@
 		
 		// [base=Schild]([base=der]|[base=das])
 		String disj2 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Schild, layer=lemma, match=eq}}," +
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-						"{type=token, key={type=term, key=das, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Schild, layer=lemma, match=eq}}," +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+						"{@type=korap:token, wrap={@type=korap:term, key=das, layer=lemma, match=eq}}" +
 					"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[base=Schild]([base=der]|[base=das])");
@@ -359,24 +374,24 @@
 	@Test
 	public void testTokenElemSequence() throws QueryException {
 		// [base=Mann]<vp>
-		String seq1 = "{type=group, operation=sequence, operands=[" +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}, " +
-				"{type=span, key=vp}" +
+		String seq1 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}, " +
+				"{@type=korap:span, key=vp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "[base=Mann]<vp>"));
 		
 		// <vp>[base=Mann]
-		String seq2 = "{type=group, operation=sequence, operands=[" +
-				"{type=span, key=vp}, "+
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}} " +
+		String seq2 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:span, key=vp}, "+
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}} " +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "<vp>[base=Mann]"));
 		
 		// <vp>[base=Mann]<pp>
-		String seq3 = "{type=group, operation=sequence, operands=[" +
-				"{type=span, key=vp}, "+
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}, " +
-				"{type=span, key=pp} "+
+		String seq3 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:span, key=vp}, "+
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}, " +
+				"{@type=korap:span, key=pp} "+
 				"]}";
 		assertTrue(equalsQueryContent(seq3, "<vp>[base=Mann]<pp>"));
 	}
@@ -384,17 +399,17 @@
 	@Test
 	public void testElemSequence() throws QueryException {
 		// <np><vp>
-		String seq1 = "{type=group, operation=sequence, operands=[" +
-				"{type=span, key=np}," +
-				"{type=span, key=vp}" +
+		String seq1 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:span, key=np}," +
+				"{@type=korap:span, key=vp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "<np><vp>"));
 		
 		// <np><vp><pp>
-		String seq2 = "{type=group, operation=sequence, operands=[" +
-				"{type=span, key=np}," +
-				"{type=span, key=vp}," +
-				"{type=span, key=pp}" +
+		String seq2 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+				"{@type=korap:span, key=np}," +
+				"{@type=korap:span, key=vp}," +
+				"{@type=korap:span, key=pp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "<np><vp><pp>"));
 	}
@@ -402,55 +417,55 @@
 	@Test 
 	public void testClasses() throws QueryException {
 		// {[base=Mann]}
-		String cls1 = "{type=group, operation=class, class=0, operands=[" +
-				"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+		String cls1 = "{@type=korap:group, operation=operation:class, class=0, operands=[" +
+				"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("{[base=Mann]}");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(cls1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// {[base=Mann][orth=Frau]}
-		String cls2 = "{type=group, operation=class, class=0, operands=[" +
-				 "{type=group, operation=sequence, operands=[" +
-				  "{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}," +
-				  "{type=token, key={type=term, key=Frau, layer=orth, match=eq}}" +
+		String cls2 = "{@type=korap:group, operation=operation:class, class=0, operands=[" +
+				 "{@type=korap:group, operation=operation:sequence, operands=[" +
+				  "{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}," +
+				  "{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=eq}}" +
 				 "]}" +
 				"]}";
 		assertTrue(equalsQueryContent(cls2, "{[base=Mann][orth=Frau]}"));
 		
 		// [p=NN]{[base=Mann][orth=Frau]}
-		String cls3 = "{type=group, operation=sequence, operands=[" +
-						"{type=token, key={type=term, key=NN, layer=p, match=eq}}," +
-						"{type=group, operation=class, class=0, operands=[" +
-							"{type=group, operation=sequence, operands=[" +
-								"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}," +
-								"{type=token, key={type=term, key=Frau, layer=orth, match=eq}}" +
+		String cls3 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=eq}}," +
+						"{@type=korap:group, operation=operation:class, class=0, operands=[" +
+							"{@type=korap:group, operation=operation:sequence, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}," +
+								"{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=eq}}" +
 							"]}" +
 						"]}" +
 					  "]}";
 		assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}"));
 		
 		// {[base=Mann][orth=Frau]}[p=NN]
-		String cls4 = "{type=group, operation=sequence, operands=[" +
-						"{type=group, operation=class, class=0, operands=[" +
-						   "{type=group, operation=sequence, operands=[" +
-						     "{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}," +
-						     "{type=token, key={type=term, key=Frau, layer=orth, match=eq}}" +
+		String cls4 = "{@type=korap:group, operation=operation:sequence, operands=[" +
+						"{@type=korap:group, operation=operation:class, class=0, operands=[" +
+						   "{@type=korap:group, operation=operation:sequence, operands=[" +
+						     "{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}," +
+						     "{@type=korap:token, wrap={@type=korap:term, key=Frau, layer=orth, match=eq}}" +
 						   "]}" +
 						"]}," +
-						"{type=token, key={type=term, key=NN, layer=p, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, match=eq}}" +
 					  "]}";
 		ppt = new PoliqarpPlusTree("{[base=Mann][orth=Frau]}[p=NN]");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(cls4.replaceAll(" ", ""), map.replaceAll(" ", ""));
 
 		// {2:{1:[tt/p=ADJA]}[mate/p=NN]}"
-		String cls5 = "{type=group, operation=class, class=2, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-						   "{type=group, operation=class, class=1, operands=[" +
-						     "{type=token, key={type=term, key=ADJA, layer=p, foundry=tt, match=eq}}" +
+		String cls5 = "{@type=korap:group, operation=operation:class, class=2, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+						   "{@type=korap:group, operation=operation:class, class=1, operands=[" +
+						     "{@type=korap:token, wrap={@type=korap:term, key=ADJA, layer=p, foundry=tt, match=eq}}" +
 						   "]}," +
-						   "{type=token, key={type=term, key=NN, layer=p, foundry=mate, match=eq}}" + 
+						   "{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, foundry=mate, match=eq}}" + 
 						"]}" +
 					  "]}";
 		ppt = new PoliqarpPlusTree("{2: {1:[tt/p=ADJA]}[mate/p=NN]}");
@@ -461,25 +476,25 @@
 	@Test
 	public void testPositions() throws QueryException {
 		// contains(<s>,<np>)
-		String pos1 = "{type=group, operation=position, frame=contains, operands=[" +
-				  "{type=span, key=s}," +
-				  "{type=span, key=np}" +
+		String pos1 = "{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+				  "{@type=korap:span, key=s}," +
+				  "{@type=korap:span, key=np}" +
 				"]}";
 		assertTrue(equalsQueryContent(pos1, "contains(<s>,<np>)"));
 		
 		// contains(<s>,[base=Mann])
-		String pos2 = "{type=group, operation=position, frame=contains, operands=[" +
-				  "{type=span, key=s}," +
-				  "{type=token, key= {type=term, key=Mann, layer=lemma, match=eq}}" +
+		String pos2 = "{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+				  "{@type=korap:span, key=s}," +
+				  "{@type=korap:token, wrap= {@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 				"]}";
 		assertTrue(equalsQueryContent(pos2, "contains(<s>,[base=Mann])"));
 		
 		// contains(<s>,[orth=der][orth=Mann])
-		String pos3 = "{type=group, operation=position, frame=contains, operands=[" +
-				  	"{type=span, key=s}," +
-				  	"{type=group, operation=sequence, operands=[" +
-				  		"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-				  		"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+		String pos3 = "{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+				  	"{@type=korap:span, key=s}," +
+				  	"{@type=korap:group, operation=operation:sequence, operands=[" +
+				  		"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+				  		"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 				  	"]}" +
 				  "]}";
 		ppt = new PoliqarpPlusTree("contains(<s>,[orth=der][orth=Mann])");
@@ -488,11 +503,11 @@
 		
 		// [base=Auto]contains(<s>,[base=Mann])
 		String pos4 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Auto, layer=lemma, match=eq}}," +
-					"{type=group, operation=position, frame=contains, operands=[" +
-				  		"{type=span, key=s}," +
-				  		"{type=token, key={type=term, key=Mann, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Auto, layer=lemma, match=eq}}," +
+					"{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+				  		"{@type=korap:span, key=s}," +
+				  		"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=eq}}" +
 				  	"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[base=Auto]contains(<s>,[base=Mann])");
@@ -504,11 +519,11 @@
 	public void testNestedPositions() throws QueryException {
 		// contains(<s>,startswith(<np>,[orth=Der]))
 		String npos1 = 
-			"{type=group, operation=position, frame=contains, operands=[" +
-				"{type=span, key=s}," +
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=np}," +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}" +
+			"{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
+				"{@type=korap:span, key=s}," +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=np}," +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}" +
 				"]}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("contains(<s>, startswith(<np>,[orth=Der]))");
@@ -520,11 +535,11 @@
 	public void testShrinkSplit() throws QueryException {
 		// shrink([orth=Der]{[orth=Mann]})
 		String shr1 = 
-			"{type=group, operation=submatch, classRef=[0], operands=[" +
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}," +
-					"{type=group, operation=class, class=0, operands=[" +
-						"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+			"{@type=korap:group, operation=operation:submatch, classRef=[0], operands=[" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}," +
+					"{@type=korap:group, operation=operation:class, class=0, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 					"]}" +
 				"]}" +
 			"]}";
@@ -534,13 +549,13 @@
 		
 		// shrink([orth=Der]{[orth=Mann][orth=geht]})
 		String shr2 = 
-			"{type=group, operation=submatch, classRef=[0], operands=[" +
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}," +
-					"{type=group, operation=class, class=0, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=geht, layer=orth, match=eq}}" +
+			"{@type=korap:group, operation=operation:submatch, classRef=[0], operands=[" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}," +
+					"{@type=korap:group, operation=operation:class, class=0, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=geht, layer=orth, match=eq}}" +
 						"]}" +
 					"]}" +
 				"]}" +
@@ -551,13 +566,13 @@
 		
 		// shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})
 		String shr3 = 
-			"{type=group, operation=submatch, classRef=[1], operands=[" +
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}," +
-					"{type=group, operation=class, class=1, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=geht, layer=orth, match=eq}}" +
+			"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}," +
+					"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=geht, layer=orth, match=eq}}" +
 						"]}" +
 					"]}" +
 				"]}" +
@@ -568,11 +583,11 @@
 		
 		// shrink(1:startswith(<s>,{1:<np>}))
 		String shr4 = 
-			"{type=group, operation=submatch, classRef=[1], operands=[" +
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=s}," +
-					"{type=group, operation=class, class=1, operands=[" +
-						"{type=span, key=np}" +
+			"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+						"{@type=korap:span, key=np}" +
 					"]}" +
 				"]}" +
 			"]}";
@@ -582,17 +597,17 @@
 		
 		// shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
 		String shr5 = 
-			"{type=group, operation=submatch, classRef=[3], operands=[" +
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=s}," +
-					"{type=group, operation=class, class=3, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=group, operation=sequence, operands=[" +
-									"{type=token, key={type=term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
-									"{type=group, operation=class, class=2, operands=[" +
-										"{type=token, key={type=term, key=NN, layer=p, foundry=tt, match=eq}}" +
+			"{@type=korap:group, operation=operation:submatch, classRef=[3], operands=[" +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:group, operation=operation:class, class=3, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:group, operation=operation:sequence, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
+									"{@type=korap:group, operation=operation:class, class=2, operands=[" +
+										"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, foundry=tt, match=eq}}" +
 									"]}" + 
 								"]}" +
 							"]}" +
@@ -606,17 +621,17 @@
 		
 		// split(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
 		String shr6 = 
-			"{type=group, operation=split, classRef=[3], operands=[" +
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=s}," +
-					"{type=group, operation=class, class=3, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=group, operation=sequence, operands=[" +
-									"{type=token, key={type=term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
-									"{type=group, operation=class, class=2, operands=[" +
-										"{type=token, key={type=term, key=NN, layer=p, foundry=tt, match=eq}}" +
+			"{@type=korap:group, operation=operation:split, classRef=[3], operands=[" +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:group, operation=operation:class, class=3, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:group, operation=operation:sequence, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
+									"{@type=korap:group, operation=operation:class, class=2, operands=[" +
+										"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, foundry=tt, match=eq}}" +
 									"]}" + 
 								"]}" +
 							"]}" +
@@ -630,17 +645,17 @@
 		
 		// split(2|3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
 		String shr7 = 
-			"{type=group, operation=split, classRef=[2, 3], classRefOp=intersection, operands=[" +
-				"{type=group, operation=position, frame=startswith, operands=[" +
-					"{type=span, key=s}," +
-					"{type=group, operation=class, class=3, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=der, layer=lemma, match=eq}}," +
-							"{type=group, operation=class, class=1, operands=[" +
-								"{type=group, operation=sequence, operands=[" +
-									"{type=token, key={type=term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
-									"{type=group, operation=class, class=2, operands=[" +
-										"{type=token, key={type=term, key=NN, layer=p, foundry=tt, match=eq}}" +
+			"{@type=korap:group, operation=operation:split, classRef=[2, 3], classRefOp=classRefOp:intersection, operands=[" +
+				"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+					"{@type=korap:span, key=s}," +
+					"{@type=korap:group, operation=operation:class, class=3, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=der, layer=lemma, match=eq}}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:group, operation=operation:sequence, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=ADJA, layer=p, foundry=mate, match=eq}}," +
+									"{@type=korap:group, operation=operation:class, class=2, operands=[" +
+										"{@type=korap:token, wrap={@type=korap:term, key=NN, layer=p, foundry=tt, match=eq}}" +
 									"]}" + 
 								"]}" +
 							"]}" +
@@ -657,7 +672,7 @@
 	@Test
 	public void testFoundries() throws QueryException {
 		// [tt/base=Mann]
-		String layer1 = "{type=token, key={type=term, key=Mann, layer=base, foundry=tt, match=eq}}";
+		String layer1 = "{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=base, foundry=tt, match=eq}}";
 		ppt = new PoliqarpPlusTree("[tt/base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(layer1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -668,10 +683,10 @@
 	public void testAlign() throws QueryException {
 		// [orth=der]^[orth=Mann]
 		String align1 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-					"{type=group, alignment=left, operands=[" +
-						"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+					"{@type=korap:group, alignment=left, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 					"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[orth=der]^[orth=Mann]");
@@ -681,12 +696,12 @@
 		// [orth=der]^[orth=große][orth=Mann]
 		String query = "[orth=der]^[orth=große][orth=Mann]";
 		String align1b = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=der, layer=orth, match=eq}}," +
-					"{type=group, alignment=left, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=große, layer=orth, match=eq}}," +
-							"{type=token, key={type=term, key=Mann, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=eq}}," +
+					"{@type=korap:group, alignment=left, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=große, layer=orth, match=eq}}," +
+							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=eq}}" +
 						"]}" +
 					"]}" +
 				"]}";
@@ -696,14 +711,14 @@
 		
 		// "([base=a]^[base=b])|[base=c]",
 		String align2 = 
-				"{type=group, operation=or, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=a, layer=lemma, match=eq}}," +
-							"{type=group, alignment=left, operands=[" +
-								"{type=token, key={type=term, key=b, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=eq}}," +
+							"{@type=korap:group, alignment=left, operands=[" +
+								"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=eq}}" +
 							"]}" +
 						"]}," +
-						"{type=token, key={type=term, key=c, layer=lemma, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=c, layer=lemma, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b])|[base=c]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -711,17 +726,17 @@
 		
 		// "([base=a]^[base=b][base=c])|[base=d]",
 		String align3 = 
-				"{type=group, operation=or, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=a, layer=lemma, match=eq}}," +
-							"{type=group, alignment=left, operands=[" +
-								"{type=group, operation=sequence, operands=[" +
-									"{type=token, key={type=term, key=b, layer=lemma, match=eq}}," +
-									"{type=token, key={type=term, key=c, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=eq}}," +
+							"{@type=korap:group, alignment=left, operands=[" +
+								"{@type=korap:group, operation=operation:sequence, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=eq}}," +
+									"{@type=korap:token, wrap={@type=korap:term, key=c, layer=lemma, match=eq}}" +
 								"]}" +
 							"]}" +
 						"]}," +
-						"{type=token, key={type=term, key=d, layer=lemma, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=d, layer=lemma, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b][base=c])|[base=d]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -729,19 +744,19 @@
 		
 		// "([base=a]^[base=b]^[base=c])|[base=d]",
 		String align4 = 
-				"{type=group, operation=or, operands=[" +
-						"{type=group, operation=sequence, operands=[" +
-							"{type=token, key={type=term, key=a, layer=lemma, match=eq}}," +
-							"{type=group, alignment=left, operands=[" +
-								"{type=group, operation=sequence, operands=[" +
-									"{type=token, key={type=term, key=b, layer=lemma, match=eq}}," +
-									"{type=group, alignment=left, operands=[" +
-										"{type=token, key={type=term, key=c, layer=lemma, match=eq}}" +
+				"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:group, operation=operation:sequence, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=eq}}," +
+							"{@type=korap:group, alignment=left, operands=[" +
+								"{@type=korap:group, operation=operation:sequence, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=eq}}," +
+									"{@type=korap:group, alignment=left, operands=[" +
+										"{@type=korap:token, wrap={@type=korap:term, key=c, layer=lemma, match=eq}}" +
 									"]}" +
 								"]}" +
 							"]}" +
 						"]}," +
-						"{type=token, key={type=term, key=d, layer=lemma, match=eq}}" +
+						"{@type=korap:token, wrap={@type=korap:term, key=d, layer=lemma, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b]^[base=c])|[base=d]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -754,16 +769,16 @@
 	public void testSimpleQueries() throws QueryException {
 		// Baum
 		String simple1 = 
-				"{type=token, key={type=term, key=Baum, layer=orth, match=eq}}";
+				"{@type=korap:token, wrap={@type=korap:term, key=Baum, layer=orth, match=eq}}";
 		ppt = new PoliqarpPlusTree("Baum");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(simple1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// Der Baum
 		String simple2 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}, " +
-					"{type=token, key={type=term, key=Baum, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}, " +
+					"{@type=korap:token, wrap={@type=korap:term, key=Baum, layer=orth, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Der Baum");
 		map = ppt.getRequestMap().get("query").toString();
@@ -771,10 +786,10 @@
 		
 		// Der große Baum
 		String simple3 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=token, key={type=term, key=Der, layer=orth, match=eq}}, " +
-					"{type=token, key={type=term, key=große, layer=orth, match=eq}}, " +						
-					"{type=token, key={type=term, key=Baum, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=eq}}, " +
+					"{@type=korap:token, wrap={@type=korap:term, key=große, layer=orth, match=eq}}, " +						
+					"{@type=korap:token, wrap={@type=korap:term, key=Baum, layer=orth, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Der große Baum");
 		map = ppt.getRequestMap().get("query").toString();
@@ -782,9 +797,9 @@
 		
 		// Baum | Stein
 		String simple4 = 
-				"{type=group, operation=or, operands=[" +
-					"{type=token, key={type=term, key=Baum, layer=orth, match=eq}}, " +						
-					"{type=token, key={type=term, key=Stein, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:or, operands=[" +
+					"{@type=korap:token, wrap={@type=korap:term, key=Baum, layer=orth, match=eq}}, " +						
+					"{@type=korap:token, wrap={@type=korap:term, key=Stein, layer=orth, match=eq}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Baum | Stein");
 		map = ppt.getRequestMap().get("query").toString();
@@ -793,12 +808,12 @@
 		// Baum | Stein Haus
 		String query = "(Baum | Stein) Haus";
 		String simple5 = 
-				"{type=group, operation=sequence, operands=[" +
-					"{type=group, operation=or, operands=[" +
-						"{type=token, key={type=term, key=Baum, layer=orth, match=eq}}, " +						
-						"{type=token, key={type=term, key=Stein, layer=orth, match=eq}}" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
+					"{@type=korap:group, operation=operation:or, operands=[" +
+						"{@type=korap:token, wrap={@type=korap:term, key=Baum, layer=orth, match=eq}}, " +						
+						"{@type=korap:token, wrap={@type=korap:term, key=Stein, layer=orth, match=eq}}" +
 					"]}," +
-					"{type=token, key={type=term, key=Haus, layer=orth, match=eq}} " +			
+					"{@type=korap:token, wrap={@type=korap:term, key=Haus, layer=orth, match=eq}} " +			
 				"]}";
 		ppt = new PoliqarpPlusTree(query);
 		map = ppt.getRequestMap().get("query").toString();
