adapted Cosmas and PQ to current JSON-LD specifications
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();