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 beb2c38..6f471e4 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
@@ -136,8 +136,8 @@
 		
 		context.put("korap", "http://korap.ids-mannheim.de/ns/query");
 		context.put("@language", "de");
-		context.put("operands", operands);
-		context.put("relation", relation);
+		context.put("@operands", operands);
+		context.put("@relation", relation);
 		context.put("class", classMap);
 		context.put("query", "korap:query");
 		context.put("filter", "korap:filter");
@@ -203,7 +203,7 @@
 						// Step I: create sequence
 						LinkedHashMap<String, Object> sequence = new LinkedHashMap<String, Object>();
 						sequence.put("@type", "korap:sequence");
-						sequence.put("operands", new ArrayList<Object>());
+						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
 						// to the sequencedNodes list and remove the sequence from the stack when the parent
@@ -230,15 +230,16 @@
 			
 			fieldMap.put("@type", "korap:term");			
 			// make category-specific fieldMap entry
-			String attr = nodeCat.equals("OPWF") ? "orth:" : "base:";
-			String value = attr+node.getChild(0).toStringTree().replaceAll("\"", "");
+			String attr = nodeCat.equals("OPWF") ? "orth" : "lemma";
+			String value = node.getChild(0).toStringTree().replaceAll("\"", "");
 			fieldMap.put("@value", value);
+			fieldMap.put("@attr", attr);
 			
 			// negate field (see above)
 			if (negate) {
-				fieldMap.put("relation", "!=");
+				fieldMap.put("@relation", "!=");
 			} else {
-				fieldMap.put("relation", "=");
+				fieldMap.put("@relation", "=");
 			}
 			//Step II: decide where to put
 			putIntoSuperObject(token, 1);
@@ -248,43 +249,56 @@
 			//Step I: get info
 			LinkedHashMap<String, Object> token = new LinkedHashMap<String, Object>();
 			token.put("@type", "korap:token");
+			LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
+			token.put("@value", fieldMap);
 			
-			List<String> morphValues = QueryUtils.parseMorph(node.getChild(0).toStringTree());
-			if (morphValues.size() == 1) {
-				LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
-				token.put("@value", fieldMap);
-				
-				fieldMap.put("@type", "korap:term");
-				fieldMap.put("@value", morphValues.get(0));
-				// make category-specific fieldMap entry
-				// negate field (see above)
-				if (negate) {
-					fieldMap.put("relation", "!=");
-				} else {
-					fieldMap.put("relation", "=");
-				}
+			fieldMap.put("@type", "korap:term");
+//			fieldMap.put("@value", "morph:"+node.getChild(0).toString().replace(" ", "_"));
+			fieldMap.put("@value", node.getChild(0).toString().replace(" ", "_"));
+			// make category-specific fieldMap entry
+			// negate field (see above)
+			if (negate) {
+				fieldMap.put("@relation", "!=");
 			} else {
-				LinkedHashMap<String, Object> conjGroup = new LinkedHashMap<String, Object>();
-				token.put("@value", conjGroup);
-				ArrayList<Object> conjOperands = new ArrayList<Object>();
-				conjGroup.put("@type", "korap:group");
-				conjGroup.put("relation", "and");
-				conjGroup.put("operands", conjOperands);
-				for (String value : morphValues) {
-					LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
-					token.put("@value", fieldMap);
-					
-					fieldMap.put("@type", "korap:term");
-					fieldMap.put("@value", value);
-					// make category-specific fieldMap entry
-					// negate field (see above)
-					if (negate) {
-						fieldMap.put("relation", "!=");
-					} else {
-						fieldMap.put("relation", "=");
-					}
-				}
+				fieldMap.put("@relation", "=");
 			}
+//			List<String> morphValues = QueryUtils.parseMorph(node.getChild(0).toStringTree());
+//			System.err.println(morphValues);
+//			if (morphValues.size() == 1) {
+//				LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
+//				token.put("@value", fieldMap);
+//				
+//				fieldMap.put("@type", "korap:term");
+//				fieldMap.put("@value", morphValues.get(0));
+//				// make category-specific fieldMap entry
+//				// negate field (see above)
+//				if (negate) {
+//					fieldMap.put("@relation", "!=");
+//				} else {
+//					fieldMap.put("@relation", "=");
+//				}
+//			} else {
+//				LinkedHashMap<String, Object> conjGroup = new LinkedHashMap<String, Object>();
+//				token.put("@value", conjGroup);
+//				ArrayList<Object> conjOperands = new ArrayList<Object>();
+//				conjGroup.put("@type", "korap:group");
+//				conjGroup.put("@relation", "and");
+//				conjGroup.put("@operands", conjOperands);
+//				for (String value : morphValues) {
+//					LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
+//					token.put("@value", fieldMap);
+//					
+//					fieldMap.put("@type", "korap:term");
+//					fieldMap.put("@value", value);
+//					// make category-specific fieldMap entry
+//					// negate field (see above)
+//					if (negate) {
+//						fieldMap.put("@relation", "!=");
+//					} else {
+//						fieldMap.put("@relation", "=");
+//					}
+//				}
+//			}
 			
 			
 			//Step II: decide where to put
@@ -294,7 +308,7 @@
 		if (nodeCat.equals("OPELEM")) {
 			// Step I: create element
 			LinkedHashMap<String, Object> elem = new LinkedHashMap<String, Object>();
-			elem.put("@type", "korap:element");
+			elem.put("@type", "korap:span");
 			elem.put("@value", node.getChild(0).getChild(0).toStringTree().toLowerCase());
 			//Step II: decide where to put
 			putIntoSuperObject(elem);
@@ -303,7 +317,7 @@
 		if (nodeCat.equals("OPLABEL")) {
 			// Step I: create element
 			LinkedHashMap<String, Object> elem = new LinkedHashMap<String, Object>();
-			elem.put("@type", "korap:element");
+			elem.put("@type", "korap:span");
 			elem.put("@value", node.getChild(0).toStringTree().replaceAll("<|>", ""));
 			//Step II: decide where to put
 			putIntoSuperObject(elem);
@@ -316,8 +330,8 @@
 			String relation = "or";
 			if (nodeCat.equals("OPAND")) relation = "and";
 			if (nodeCat.equals("OPNOT")) relation = "not";
-			disjunction.put("relation", relation);
-			disjunction.put("operands", new ArrayList<Object>());
+			disjunction.put("@relation", relation);
+			disjunction.put("@operands", new ArrayList<Object>());
 			objectStack.push(disjunction);
 			stackedObjects++;
 			// Step II: decide where to put
@@ -325,25 +339,28 @@
 		}
 		
 		if (nodeCat.equals("OPPROX")) {
+			//TODO direction "both": wrap in "or" group with operands once flipped, once not
 			// collect info
 			Tree prox_opts = node.getChild(0);
 			Tree typ = prox_opts.getChild(0);
 			Tree dist_list = prox_opts.getChild(1);
 			// Step I: create group
-			LinkedHashMap<String, Object> proxGroup = new LinkedHashMap<String, Object>();
-			proxGroup.put("@type", "korap:group");
-			proxGroup.put("relation", "distance");
-			objectStack.push(proxGroup);
+			LinkedHashMap<String, Object> proxSequence = new LinkedHashMap<String, Object>();
+			proxSequence.put("@type", "korap:sequence");
+			objectStack.push(proxSequence);
 			stackedObjects++;
-			if (openNodeCats.get(1).equals("OPALL")) proxGroup.put("match", "all");
-			else if (openNodeCats.get(1).equals("OPNHIT")) proxGroup.put("match", "between");
-			else proxGroup.put("match", "operands");
+//			if (openNodeCats.get(1).equals("OPALL")) proxSequence.put("match", "all");
+//			else if (openNodeCats.get(1).equals("OPNHIT")) proxSequence.put("match", "between");
+//			else proxSequence.put("match", "operands");
 			ArrayList<Object> constraints = new ArrayList<Object>();
-			String subtype = typ.getChild(0).toStringTree().equals("PROX") ? "incl" : "excl"; 
-			proxGroup.put("@subtype", subtype);
-			proxGroup.put("constraint", constraints);
+			boolean exclusion = ! typ.getChild(0).toStringTree().equals("PROX"); 
+			
+			String inOrder = "true";
+			proxSequence.put("@inOrder", inOrder);
+			proxSequence.put("@constraints", constraints);
+			
 			ArrayList<Object> operands = new ArrayList<Object>(); 
-			proxGroup.put("operands", operands);
+			proxSequence.put("@operands", operands);
 			
 			// if only one dist_info, put directly into constraints
 			if (dist_list.getChildCount()==1) {
@@ -357,22 +374,27 @@
 				if (direction.equals("minus")) {
 					direction = "plus";
 					invertedOperandsLists.add(operands);
+				} else if (direction.equals("both")) {
+					inOrder="false";
 				}
 				LinkedHashMap<String, Object> distance = new LinkedHashMap<String, Object>();
 				distance.put("@type", "korap:distance");
-				distance.put("measure", meas);
-				distance.put("direction", direction);
-				distance.put("min", min);
-				distance.put("max", max);
+				distance.put("@measure", meas);
+				distance.put("@min", Integer.parseInt(min));
+				distance.put("@max", Integer.parseInt(max));
+				if (exclusion) {
+					distance.put("@exclude", exclusion);
+				}
 				constraints.add(distance);
+				proxSequence.put("@inOrder", inOrder);
 			}
 			// otherwise, create group and add info there
 			else {
 				LinkedHashMap<String, Object> distanceGroup = new LinkedHashMap<String, Object>();
 				ArrayList<Object> groupOperands = new ArrayList<Object>();
 				distanceGroup.put("@type", "korap:group");
-				distanceGroup.put("relation", "and");
-				distanceGroup.put("operands", groupOperands);
+				distanceGroup.put("@relation", "and");
+				distanceGroup.put("@operands", groupOperands);
 				constraints.add(distanceGroup);
 				for (int i=0; i<dist_list.getChildCount(); i++) {
 					String direction = dist_list.getChild(i).getChild(0).getChild(0).toStringTree().toLowerCase();
@@ -384,32 +406,42 @@
 					}
 					LinkedHashMap<String, Object> distance = new LinkedHashMap<String, Object>();
 					distance.put("@type", "korap:distance");
-					distance.put("measure", meas);
-					distance.put("direction", direction);
-					distance.put("min", min);
-					distance.put("max", max);
+					distance.put("@measure", meas);
+					distance.put("@min", min);
+					distance.put("@max", max);
+					if (exclusion) {
+						distance.put("@exclude", exclusion);
+					}
 					groupOperands.add(distance);
+					if (direction.equals("plus")) {
+						inOrder="true";
+					} else if (direction.equals("minus")) {
+						inOrder="true";
+						invertedOperandsLists.add(operands);
+					}
 				}
+				proxSequence.put("@inOrder", inOrder);
+				
 			}
 			// Step II: decide where to put
-			putIntoSuperObject(proxGroup, 1);
+			putIntoSuperObject(proxSequence, 1);
 		}
 		
 		// inlcusion or overlap
 		if (nodeCat.equals("OPIN") || nodeCat.equals("OPOV")) {
 			// Step I: create group
-			LinkedHashMap<String, Object> shrinkgroup = new LinkedHashMap<String, Object>();
-			shrinkgroup.put("@type", "korap:group");
-			shrinkgroup.put("relation", "shrink");
-			shrinkgroup.put("shrink", "1");
+			LinkedHashMap<String, Object> submatchgroup = new LinkedHashMap<String, Object>();
+			submatchgroup.put("@type", "korap:group");
+			submatchgroup.put("@relation", "submatch");
+			submatchgroup.put("@classRef", "1");
 			
-			ArrayList<Object> shrinkoperands = new ArrayList<Object>(); 
+			ArrayList<Object> submatchoperands = new ArrayList<Object>(); 
 			LinkedHashMap<String, Object> posgroup = new LinkedHashMap<String, Object>();
-			shrinkgroup.put("operands", shrinkoperands);
-			shrinkoperands.add(posgroup);
+			submatchgroup.put("@operands", submatchoperands);
+			submatchoperands.add(posgroup);
 			posgroup.put("@type", "korap:group");
-			String relation = nodeCat.equals("OPIN") ? "position" : "overlap";
-			posgroup.put("relation", relation);
+			String relation = nodeCat.equals("OPIN") ? "position" : "overlaps";
+			posgroup.put("@relation", relation);
 			
 			if (nodeCat.equals("OPIN")) {
 				parseOPINOptions(node, posgroup);
@@ -419,14 +451,14 @@
 			
 			
 			ArrayList<Object> posoperands = new ArrayList<Object>();
-			posgroup.put("operands", posoperands);
+			posgroup.put("@operands", posoperands);
 			objectStack.push(posgroup);
 			// mark this an inverted list
 			invertedOperandsLists.push(posoperands);
 			stackedObjects++;
 			
 			// Step II: decide where to put
-			putIntoSuperObject(shrinkgroup, 1);
+			putIntoSuperObject(submatchgroup, 1);
 		}
 		
 		
@@ -436,7 +468,7 @@
 			LinkedHashMap<String, Object> classGroup = new LinkedHashMap<String, Object>();
 			classGroup.put("@type", "korap:group");
 			classGroup.put("class", "1");
-			classGroup.put("operands", new ArrayList<Object>());
+			classGroup.put("@operands", new ArrayList<Object>());
 			objectStack.push(classGroup);
 			stackedObjects++;
 			// Step II: decide where to put
@@ -452,10 +484,15 @@
 			// Step I: create group
 			LinkedHashMap<String, Object> beggroup = new LinkedHashMap<String, Object>();
 			beggroup.put("@type", "korap:group");
-			beggroup.put("relation", "shrink");
-			String reduction = nodeCat.equals("OPBEG") ? "first" : "last";
-			beggroup.put("shrink", reduction);
-			beggroup.put("operands", new ArrayList<Object>());
+			beggroup.put("@relation", "submatch");
+			ArrayList<Integer> spanRef = new ArrayList<Integer>();
+			if (nodeCat.equals("OPBEG")) {
+				spanRef.add(0); spanRef.add(1);
+			} else {
+				spanRef.add(-1); spanRef.add(1);
+			}
+			beggroup.put("@spanRef", spanRef);
+			beggroup.put("@operands", new ArrayList<Object>());
 			objectStack.push(beggroup);
 			stackedObjects++;
 			
@@ -471,15 +508,15 @@
 			if (conditions.getChildCount()==1) {
 				LinkedHashMap<String, Object> posgroup = new LinkedHashMap<String, Object>();
 				posgroup.put("@type", "korap:group");
-				posgroup.put("relation", "position");
+				posgroup.put("@relation", "position");
 				CosmasCondition c = new CosmasCondition(conditions.getChild(0));
-				posgroup.put("position", c.position);
-				if (c.negated) posgroup.put("@subtype", "excl");
+				posgroup.put("@position", c.position);
+				if (c.negated) posgroup.put("@relation", "!=");
 				ArrayList<Object> operands = new ArrayList<Object>();
-				posgroup.put("operands", operands);
+				posgroup.put("@operands", operands);
 				LinkedHashMap<String, Object> bedElem = new LinkedHashMap<String, Object>();
 				operands.add(bedElem);
-				bedElem.put("@type", "korap:element");
+				bedElem.put("@type", "korap:span");
 				bedElem.put("@value", c.elem);
 				objectStack.push(posgroup);
 				stackedObjects++;
@@ -492,9 +529,9 @@
 				// -> create 'and' group and embed all position groups there
 				LinkedHashMap<String, Object> conjunct = new LinkedHashMap<String, Object>();
 				conjunct.put("@type", "korap:group");
-				conjunct.put("relation", "and");
+				conjunct.put("@relation", "and");
 				ArrayList<Object> operands = new ArrayList<Object>();
-				conjunct.put("operands", operands);
+				conjunct.put("@operands", operands);
 				ArrayList<ArrayList<Object>> distributedOperands = new ArrayList<ArrayList<Object>>();
 				
 				for (int i=0; i<conditions.getChildCount(); i++) {
@@ -505,15 +542,15 @@
 					
 					CosmasCondition c = new CosmasCondition(conditions.getChild(i));
 					posGroup.put("@type", "korap:group");
-					posGroup.put("relation", "position");
-					posGroup.put("position", c.position);
-					if (c.negated) posGroup.put("@subtype", "excl");
+					posGroup.put("@relation", "position");
+					posGroup.put("@position", c.position);
+					if (c.negated) posGroup.put("@exclude", "true");
 					ArrayList<Object> posOperands = new ArrayList<Object>();
 					distributedOperands.add(posOperands);
-					posGroup.put("operands", posOperands);
+					posGroup.put("@operands", posOperands);
 					LinkedHashMap<String, Object> bedElem = new LinkedHashMap<String, Object>();
 					posOperands.add(bedElem);
-					bedElem.put("@type", "korap:element");
+					bedElem.put("@type", "korap:span");
 					bedElem.put("@value", c.elem);
 					
 					
@@ -586,7 +623,7 @@
 		} else {
 			position = "contains";
 		}
-		posgroup.put("position", position);
+		posgroup.put("@position", position);
 		position = openNodeCats.get(1).equals("OPIN") ? "contains" : "full";
 		
 		if (rangenode != null) {
@@ -599,13 +636,14 @@
 				negatePosition = !negatePosition;
 			}
 		}
-		
+		System.err.println(negatePosition);
 		if (negatePosition) {
-			posgroup.put("@subtype", "excl");	
+			posgroup.put("@exclude", "true");	
+//			negate = !negate;
 		}
 		
 		if (groupnode != null) {
-			String grouping = groupnode.getChild(0).toStringTree().equals("MAX") ? "true" : "false";
+			String grouping = groupnode.getChild(0).toStringTree().equals("max") ? "true" : "false";
 			posgroup.put("grouping", grouping);
 		}
 	}
@@ -622,16 +660,16 @@
 		} else {
 			position = "any";
 		}
-		posgroup.put("position", position);
+		posgroup.put("@position", position);
 		position = openNodeCats.get(1).equals("OPIN") ? "contains" : "full";
 		
 		if (exclnode != null) {
 			if (exclnode.getChild(0).toStringTree().equals("YES")) {
-				posgroup.put("@subtype", "excl");
+				posgroup.put("@relation", "!=");
 			}
 		}
 		if (groupnode != null) {
-			String grouping = groupnode.getChild(0).toStringTree().equals("MAX") ? "true" : "false";
+			String grouping = groupnode.getChild(0).toStringTree().equals("@max") ? "true" : "false";
 			posgroup.put("grouping", grouping);
 		}
 		
@@ -681,7 +719,7 @@
 				operands.add(object);
 			}
 		} else if (objectStack.size()>objStackPosition) {
-			ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("operands");
+			ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("@operands");
 			if (!invertedOperandsLists.contains(topObjectOperands)) {
 				topObjectOperands.add(object);
 			} else {
@@ -724,7 +762,12 @@
 		 */
 		String[] queries = new String[] {
 				/* COSMAS 2 */
-				"MORPH(V)"
+				"MORPH(V)",
+				"MORPH(V PRES)",
+				"wegen #IN(%, L) <s>",
+				"wegen #IN(%) <s>",
+				"(Mann oder Frau) #IN <s>",
+				"#BEG(der /w3:5 Mann) /+w10 kommt"
 				};
 		CosmasTree.debug=true;
 		for (String q : queries) {
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 b10105c..530f597 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
@@ -178,8 +178,8 @@
 		
 		context.put("korap", "http://korap.ids-mannheim.de/ns/query");
 		context.put("@language", "de");
-		context.put("operands", operands);
-		context.put("relation", relation);
+		context.put("@operands", operands);
+		context.put("@relation", relation);
 		context.put("class", classMap);
 		context.put("query", "korap:query");
 		context.put("filter", "korap:filter");
@@ -277,7 +277,6 @@
 				}
 				// Step I: decide type of element (one or more elements? -> token or sequence)
 				// take into account a possible 'occ' child with accompanying parantheses, therefore 3 extra children
-				// TODO analyse emptysegments
 				int occExtraChildren = cqHasOccChild ? 3:0;
 				if (node.getChildCount()>1 + occExtraChildren) {
 					ParseTree emptySegments = QueryUtils.getFirstChildWithCat(node, "empty_segments");
@@ -285,20 +284,19 @@
 						String[] minmax = parseEmptySegments(emptySegments);
 						Integer min = Integer.parseInt(minmax[0]);
 						Integer max = Integer.parseInt(minmax[1]);
-						sequence.put("@type", "korap:group");
-						sequence.put("relation", "distance");
-						sequence.put("@subtype", "incl");
+						sequence.put("@type", "korap:sequence");
+//						sequence.put("@relation", "distance");
+						sequence.put("@inOrder", "true");
 						ArrayList<Object> constraint = new ArrayList<Object>(); 
-						sequence.put("constraint", constraint);
+						sequence.put("@constraints", constraint);
 						ArrayList<Object> sequenceOperands = new ArrayList<Object>();
-						sequence.put("operands", sequenceOperands);
+						sequence.put("@operands", sequenceOperands);
 						objectStack.push(sequence);
 						stackedObjects++;
 						LinkedHashMap<String, Object> distMap = new LinkedHashMap<String, Object>();
 						constraint.add(distMap);
 						distMap.put("@type", "korap:distance");
 						distMap.put("measure", "w");
-						distMap.put("direction", "plus");
 						distMap.put("min", min);
 						distMap.put("max", max);
 					} else {
@@ -311,7 +309,7 @@
 							sequence.put("offset-min", min);
 							sequence.put("offset-max", max);
 						}
-						sequence.put("operands", sequenceOperands);
+						sequence.put("@operands", sequenceOperands);
 						objectStack.push(sequence);
 						stackedObjects++;
 					}
@@ -334,7 +332,7 @@
 				// Step II: decide where to put this element 
 				// check if this is an argument for a containing occurrence group (see step 0)
 				if (cqHasOccSibling) {
-					ArrayList<Object> topGroupOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+					ArrayList<Object> topGroupOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 					topGroupOperands.add(sequence);
 				// ...if not modified by occurrence, put into suitable super structure
 				} else {
@@ -350,20 +348,20 @@
 								LinkedHashMap<String,Object> superSequence = new LinkedHashMap<String,Object>();
 								superSequence.put("@type", "korap:sequence");
 								ArrayList<Object> operands = new ArrayList<Object>();
-								superSequence.put("operands", operands);
+								superSequence.put("@operands", operands);
 								operands.add(sequence);
 								requestMap.put("query", superSequence);
 								objectStack.push(superSequence); // add at 2nd position to keep current cq_segment accessible
 								stackedObjects++;
 							} else {
 								// if not first child, add to previously created parent sequence
-								ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+								ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 								topSequenceOperands.add(sequence);
 							}
 						}
 					} else if (!objectStack.isEmpty()){
 						// embed in super sequence
-						ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+						ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 						topSequenceOperands.add(sequence);
 					}
 				}
@@ -404,7 +402,7 @@
 //					}
 //					
 				} else {
-					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(onTopOfObjectStack).get("operands");
+					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(onTopOfObjectStack).get("@operands");
 					topSequenceOperands.add(token);
 				}
 			}
@@ -415,13 +413,13 @@
 			LinkedHashMap<String,Object> group = new LinkedHashMap<String,Object>();
 			curOccGroup = group;
 			group.put("@type", "korap:group");
-			group.put("operands", new ArrayList<Object>());
+			group.put("@operands", new ArrayList<Object>());
 			objectStack.push(group);
 			stackedObjects++;
 			// add group 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) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(group);
 			} else {
 				requestMap.put("query", group);
@@ -435,13 +433,13 @@
 			stackedObjects++;
 			ArrayList<Object> disjOperands = new ArrayList<Object>();
 			disjunction.put("@type", "korap:group");
-			disjunction.put("relation", "or");
-			disjunction.put("operands", disjOperands);
+			disjunction.put("@relation", "or");
+			disjunction.put("@operands", disjOperands);
 			// decide where to put the disjunction
 			if (openNodeCats.get(1).equals("query")) {
 				requestMap.put("query", disjunction);	
 			} else if (openNodeCats.get(1).equals("cq_segments")) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(disjunction);
 			}
 		}
@@ -479,8 +477,15 @@
 				value = valNode.getChild(0).toStringTree(poliqarpParser); 				//e.g. (re_query "bar*")
 				fieldMap.put("@subtype", "korap:value#regex");
 			}
-			fieldMap.put("@value", fieldName+":"+value);
-			fieldMap.put("relation", relation);
+			fieldMap.put("@value", value);
+			if (fieldName.contains("/")) {
+				String[] splitted = fieldName.split("/");
+				fieldMap.put("@attr", splitted[1]);
+				fieldMap.put("@foundry", splitted[0]);
+			} else {
+				fieldMap.put("@attr", fieldName);
+			}
+			fieldMap.put("@relation", relation);
 			// 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) {
@@ -505,7 +510,7 @@
 			LinkedHashMap<String,Object> group = new LinkedHashMap<String,Object>(); 
 			ArrayList<Object> groupOperands = new ArrayList<Object>();
 			group.put("@type", "korap:group");
-			group.put("operands", groupOperands);
+			group.put("@operands", groupOperands);
 			fieldStack.push(groupOperands);
 			stackedFields++;
 			// Step I: get operator (& or |)
@@ -515,7 +520,7 @@
 			if (negField) {
 				relation = relation.equals("or") ? "and": "or";
 			}
-			group.put("relation", relation);
+			group.put("@relation", 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("@value", group);
@@ -554,15 +559,15 @@
 				LinkedHashMap<String,Object> tokenValues = new LinkedHashMap<String,Object>();
 				token.put("@value", tokenValues);
 				tokenValues.put("@type", "korap:term");
-				tokenValues.put("@value", "orth:"+word);
-				tokenValues.put("relation", "=");
+				tokenValues.put("@value", word);
+				tokenValues.put("@attr", "orth");
+				tokenValues.put("@relation", "=");
 				// add token to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the values from "field")
 				if (node.getParent().getChildCount()>1) {
-					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 					topSequenceOperands.add(token);
 				}
 			}
-			System.out.println(stackedObjects+" "+objectStack);
 			visited.add(node.getChild(0));
 		}
 		
@@ -571,7 +576,7 @@
 			reQuery.put("@subtype", "korap:regex");
 			String regex = node.getChild(0).toStringTree(poliqarpParser);
 			reQuery.put("@value", regex);
-			reQuery.put("relation", "=");
+			reQuery.put("@relation", "=");
 			
 			// if in field, regex was already added there
 			if (!openNodeCats.get(1).equals("field")) {
@@ -583,7 +588,7 @@
 				if (openNodeCats.get(1).equals("query")) {
 					requestMap.put("query", token);
 				} else {
-					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+					ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 					topSequenceOperands.add(token);
 				}
 			} 
@@ -600,17 +605,17 @@
 			// Step I: get info
 			// fill group
 			alignGroup.put("@type", "korap:group");
-			alignGroup.put("relation", "left-align");
-			alignGroup.put("operands", new ArrayList<Object>());
+			alignGroup.put("@relation", "left-align");
+			alignGroup.put("@operands", new ArrayList<Object>());
 			// Step II: decide where to put the group
 			// add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
 			if (node.getParent().getChildCount()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(alignGroup); 
 			} else if (openNodeCats.get(2).equals("query")) {
 				requestMap.put("query", alignGroup);	
 			} else {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(alignGroup); 
 			}
 			visited.add(node.getChild(0));
@@ -629,12 +634,12 @@
 			objectStack.push(elem);
 			stackedObjects++;
 			// Step II: fill object (token values) and put into containing sequence
-			elem.put("@type", "korap:element");
+			elem.put("@type", "korap:span");
 			String value = node.getChild(1).toStringTree(poliqarpParser);
 			elem.put("@value", 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")
 			if (node.getParent().getChildCount()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(elem);
 			}
 			visited.add(node.getChild(0));
@@ -661,13 +666,13 @@
 			}
 			span.put("@type", "korap:group");
 			span.put("class", id);
-			span.put("operands", spanOperands);
+			span.put("@operands", spanOperands);
 			// Step II: decide where to put the span
 			// add span 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 relevant info)
 			if (openNodeCats.get(2).equals("query") && node.getParent().getChildCount() == 1) {
 				requestMap.put("query", span);	
 			} else if (objectStack.size()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(span); 
 			} 
 			// ignore leading and trailing braces
@@ -686,19 +691,19 @@
 			// Step I: get info
 			String relation = QueryUtils.getNodeCat(node.getChild(0));
 			positionGroup.put("@type", "korap:group");
-			positionGroup.put("relation", "position");
-			positionGroup.put("position", relation.toLowerCase());
+			positionGroup.put("@relation", "position");
+			positionGroup.put("@position", relation.toLowerCase());
 //			positionGroup.put("@subtype", "incl");
-			positionGroup.put("operands", posOperands);
+			positionGroup.put("@operands", posOperands);
 			// Step II: decide where to put the group
 			// add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
 			if (node.getParent().getChildCount()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(positionGroup); 
 			} else if (openNodeCats.get(2).equals("query")) {
 				requestMap.put("query", positionGroup);	
 			} else {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 				topSequenceOperands.add(positionGroup); 
 			}
 		}
@@ -720,19 +725,19 @@
 				}
 			}
 			shrinkGroup.put("@type", "korap:group");
-			shrinkGroup.put("relation", "shrink");
-			shrinkGroup.put(type, operandClass);
-			shrinkGroup.put("operands", shrinkOperands);
+			shrinkGroup.put("@relation", type);
+			shrinkGroup.put("classRef", operandClass);
+			shrinkGroup.put("@operands", shrinkOperands);
 			int i=1;
 			// Step II: decide where to put the group
 			// add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
 			if (node.getParent().getChildCount()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("operands"); // this shrinkGroup is on top
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("@operands"); // this shrinkGroup is on top
 				topSequenceOperands.add(shrinkGroup);
 			} else if (openNodeCats.get(2).equals("query")) {
 				requestMap.put("query", shrinkGroup);	
 			} else if (objectStack.size()>1) {
-				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("operands");
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("@operands");
 				topSequenceOperands.add(shrinkGroup); 
 			} 
 			visited.add(node.getChild(0));
@@ -742,8 +747,10 @@
 		if (nodeCat.equals("occ")) {
 			ParseTree occChild = node.getChild(0);
 			String repetition = occChild.toStringTree(poliqarpParser);
-			curOccGroup.put("relation", "repetition");
-			curOccGroup.put("quantifier", repetition);
+			String[] minmax = parseRepetition(repetition);
+			curOccGroup.put("@relation", "repetition");
+			curOccGroup.put("@min", minmax[0]);
+			curOccGroup.put("@max", minmax[1]);
 			visited.add(occChild);
 		}
 				
@@ -815,6 +822,19 @@
 		openNodeCats.pop();
 	}
 
+	private String[] parseRepetition(String repetition) {
+		if (repetition.equals("*")) {
+			return new String[] {"0", "100"};
+		} else if (repetition.equals("+")) {
+			return new String[] {"1", "100"};
+		} else if (repetition.equals("?")) {
+			return new String[] {"0", "1"};
+		} else {
+			repetition = repetition.substring(1, repetition.length()-1); // remove braces
+			return repetition.split(",");
+		}
+	}
+
 	private String[] parseEmptySegments(ParseTree emptySegments) {
 		String[] minmax = new String[2];
 		Integer min = 0;
@@ -824,8 +844,6 @@
 			child = emptySegments.getChild(i);
 			ParseTree nextSibling = emptySegments.getChild(i+1);
 			String nextSiblingString = nextSibling.toStringTree(); 
-			System.err.println("FOO "+child.toStringTree());
-			System.out.println("FOO "+nextSiblingString);
 			if (child.toStringTree().equals("[]")) {
 				if (nextSiblingString.equals("?")) {
 					max++;
@@ -861,7 +879,7 @@
 		LinkedHashMap<String,Object> occGroup = new LinkedHashMap<String,Object>();
 		occGroup.put("@type", "korap:group");
 		ArrayList<Object> groupOperands = new ArrayList<Object>();
-		occGroup.put("operands", groupOperands);
+		occGroup.put("@operands", groupOperands);
 		curOccGroup = occGroup;
 		objectStack.push(occGroup);
 		stackedObjects++;
@@ -870,7 +888,7 @@
 				requestMap.put("query", occGroup);
 		// embed in super sequence
 		} else {
-			ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+			ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("@operands");
 			topSequenceOperands.add(occGroup);
 		}		
 	}
@@ -921,6 +939,9 @@
 				"startswith(<s>,[][base=der][base=Mann])",
 //				"[][base=Mann]",
 				"[base=Hund][][base=Katze][][][base=Maus]",
+				"[base=Hund][]?[][base=Katze]",
+				"split([base=der]{[base=Mann]})",
+				"[base=Mann&gen=m&cas=N]"
 		};
 		PoliqarpPlusTree.debug=true;
 		for (String q : queries) {
diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/CosmasTreeTest.java
index 0d7db7a..efe86f6 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/CosmasTreeTest.java
@@ -26,7 +26,7 @@
 	
 	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, relation={@id=korap:relation, @type=korap:relation#types}, class={@id=korap:class, @type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}";
+		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, @operands={@id=korap:operands, @container=@list}, @relation={@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 CosmasTree("Test");
 		assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
 	}
@@ -36,31 +36,31 @@
 	public void testSingleToken() throws QueryException {
 		query="der";
 		String single1 = 
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}";
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(single1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="Mann";
 		String single2 = 
-				"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}";
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(single2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query="&Mann";
 		String single3 = 
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}";
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=lemma, @relation==}}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(single3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
-//	@Test
+	@Test
 	public void testMORPH() throws QueryException {
 		query="#MORPH(V)";
 		String morph1 = 
-					"{@type=korap:token, @value={@type=korap:term, @value=pos:v, relation==}}";
+					"{@type=korap:token, @value={@type=korap:term, @value=V, @relation==}}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(morph1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -70,9 +70,9 @@
 	public void testSequence() throws QueryException {
 		query="der Mann";
 		String seq1 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -80,10 +80,10 @@
 		
 		query="der Mann schläft";
 		String seq2 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:schläft, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=schläft, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -91,11 +91,11 @@
 		
 		query="der Mann schläft lang";
 		String seq3 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:schläft, relation==}}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:lang, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=schläft, @attr=orth, @relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=lang, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -106,9 +106,9 @@
 	public void testOPOR() throws QueryException {
 		query="Sonne oder Mond";
 		String disj1 = 
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 					"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -116,12 +116,12 @@
 		
 		query="(Sonne scheint) oder Mond";
 		String disj2 = 
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:scheint, relation==}}" +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=scheint, @attr=orth, @relation==}}" +
 						"]}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 					"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -129,14 +129,14 @@
 		
 		query="(Sonne scheint) oder (Mond scheint)";
 		String disj3 = 
-				"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:scheint, relation==}}" +
+				"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=scheint, @attr=orth, @relation==}}" +
 						"]}," +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:scheint, relation==}}" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=scheint, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}";
 		ppt = new CosmasTree(query);
@@ -149,12 +149,12 @@
 	public void testOPORAND() throws QueryException {
 		query="(Sonne oder Mond) und scheint";
 		String orand1 = 
-				"{@type=korap:group, relation=and, operands=[" +
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+				"{@type=korap:group, @relation=and, @operands=[" +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 					"]}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:scheint, relation==}}" +
+					"{@type=korap:token, @value={@type=korap:term, @value=scheint, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -162,11 +162,11 @@
 		
 		query="scheint und (Sonne oder Mond)";
 		String orand2 = 
-				"{@type=korap:group, relation=and, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:scheint, relation==}}," +
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+				"{@type=korap:group, @relation=and, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=scheint, @attr=orth, @relation==}}," +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new CosmasTree(query);
@@ -178,13 +178,13 @@
 	public void testOPPROX() throws QueryException {
 		query="Sonne /+w1:4 Mond";
 		String prox1 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=plus, min=1, max=4}" +
+					"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:distance, @measure=w, @min=1, @max=4}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+						"@operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -193,17 +193,17 @@
 		
 		query="Sonne /+w1:4,s0,p1:3 Mond";
 		String prox2 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:group, relation=and, operands=[" +
-								"{@type=korap:distance, measure=w, direction=plus, min=1, max=4}," +
-								"{@type=korap:distance, measure=s, direction=both, min=0, max=0}," +
-								"{@type=korap:distance, measure=p, direction=both, min=1, max=3}" +
+					"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:group, @relation=and, @operands=[" +
+								"{@type=korap:distance, @measure=w, @min=1, @max=4}," +
+								"{@type=korap:distance, @measure=s, @min=0, @max=0}," +
+								"{@type=korap:distance, @measure=p, @min=1, @max=3}" +
 							"]}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+						"@operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -212,17 +212,17 @@
 		
 		query="Sonne %+w1:4,s0,p1:3 Mond";
 		String prox3 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=excl, " +
-						"constraint=[" +
-							"{@type=korap:group, relation=and, operands=[" +
-								"{@type=korap:distance, measure=w, direction=plus, min=1, max=4}," +
-								"{@type=korap:distance, measure=s, direction=both, min=0, max=0}," +
-								"{@type=korap:distance, measure=p, direction=both, min=1, max=3}" +
+				"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:group, @relation=and, @operands=[" +
+								"{@type=korap:distance, @measure=w, @min=1, @max=4, @exclude=true}," +
+								"{@type=korap:distance, @measure=s, @min=0, @max=0, @exclude=true}," +
+								"{@type=korap:distance, @measure=p, @min=1, @max=3, @exclude=true}" +
 							"]}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+						"@operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -231,13 +231,13 @@
 		
 		query="Sonne /+w4 Mond";
 		String prox4 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=plus, min=0, max=4}" +
+					"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:distance, @measure=w, @min=0, @max=4}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+						"@operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -246,13 +246,13 @@
 		
 		query="Sonne /-w4 Mond";
 		String prox5 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=plus, min=0, max=4}" +
+					"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:distance, @measure=w, @min=0, @max=4}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}" +
+						"@operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -261,23 +261,23 @@
 	}
 	
 	@Test
-	public void testNestedOPPROX() throws QueryException {	
+	public void testOPPROXNested() throws QueryException {	
 		query="Sonne /-w4 Mond /+w2 Sterne";
 		String prox6 = 
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=plus, min=0, max=4}" +
+					"{@type=korap:sequence, @inOrder=true, " +
+						"@constraints=[" +
+							"{@type=korap:distance, @measure=w, @min=0, @max=4}" +
 						"], " +
-						"operands=[" +
-							"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
-								"constraint=[" +
-									"{@type=korap:distance, measure=w, direction=plus, min=0, max=2}" +
+						"@operands=[" +
+							"{@type=korap:sequence, @inOrder=true, " +
+								"@constraints=[" +
+									"{@type=korap:distance, @measure=w, @min=0, @max=2}" +
 								"], " +
-								"operands=[" +
-									"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}," +
-									"{@type=korap:token, @value={@type=korap:term, @value=orth:Sterne, relation==}}" +
+								"@operands=[" +
+									"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}," +
+									"{@type=korap:token, @value={@type=korap:term, @value=Sterne, @attr=orth, @relation==}}" +
 								"]}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}" +
 						"]" +
 					"}";
 		ppt = new CosmasTree(query);
@@ -289,11 +289,11 @@
 	public void testOPIN() throws QueryException {
 		query="wegen #IN <s>";
 		String opin1 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=position, position=contains, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -303,11 +303,11 @@
 		
 		query="wegen #IN(L) <s>";
 		String opin2 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=position, position=startswith, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -317,11 +317,11 @@
 		
 		query="wegen #IN(%, L) <s>";
 		String opin3 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=position, position=startswith, @subtype=excl, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=position, @position=startswith, @exclude=true, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -331,11 +331,11 @@
 		
 		query="wegen #IN('FE,ALL,%,MIN') <s>";
 		String opin4 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=position, position=ident, range=all, @subtype=excl, grouping=false, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=position, @position=ident, range=all, @exclude=true, grouping=false, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -348,11 +348,11 @@
 	public void testOPOV() throws QueryException {
 		query="wegen #OV <s>";
 		String opov1 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=overlap, position=any, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=overlaps, @position=any, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -362,11 +362,11 @@
 		
 		query="wegen #OV(L) <s>";
 		String opov2 = 
-					"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-						"{@type=korap:group, relation=overlap, position=startswith, operands=[" +
-							"{@type=korap:element, @value=s}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}" +
+					"{@type=korap:group, @relation=submatch, @classRef=1, @operands=[" +
+						"{@type=korap:group, @relation=overlaps, @position=startswith, @operands=[" +
+							"{@type=korap:span, @value=s}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=wegen, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					"]}";
@@ -379,9 +379,9 @@
 	public void testOPNOT() throws QueryException {
 		query="Sonne nicht Mond";
 		String opnot1 = 
-					"{@type=korap:group, relation=not, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}" +
+					"{@type=korap:group, @relation=not, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Sonne, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mond, @attr=orth, @relation==}}" +
 					"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -396,13 +396,13 @@
 		// 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=korap:group, relation=shrink, shrink=first, operands=[" +
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, constraint=[" +
-						"{@type=korap:distance, measure=w, direction=both, min=3, max=5}" +
+				"{@type=korap:group, @relation=submatch, @spanRef=[0,1], @operands=[" +
+					"{@type=korap:sequence, @inOrder=false, @constraints=[" +
+						"{@type=korap:distance, @measure=w, @min=3, @max=5}" +
 					"]," +
-					"operands = [" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+					"@operands = [" +
+						"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new CosmasTree(query);
@@ -411,19 +411,19 @@
 		
 		query="#BEG(der /w3:5 Mann) /+w10 kommt"; // nesting #BEG() in a distance group
 		String beg2 = 
-				"{@type=korap:group, relation=distance, match=operands, @subtype=incl, constraint=[" +
-					"{@type=korap:distance, measure=w, direction=plus, min=0, max=10}" +
-				"], operands=[" +
-					"{@type=korap:group, relation=shrink, shrink=first, operands=[" +
-						"{@type=korap:group, relation=distance, match=operands, @subtype=incl, constraint=[" +
-							"{@type=korap:distance, measure=w, direction=both, min=3, max=5}" +
+				"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+					"{@type=korap:distance, @measure=w, @min=0, @max=10}" +
+				"], @operands=[" +
+					"{@type=korap:group, @relation=submatch, @spanRef=[0,1], @operands=[" +
+						"{@type=korap:sequence, @inOrder=false, @constraints=[" +
+							"{@type=korap:distance, @measure=w, @min=3, @max=5}" +
 						"]," +
-						"operands = [" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+						"@operands = [" +
+							"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:kommt, relation==}}" +
+					"{@type=korap:token, @value={@type=korap:term, @value=kommt, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -431,13 +431,13 @@
 		
 		query="#END(der /w3:5 Mann)";
 		String end1 = 
-				"{@type=korap:group, relation=shrink, shrink=last, operands=[" +
-					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, constraint=[" +
-						"{@type=korap:distance, measure=w, direction=both, min=3, max=5}" +
-					"]," +
-					"operands = [" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"{@type=korap:group, @relation=submatch, @spanRef=[-1,1], @operands=[" +
+					"{@type=korap:sequence, @inOrder=false, @constraints=[" +
+						"{@type=korap:distance, @measure=w, @min=3, @max=5}" +
+					"], " +
+					"@operands = [" +
+						"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new CosmasTree(query);
@@ -450,7 +450,7 @@
 	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=korap:element, @value=s}";
+		String elem1 = "{@type=korap:span, @value=s}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(elem1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -460,13 +460,13 @@
 	public void testOPALL() throws QueryException {
 		query="#ALL(gehen /w1:10 voran)";
 		String all1 =
-				"{@type=korap:group, relation=distance, match=all, @subtype=incl, " +
-					"constraint=[" +
-						"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
+				"{@type=korap:sequence, @inOrder=false, " +
+					"@constraints=[" +
+						"{@type=korap:distance, @measure=w, @min=1, @max=10}" +
 					"], " +
-					"operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
+					"@operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=gehen, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=voran, @attr=orth, @relation==}}" +
 					"]" +
 				"}";
 		ppt = new CosmasTree(query);
@@ -478,13 +478,13 @@
 	public void testOPNHIT() throws QueryException {
 		query="#NHIT(gehen /w1:10 voran)";
 		String nhit1 = 
-				"{@type=korap:group, relation=distance, match=between, @subtype=incl, " +
-					"constraint=[" +
-						"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
+				"{@type=korap:sequence, @inOrder=false, " +
+					"@constraints=[" +
+						"{@type=korap:distance, @measure=w, @min=1, @max=10}" +
 					"], " +
-					"operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
+					"@operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=gehen, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=voran, @attr=orth, @relation==}}" +
 					"]" +
 				"}";
 		ppt = new CosmasTree(query);
@@ -496,9 +496,9 @@
 	public void testOPBED() throws QueryException {
 		query = "#BED(der , sa)";
 		String bed1 = 
-				"{@type=korap:group, relation=position, position=startswith, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}" +
+				"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -506,11 +506,11 @@
 		
 		query = "#BED(der Mann , +pe)";
 		String bed2 = 
-				"{@type=korap:group, relation=position, position=endswith, operands=[" +
-					"{@type=korap:element, @value=p}," +
-					"{@type=korap:sequence, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"{@type=korap:group, @relation=position, @position=endswith, @operands=[" +
+					"{@type=korap:span, @value=p}," +
+					"{@type=korap:sequence, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new CosmasTree(query);
@@ -519,19 +519,19 @@
 		
 		query = "#BED(der Mann , sa,-pa)";
 		String bed3 = 
-				"{@type=korap:group, relation=and, operands=[" +
-					"{@type=korap:group, relation=position, position=startswith, operands=[" +
-						"{@type=korap:element, @value=s}," +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"{@type=korap:group, @relation=and, @operands=[" +
+					"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+						"{@type=korap:span, @value=s}," +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}," +
-					"{@type=korap:group, relation=position, position=startswith, @subtype=excl, operands=[" +
-						"{@type=korap:element, @value=p}," +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+					"{@type=korap:group, @relation=position, @position=startswith, @exclude=true, @operands=[" +
+						"{@type=korap:span, @value=p}," +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}" +
 				"]}";
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 5561d16..6090867 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -25,7 +25,7 @@
 	
 	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, relation={@id=korap:relation, @type=korap:relation#types}, class={@id=korap:class, @type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}";
+		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, @operands={@id=korap:operands, @container=@list}, @relation={@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")));
 	}
@@ -33,30 +33,30 @@
 	@Test
 	public void testSingleTokens() throws QueryException {
 		// [base=Mann]
-		String token1 = "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}";
+		String token1 = "{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}";
 		assertTrue(equalsQueryContent(token1, "[base=Mann]"));
 		
 		// [orth!=Frau]
-		String token2 = "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation=!=}}";
+		String token2 = "{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation=!=}}";
 		assertTrue(equalsQueryContent(token2, "[orth!=Frau]"));
 		
 		// [!p=NN]
-		String token3 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation=!=}}";
+		String token3 = "{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation=!=}}";
 		assertTrue(equalsQueryContent(token3, "[!p=NN]"));
 		
 		// [!p!=NN]
-		String token4 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}";
+		String token4 = "{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation==}}";
 		assertTrue(equalsQueryContent(token4, "[!p!=NN]"));
 	}
 	
 	@Test
 	public void testElements() throws QueryException {
 		// <s>
-		String elem1 = "{@type=korap:element, @value=s}";
+		String elem1 = "{@type=korap:span, @value=s}";
 		assertTrue(equalsQueryContent(elem1, "<s>"));
 		
 		// <vp>
-		String elem2 = "{@type=korap:element, @value=vp}";
+		String elem2 = "{@type=korap:span, @value=vp}";
 		assertTrue(equalsQueryContent(elem2, "<vp>"));
 	}
 	
@@ -64,12 +64,12 @@
 	public void testEmptyTokens() throws QueryException {
 		// [base=der][][base=Mann]
 		String et1 = 
-			"{@type=korap:group, relation=distance, @subtype=incl, constraint=[" +
-				"{@type=korap:distance, measure=w, direction=plus, min=1, max=1}" +
+			"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+				"{@type=korap:distance, measure=w, min=1, max=1}" +
 			"], " +
-			"operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+			"@operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -77,12 +77,12 @@
 		
 		// [base=der][][][base=Mann]
 		String et2 = 
-			"{@type=korap:group, relation=distance, @subtype=incl, constraint=[" +
-				"{@type=korap:distance, measure=w, direction=plus, min=2, max=2}" +
+			"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+				"{@type=korap:distance, measure=w, min=2, max=2}" +
 			"], " +
-			"operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+			"@operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][][base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -90,12 +90,12 @@
 		
 		// [base=der][][]?[base=Mann]
 		String et3 = 
-			"{@type=korap:group, relation=distance, @subtype=incl, constraint=[" +
-				"{@type=korap:distance, measure=w, direction=plus, min=1, max=2}" +
+			"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+				"{@type=korap:distance, measure=w, min=1, max=2}" +
 			"], " +
-			"operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+			"@operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("[base=der][][]?[base=Mann]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -104,31 +104,32 @@
 		
 		// startswith(<s>, [][base=Mann]
 		String et4 = 
-			"{@type=korap:group, relation=position, position=startswith, operands=[" +
-				"{@type=korap:element, @value=s}," +
-				"{@type=korap:sequence, offset-min=1, offset-max=1, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+			"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +	
+				"{@type=korap:span, @value=s}," +
+				"{@type=korap:sequence, offset-min=1, offset-max=1, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 				"]}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("startswith(<s>, [][base=Mann])");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(et4.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
+		// [base=der][]{2,5}[base=Mann][]?[][base=Frau]   nested distances
 		String et5 = 
-				"{@type=korap:group, relation=distance, @subtype=incl, constraint=[" +
-					"{@type=korap:distance, measure=w, direction=plus, min=1, max=1}" +
+				"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+					"{@type=korap:distance, measure=w, min=2, max=5}" +
 				"], " +
-				"operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-					"{@type=korap:group, relation=distance, @subtype=incl, constraint=[" +
-						"{@type=korap:distance, measure=w, direction=plus, min=2, max=2}" +
+				"@operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+					"{@type=korap:sequence, @inOrder=true, @constraints=[" +
+						"{@type=korap:distance, measure=w, min=1, max=2}" +
 					"], " +
-					"operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:Frau, relation==}}" +
+					"@operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=base, @relation==}}" +
 					"]}" +
 				"]}";
-		ppt = new PoliqarpPlusTree("[base=der][][base=Mann][][][base=Frau]");
+		ppt = new PoliqarpPlusTree("[base=der][]{2,5}[base=Mann][]?[][base=Frau]");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(et5.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
@@ -139,13 +140,13 @@
 		// [base=Mann&(cas=N|cas=A)]
 		String cof1 = 
 			"{@type=korap:token, @value=" +
-				"{@type=korap:group, operands=[" +
-					"{@type=korap:term, @value=base:Mann, relation==}," +
-					"{@type=korap:group, operands=[" +
-						"{@type=korap:term, @value=cas:N, relation==}," +
-						"{@type=korap:term, @value=cas:A, relation==}" +
-					"], relation=or}" +
-				"], relation=and}" +
+				"{@type=korap:group, @operands=[" +
+					"{@type=korap:term, @value=Mann, @attr=base, @relation==}," +
+					"{@type=korap:group, @operands=[" +
+						"{@type=korap:term, @value=N, @attr=cas, @relation==}," +
+						"{@type=korap:term, @value=A, @attr=cas, @relation==}" +
+					"], @relation=or}" +
+				"], @relation=and}" +
 			"}";
 		ppt = new PoliqarpPlusTree("[base=Mann&(cas=N|cas=A)]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -156,25 +157,38 @@
 		    new PoliqarpPlusTree(" [ base=Mann & ( cas=N | cas=A)] ").getRequestMap().get("query").toString(),
 		    new PoliqarpPlusTree("[base=Mann &(cas=N|cas=A)]").getRequestMap().get("query").toString()
 	        );
+		
+		// [base=Mann&cas=N&gen=m]
+		String cof2 = 
+			"{@type=korap:token, @value=" +
+				"{@type=korap:group, @operands=[" +
+					"{@type=korap:term, @value=Mann, @attr=base, @relation==}," +
+					"{@type=korap:term, @value=N, @attr=cas, @relation==}," +
+					"{@type=korap:term, @value=m, @attr=gen, @relation==}" +
+				"], @relation=and}" +
+			"}";
+		ppt = new PoliqarpPlusTree("[base=Mann&cas=N&gen=m]");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(cof2.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
 	public void testOccurrence() throws QueryException {
 		// [base=foo]*
-		String occ1 = "{@type=korap:group, operands=[" +
-					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
-					  "], relation=repetition, quantifier=* }"; 
+		String occ1 = "{@type=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					  "], @relation=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=korap:sequence, operands=[" +
-					"{@type=korap:group, operands=[" +
-					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
-					"], relation=repetition, quantifier=* }," +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					"], @relation=repetition, @min=0, @max=100 }," +
+					"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -182,11 +196,11 @@
 		
 		// [base=bar][base=foo]*
 		String occ3 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-					"{@type=korap:group, operands=[" +
-					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
-					"], relation=repetition, quantifier=* }" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+					"{@type=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					"], @relation=repetition, @min=0, @max=100 }" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=bar][base=foo]*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -194,26 +208,26 @@
 		
 		// ([base=bar][base=foo])*
 		String occ4 = 
-				"{@type=korap:group, operands=[" +	
-					"{@type=korap:sequence, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+				"{@type=korap:group, @operands=[" +	
+					"{@type=korap:sequence, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
 					"]}" +
-				"], relation=repetition, quantifier=* }" ;
+				"], @relation=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=korap:sequence, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:group, operands=[" +	
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:group, @operands=[" +	
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
 						"]}" +
-					"], relation=repetition, quantifier=* }" +
+					"], @relation=repetition, @min=0, @max=100 }" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s>([base=bar][base=foo])*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -221,15 +235,15 @@
 		
 		// <s><np>([base=bar][base=foo])*
 		String occ6 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:element, @value=np}," +
-					"{@type=korap:group, operands=[" +	
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:span, @value=np}," +
+					"{@type=korap:group, @operands=[" +	
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
 						"]}" +
-					"], relation=repetition, quantifier=* }" +
+					"], @relation=repetition, @min=0, @max=100 }" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -239,16 +253,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=korap:sequence, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:element, @value=np}," +
-					"{@type=korap:group, operands=[" +	
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:span, @value=np}," +
+					"{@type=korap:group, @operands=[" +	
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
 						"]}" +
-					"], relation=repetition, quantifier=* }," +
-					"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+					"], @relation=repetition, @min=0, @max=100 }," +
+					"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation==}}" +
 				"]}" ;
 		ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*[p=NN]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -256,34 +270,58 @@
 		
 		// ([base=bar][base=foo])*[p=NN]
 		String occ8 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:group, operands=[" +	
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:group, @operands=[" +	
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=bar, @attr=base, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
 						"]}" +
-					"], relation=repetition, quantifier=* }," +
-					"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+					"], @relation=repetition, @min=0, @max=100 }," +
+					"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation==}}" +
 				"]}" ;
 		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=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					  "], @relation=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=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					  "], @relation=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=korap:group, @operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=foo, @attr=base, @relation==}}" +
+					  "], @relation=repetition, @min=2, @max=5}"; 
+		ppt = new PoliqarpPlusTree("[base=foo]{2,5}");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(occ11.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
 	public void testTokenSequence() throws QueryException {
 		// [base=Mann][orth=Frau]
-		String seq1 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
-				"{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+		String seq1 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}, " +
+				"{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation==}}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "[base=Mann][orth=Frau]"));
 		
 		// [base=Mann][orth=Frau][p=NN]
-		String seq2 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
-				"{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}, " +
-				"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+		String seq2 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}, " +
+				"{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation==}}, " +
+				"{@type=korap:token, @value={@type=korap:term, @value=NN,@attr=p, @relation==}}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "[base=Mann][orth=Frau][p=NN]"));
 	}
@@ -292,12 +330,12 @@
 	public void testDisjSegments() throws QueryException {
 		// ([base=der]|[base=das])[base=Schild]
 		String disj1 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:das, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=das, @attr=base, @relation==}}" +
 					"]}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:Schild, relation==}}" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Schild, @attr=base, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=der]|[base=das])[base=Schild]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -305,11 +343,11 @@
 		
 		// [base=Schild]([base=der]|[base=das])
 		String disj2 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:Schild, relation==}}," +
-					"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:das, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Schild, @attr=base, @relation==}}," +
+					"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=das, @attr=base, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[base=Schild]([base=der]|[base=das])");
@@ -320,24 +358,24 @@
 	@Test
 	public void testTokenElemSequence() throws QueryException {
 		// [base=Mann]<vp>
-		String seq1 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
-				"{@type=korap:element, @value=vp}" +
+		String seq1 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}, " +
+				"{@type=korap:span, @value=vp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "[base=Mann]<vp>"));
 		
 		// <vp>[base=Mann]
-		String seq2 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:element, @value=vp}, "+
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}} " +
+		String seq2 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:span, @value=vp}, "+
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}} " +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "<vp>[base=Mann]"));
 		
 		// <vp>[base=Mann]<pp>
-		String seq3 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:element, @value=vp}, "+
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
-				"{@type=korap:element, @value=pp} "+
+		String seq3 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:span, @value=vp}, "+
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}, " +
+				"{@type=korap:span, @value=pp} "+
 				"]}";
 		assertTrue(equalsQueryContent(seq3, "<vp>[base=Mann]<pp>"));
 	}
@@ -345,17 +383,17 @@
 	@Test
 	public void testElemSequence() throws QueryException {
 		// <np><vp>
-		String seq1 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:element, @value=np}," +
-				"{@type=korap:element, @value=vp}" +
+		String seq1 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:span, @value=np}," +
+				"{@type=korap:span, @value=vp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq1, "<np><vp>"));
 		
 		// <np><vp><pp>
-		String seq2 = "{@type=korap:sequence, operands=[" +
-				"{@type=korap:element, @value=np}," +
-				"{@type=korap:element, @value=vp}," +
-				"{@type=korap:element, @value=pp}" +
+		String seq2 = "{@type=korap:sequence, @operands=[" +
+				"{@type=korap:span, @value=np}," +
+				"{@type=korap:span, @value=vp}," +
+				"{@type=korap:span, @value=pp}" +
 				"]}";
 		assertTrue(equalsQueryContent(seq2, "<np><vp><pp>"));
 	}
@@ -363,51 +401,53 @@
 	@Test 
 	public void testClasses() throws QueryException {
 		// {[base=Mann]}
-		String cls1 = "{@type=korap:group, class=0, operands=[" +
-				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+		String cls1 = "{@type=korap:group, class=0, @operands=[" +
+				"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 				"]}";
 		assertTrue(equalsQueryContent(cls1, "{[base=Mann]}"));
 		
 		// {[base=Mann][orth=Frau]}
-		String cls2 = "{@type=korap:group, class=0, operands=[" +
-				 "{@type=korap:sequence, operands=[" +
-				  "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
-				  "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+		String cls2 = "{@type=korap:group, class=0, @operands=[" +
+				 "{@type=korap:sequence, @operands=[" +
+				  "{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}," +
+				  "{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation==}}" +
 				 "]}" +
 				"]}";
 		assertTrue(equalsQueryContent(cls2, "{[base=Mann][orth=Frau]}"));
 		
 		// [p=NN]{[base=Mann][orth=Frau]}
-		String cls3 = "{@type=korap:sequence, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}," +
-						"{@type=korap:group, class=0, operands=[" +
-							"{@type=korap:sequence, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
-								"{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+		String cls3 = "{@type=korap:sequence, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation==}}," +
+						"{@type=korap:group, class=0, @operands=[" +
+							"{@type=korap:sequence, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}," +
+								"{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation==}}" +
 							"]}" +
 						"]}" +
 					  "]}";
 		assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}"));
 		
 		// {[base=Mann][orth=Frau]}[p=NN]
-		String cls4 = "{@type=korap:sequence, operands=[" +
-						"{@type=korap:group, class=0, operands=[" +
-						   "{@type=korap:sequence, operands=[" +
-						     "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
-						     "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+		String cls4 = "{@type=korap:sequence, @operands=[" +
+						"{@type=korap:group, class=0, @operands=[" +
+						   "{@type=korap:sequence, @operands=[" +
+						     "{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}," +
+						     "{@type=korap:token, @value={@type=korap:term, @value=Frau, @attr=orth, @relation==}}" +
 						   "]}" +
 						"]}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+						"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @relation==}}" +
 					  "]}";
-		assertTrue(equalsQueryContent(cls4, "{[base=Mann][orth=Frau]}[p=NN]"));
+		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=korap:group, class=2, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-						   "{@type=korap:group, class=1, operands=[" +
-						     "{@type=korap:token, @value={@type=korap:term, @value=tt/p:ADJA, relation==}}" +
+		String cls5 = "{@type=korap:group, class=2, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+						   "{@type=korap:group, class=1, @operands=[" +
+						     "{@type=korap:token, @value={@type=korap:term, @value=ADJA, @attr=p, @foundry=tt, @relation==}}" +
 						   "]}," +
-						   "{@type=korap:token, @value={@type=korap:term, @value=mate/p:NN, relation==}}" + 
+						   "{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @foundry=mate, @relation==}}" + 
 						"]}" +
 					  "]}";
 		ppt = new PoliqarpPlusTree("{2: {1:[tt/p=ADJA]}[mate/p=NN]}");
@@ -418,25 +458,25 @@
 	@Test
 	public void testPositions() throws QueryException {
 		// contains(<s>,<np>)
-		String pos1 = "{@type=korap:group, relation=position, position=contains, operands=[" +
-				  "{@type=korap:element, @value=s}," +
-				  "{@type=korap:element, @value=np}" +
+		String pos1 = "{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+				  "{@type=korap:span, @value=s}," +
+				  "{@type=korap:span, @value=np}" +
 				"]}";
 		assertTrue(equalsQueryContent(pos1, "contains(<s>,<np>)"));
 		
 		// contains(<s>,[base=Mann])
-		String pos2 = "{@type=korap:group, relation=position, position=contains, operands=[" +
-				  "{@type=korap:element, @value=s}," +
-				  "{@type=korap:token, @value= {@type=korap:term, @value=base:Mann, relation==}}" +
+		String pos2 = "{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+				  "{@type=korap:span, @value=s}," +
+				  "{@type=korap:token, @value= {@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 				"]}";
 		assertTrue(equalsQueryContent(pos2, "contains(<s>,[base=Mann])"));
 		
 		// contains(<s>,[orth=der][orth=Mann])
-		String pos3 = "{@type=korap:group, relation=position, position=contains, operands=[" +
-				  	"{@type=korap:element, @value=s}," +
-				  	"{@type=korap:sequence, operands=[" +
-				  		"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-				  		"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+		String pos3 = "{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+				  	"{@type=korap:span, @value=s}," +
+				  	"{@type=korap:sequence, @operands=[" +
+				  		"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+				  		"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 				  	"]}" +
 				  "]}";
 		ppt = new PoliqarpPlusTree("contains(<s>,[orth=der][orth=Mann])");
@@ -445,11 +485,11 @@
 		
 		// [base=Auto]contains(<s>,[base=Mann])
 		String pos4 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=base:Auto, relation==}}," +
-					"{@type=korap:group, relation=position, position=contains, operands=[" +
-				  		"{@type=korap:element, @value=s}," +
-				  		"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Auto, @attr=base, @relation==}}," +
+					"{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+				  		"{@type=korap:span, @value=s}," +
+				  		"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @relation==}}" +
 				  	"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[base=Auto]contains(<s>,[base=Mann])");
@@ -461,11 +501,11 @@
 	public void testNestedPositions() throws QueryException {
 		// contains(<s>,startswith(<np>,[orth=Der]))
 		String npos1 = 
-			"{@type=korap:group, relation=position, position=contains, operands=[" +
-				"{@type=korap:element, @value=s}," +
-				"{@type=korap:group, relation=position, position=startswith, operands=[" +
-					"{@type=korap:element, @value=np}," +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}" +
+			"{@type=korap:group, @relation=position, @position=contains, @operands=[" +
+				"{@type=korap:span, @value=s}," +
+				"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+					"{@type=korap:span, @value=np}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}" +
 				"]}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("contains(<s>, startswith(<np>,[orth=Der]))");
@@ -477,11 +517,11 @@
 	public void testShrinkSplit() throws QueryException {
 		// shrink([orth=Der]{[orth=Mann]})
 		String shr1 = 
-			"{@type=korap:group, relation=shrink, shrink=0, operands=[" +
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
-					"{@type=korap:group, class=0, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+			"{@type=korap:group, @relation=shrink, classRef=0, @operands=[" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}," +
+					"{@type=korap:group, class=0, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}" +
 			"]}";
@@ -491,13 +531,13 @@
 		
 		// shrink([orth=Der]{[orth=Mann][orth=geht]})
 		String shr2 = 
-			"{@type=korap:group, relation=shrink, shrink=0, operands=[" +
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
-					"{@type=korap:group, class=0, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
+			"{@type=korap:group, @relation=shrink, classRef=0, @operands=[" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}," +
+					"{@type=korap:group, class=0, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=geht, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}" +
 				"]}" +
@@ -508,13 +548,13 @@
 		
 		// shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})
 		String shr3 = 
-			"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
-					"{@type=korap:group, class=1, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
+			"{@type=korap:group, @relation=shrink, classRef=1, @operands=[" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}," +
+					"{@type=korap:group, class=1, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=geht, @attr=orth, @relation==}}" +
 						"]}" +
 					"]}" +
 				"]}" +
@@ -525,11 +565,11 @@
 		
 		// shrink(1:startswith(<s>,{1:<np>}))
 		String shr4 = 
-			"{@type=korap:group, relation=shrink, shrink=1, operands=[" +
-				"{@type=korap:group, relation=position, position=startswith, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:group, class=1, operands=[" +
-						"{@type=korap:element, @value=np}" +
+			"{@type=korap:group, @relation=shrink, classRef=1, @operands=[" +
+				"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:group, class=1, @operands=[" +
+						"{@type=korap:span, @value=np}" +
 					"]}" +
 				"]}" +
 			"]}";
@@ -539,17 +579,17 @@
 		
 		// shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
 		String shr5 = 
-			"{@type=korap:group, relation=shrink, shrink=3, operands=[" +
-				"{@type=korap:group, relation=position, position=startswith, operands=[" +
-					"{@type=korap:element, @value=s}," +
-					"{@type=korap:group, class=3, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
-							"{@type=korap:group, class=1, operands=[" +
-								"{@type=korap:sequence, operands=[" +
-									"{@type=korap:token, @value={@type=korap:term, @value=mate/p:ADJA, relation==}}," +
-									"{@type=korap:group, class=2, operands=[" +
-										"{@type=korap:token, @value={@type=korap:term, @value=tt/p:NN, relation==}}" +
+			"{@type=korap:group, @relation=shrink, classRef=3, @operands=[" +
+				"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:group, class=3, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:sequence, @operands=[" +
+									"{@type=korap:token, @value={@type=korap:term, @value=ADJA, @attr=p, @foundry=mate, @relation==}}," +
+									"{@type=korap:group, class=2, @operands=[" +
+										"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @foundry=tt, @relation==}}" +
 									"]}" + 
 								"]}" +
 							"]}" +
@@ -560,14 +600,40 @@
 		ppt = new PoliqarpPlusTree("shrink(3:startswith(<s>,{3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) ");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(shr5.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		// split(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
+		String shr6 = 
+			"{@type=korap:group, @relation=split, classRef=3, @operands=[" +
+				"{@type=korap:group, @relation=position, @position=startswith, @operands=[" +
+					"{@type=korap:span, @value=s}," +
+					"{@type=korap:group, class=3, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=base, @relation==}}," +
+							"{@type=korap:group, class=1, @operands=[" +
+								"{@type=korap:sequence, @operands=[" +
+									"{@type=korap:token, @value={@type=korap:term, @value=ADJA, @attr=p, @foundry=mate, @relation==}}," +
+									"{@type=korap:group, class=2, @operands=[" +
+										"{@type=korap:token, @value={@type=korap:term, @value=NN, @attr=p, @foundry=tt, @relation==}}" +
+									"]}" + 
+								"]}" +
+							"]}" +
+						"]}" +
+					"]}" +
+				"]}" +
+			"]}";
+		ppt = new PoliqarpPlusTree("split(3:startswith(<s>,{3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) ");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(shr6.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	
 	@Test
-	public void testLayers() throws QueryException {
-		// [base=Mann]
-		String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=tt/base:Mann, relation==}}";
-		assertTrue(equalsQueryContent(layer1, "[tt/base=Mann]"));
+	public void testFoundries() throws QueryException {
+		// [tt/base=Mann]
+		String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=base, @foundry=tt, @relation==}}";
+		ppt = new PoliqarpPlusTree("[tt/base=Mann]");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(layer1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 	}
 	
@@ -575,10 +641,10 @@
 	public void testAlign() {
 		// [orth=der]^[orth=Mann]
 		String align1 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-					"{@type=korap:group, relation=left-align, operands=[" +
-						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=der, @attr=orth, @relation==}}," +
+					"{@type=korap:group, @relation=left-align, @operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=Mann, @attr=orth, @relation==}}" +
 					"]}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("[orth=der]^[orth=Mann]");
@@ -587,14 +653,14 @@
 		
 		// "([base=a]^[base=b])|[base=c]",
 		String align2 = 
-				"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
-							"{@type=korap:group, relation=left-align, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+				"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=a, @attr=base, @relation==}}," +
+							"{@type=korap:group, @relation=left-align, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=b, @attr=base, @relation==}}" +
 							"]}" +
 						"]}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
+						"{@type=korap:token, @value={@type=korap:term, @value=c, @attr=base, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b])|[base=c]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -602,15 +668,15 @@
 		
 		// "([base=a]^[base=b][base=c])|[base=d]",
 		String align3 = 
-				"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
-							"{@type=korap:group, relation=left-align, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+				"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=a, @attr=base, @relation==}}," +
+							"{@type=korap:group, @relation=left-align, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=b, @attr=base, @relation==}}" +
 							"]}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
+							"{@type=korap:token, @value={@type=korap:term, @value=c, @attr=base, @relation==}}" +
 						"]}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:d, relation==}}" +
+						"{@type=korap:token, @value={@type=korap:term, @value=d, @attr=base, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b][base=c])|[base=d]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -618,17 +684,17 @@
 		
 		// "([base=a]^[base=b]^[base=c])|[base=d]",
 		String align4 = 
-				"{@type=korap:group, relation=or, operands=[" +
-						"{@type=korap:sequence, operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
-							"{@type=korap:group, relation=left-align, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+				"{@type=korap:group, @relation=or, @operands=[" +
+						"{@type=korap:sequence, @operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=a, @attr=base, @relation==}}," +
+							"{@type=korap:group, @relation=left-align, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=b, @attr=base, @relation==}}" +
 							"]}," +
-							"{@type=korap:group, relation=left-align, operands=[" +
-								"{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
+							"{@type=korap:group, @relation=left-align, @operands=[" +
+								"{@type=korap:token, @value={@type=korap:term, @value=c, @attr=base, @relation==}}" +
 							"]}" +
 						"]}," +
-						"{@type=korap:token, @value={@type=korap:term, @value=base:d, relation==}}" +
+						"{@type=korap:token, @value={@type=korap:term, @value=d, @attr=base, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("([base=a]^[base=b]^[base=c])|[base=d]");
 		map = ppt.getRequestMap().get("query").toString();
@@ -641,16 +707,16 @@
 	public void testSimpleQueries() {
 		// Baum
 		String simple1 = 
-				"{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}";
+				"{@type=korap:token, @value={@type=korap:term, @value=Baum, @attr=orth, @relation==}}";
 		ppt = new PoliqarpPlusTree("Baum");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(simple1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// Der Baum
 		String simple2 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}, " +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}, " +
+					"{@type=korap:token, @value={@type=korap:term, @value=Baum, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Der Baum");
 		map = ppt.getRequestMap().get("query").toString();
@@ -658,10 +724,10 @@
 		
 		// Der große Baum
 		String simple3 = 
-				"{@type=korap:sequence, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}, " +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:große, relation==}}, " +						
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}" +
+				"{@type=korap:sequence, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Der, @attr=orth, @relation==}}, " +
+					"{@type=korap:token, @value={@type=korap:term, @value=große, @attr=orth, @relation==}}, " +						
+					"{@type=korap:token, @value={@type=korap:term, @value=Baum, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Der große Baum");
 		map = ppt.getRequestMap().get("query").toString();
@@ -669,9 +735,9 @@
 		
 		// Baum | Stein
 		String simple4 = 
-				"{@type=korap:group, relation=or, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}, " +						
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:Stein, relation==}}" +
+				"{@type=korap:group, @relation=or, @operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=Baum, @attr=orth, @relation==}}, " +						
+					"{@type=korap:token, @value={@type=korap:term, @value=Stein, @attr=orth, @relation==}}" +
 				"]}";
 		ppt = new PoliqarpPlusTree("Baum | Stein");
 		map = ppt.getRequestMap().get("query").toString();
