diff --git a/notes.txt b/notes.txt
index a89cf6c..56ad883 100644
--- a/notes.txt
+++ b/notes.txt
@@ -13,4 +13,8 @@
  - operands of distance operators to be expressed via shrink/classes?
  - #BEG() and #END() are solved via shrink, with the shrink argument not being a class but a position (first/last) indicating the first or last word in the matched sequence  
  - #BED() with two conditions (like 'sa,-pa') can't be mapped to position group as implemented -> make two position groups and embed in 'and'-group
+ 
+ 
+ Poliqarp
+ - empty tokens as distance operators
  
\ No newline at end of file
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();
