- highlighted classes explicit in meta
- PQ+: 'dependency(X,Y)' as shortcut for 'relatesTo(d:X,Y)'

diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
index b3afe99..f01a38a 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
@@ -262,12 +262,12 @@
         assertEquals("S",					res.at("/query/operands/0/operands/0/key").asText());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,					    res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:span",			res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("NP",					res.at("/query/operands/0/operands/1/operands/0/key").asText());
         assertEquals("korap:reference",		res.at("/query/operands/1/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals(2,					    res.at("/query/operands/1/classRef/0").asInt());
 
         query = "cat=\"S\" & cat=\"NP\" & #1 >@r #2";  
         qs.setQuery(query, "annis");
@@ -279,12 +279,12 @@
         assertEquals("S",					res.at("/query/operands/0/operands/0/key").asText());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,					    res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:span",			res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("NP",					res.at("/query/operands/0/operands/1/operands/0/key").asText());
         assertEquals("korap:reference",		res.at("/query/operands/1/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals(2,					    res.at("/query/operands/1/classRef/0").asInt());
     }
 
     @Test
@@ -319,7 +319,7 @@
         assertEquals("operation:relation",	res.at("/query/operation").asText());
         assertEquals("korap:reference",		res.at("/query/operands/0/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operands/0/operation").asText());
-        assertEquals(128,					res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,					    res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",	res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:relation",		res.at("/query/operands/0/operands/0/relation/@type").asText());
@@ -329,7 +329,7 @@
         assertEquals("CP",					res.at("/query/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,					    res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("VP",					res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
     }
     //		query = "cat=\"CP\" & cat=\"VP\" & cat=\"NP\" & #1 > #2 > #3";
@@ -338,7 +338,7 @@
     //						"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //							"{@type=korap:group, operation=operation:relation, operands=[" +
     //								"{@type=korap:span, layer=cat, key=CP, match=match:eq}," +
-    //								"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //								"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //									"{@type=korap:span, layer=cat, key=VP, match=match:eq}" +
     //								"]}" +
     //							"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
@@ -358,12 +358,12 @@
     //								"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //									"{@type=korap:group, operation=operation:relation, operands=[" +
     //										"{@type=korap:span, layer=cat, key=CP, match=match:eq}," +
-    //										"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //										"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //											"{@type=korap:span, layer=cat, key=VP, match=match:eq}" +
     //										"]}" +
     //									"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
     //								"]}," +
-    //								"{@type=korap:group, operation=operation:class, class=129, classOut=129, operands=[" +
+    //								"{@type=korap:group, operation=operation:class, class=2, classOut=2, operands=[" +
     //									"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
     //								"]}" +
     //							"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
@@ -400,76 +400,86 @@
     //		map = aqlt.getRequestMap().get("query").toString();
     //		assertEquals(dom2.replaceAll(" ", ""), map.replaceAll(" ", ""));
     //	}
-    //	
-    //	@Test
-    //	public void testSequence() throws Exception {
-    //		query = "node & node & #1 . #2";
-    //		String seq1 = 
-    //				"{@type=korap:group, operation=operation:sequence, " +
-    //					"operands=[" +
-    //						"{@type=korap:span}," +
-    //						"{@type=korap:span}" +
-    //					"], inOrder=true" +
-    //				"}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(seq1.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //		query = "node & node & #1 .* #2";
-    //		String seq2 = 
-    //				"{@type=korap:group, operation=operation:sequence, operands=[" +
-    //						"{@type=korap:span}," +
-    //						"{@type=korap:span}" +
-    //					"], distances=[" +
-    //						"{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=0}, min=0}" +
-    //					"], inOrder=true" +
-    //				"}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(seq2.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //		query = "node & node & #1 .2,3 #2";
-    //		String seq3 = 
-    //				"{@type=korap:group, operation=operation:sequence, operands=[" +
-    //						"{@type=korap:span}," +
-    //						"{@type=korap:span}" +
-    //					"], distances=[" +
-    //						"{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=2, max=3}, min=2, max=3}" +
-    //					"], inOrder=true" +
-    //				"}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(seq3.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //	}
-    //	
+
+    @Test
+    public void testSequence() throws Exception {
+        query = "tok=\"der\" & tok=\"die\" & #1 . #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:sequence",  res.at("/query/operation").asText());
+        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true,                  res.at("/query/inOrder").asBoolean());
+        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+
+        query = "tok=\"der\" & tok=\"die\" & #1 .2,3 #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:sequence",  res.at("/query/operation").asText());
+        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true,                  res.at("/query/inOrder").asBoolean());
+        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+        assertEquals("korap:distance",      res.at("/query/distances/0/@type").asText());
+        assertEquals("korap:boundary",      res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(2,                     res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(3,                     res.at("/query/distances/0/boundary/max").asInt());
+
+        query = "tok=\"der\" & tok=\"die\" & #1 .* #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:boundary",      res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(true,                  res.at("/query/distances/0/boundary/max").isMissingNode());
+    }
+
+    @Test
+    public void testNear() throws Exception {
+        query = "tok=\"der\" & tok=\"die\" & #1 ^ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:sequence",  res.at("/query/operation").asText());
+        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
+        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+
+        query = "tok=\"der\" & tok=\"die\" & #1 ^2,3 #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:sequence",  res.at("/query/operation").asText());
+        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
+        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+        assertEquals("korap:distance",      res.at("/query/distances/0/@type").asText());
+        assertEquals("korap:boundary",      res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(2,                     res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(3,                     res.at("/query/distances/0/boundary/max").asInt());
+
+        query = "tok=\"der\" & tok=\"die\" & #1 ^* #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:boundary",      res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(true,                  res.at("/query/distances/0/boundary/max").isMissingNode());
+        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
+    }
+
+
     @Test
     public void testMultipleSequence() throws Exception {
         query = "tok=\"a\" & tok=\"b\" & tok=\"c\" & #1 . #2 & #2 . #3";
-        String seq4 = 
-                "{@type=korap:group, operation=operation:sequence," +
-                        "operands=[" +
-                        "{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
-                        "{@type=korap:group, operation=operation:sequence, operands=[" +
-                        "{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Sonne, match=match:eq}}," +
-                        "{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
-                        "{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Mond, match=match:eq}}" +
-                        "]}" +
-                        "], distances=[" +
-                        "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=0, max=2}, min=0, max=2}" +
-                        "], inOrder=true}" +
-                        "]}," +	
-                        "{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Sterne, match=match:eq}}" +
-                        "],distances=[" +
-                        "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=0, max=4}, min=0, max=4}" +
-                        "], inOrder=true" +
-                        "}";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:group",         res.at("/query/@type").asText());
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals(res.at("/query/operands/0/classRef/0").asInt(), 
                 res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
     }
@@ -482,7 +492,7 @@
     //						"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //							"{@type=korap:group, operation=operation:sequence, operands=[" +
     //								"{@type=korap:span}," +
-    //								"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //								"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //									"{@type=korap:span}" +
     //								"]} "+
     //							"], inOrder=true}" +
@@ -504,14 +514,14 @@
     //							"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //								"{@type=korap:group, operation=operation:sequence, operands=[" +
     //									"{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Sonne, match=match:eq}}," +
-    //									"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //									"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //										"{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Mond, match=match:eq}}" +
     //									"]}" +
     //								"], distances=[" +
     //									"{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=0, max=2}, min=0, max=2}" +
     //								"], inOrder=true}" +
     //							"]}," +	
-    //							"{@type=korap:group, operation=operation:class, class=129, classOut=129, operands=[" +
+    //							"{@type=korap:group, operation=operation:class, class=2, classOut=2, operands=[" +
     //								"{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Sterne, match=match:eq}}" +
     //							"]}" +
     //						"],distances=[" +
@@ -593,14 +603,14 @@
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("Sonne",               res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("Mond",                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("Sterne",              res.at("/query/operands/1/wrap/key").asText());
         assertEquals("w",                   res.at("/query/distances/0/key").asText());
@@ -614,14 +624,14 @@
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("Sonne",               res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("Mond",                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("Sterne",              res.at("/query/operands/1/wrap/key").asText());
         assertEquals("w",                   res.at("/query/distances/0/key").asText());
@@ -635,21 +645,21 @@
         assertEquals("operation:relation",  res.at("/query/operation").asText());
         assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(2,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:reference",     res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
         assertEquals("PP",                  res.at("/query/operands/1/key").asText());
 
@@ -662,21 +672,21 @@
         assertEquals("korap:group",         res.at("/query/@type").asText());
         assertEquals("operation:position",  res.at("/query/operation").asText());
         assertEquals("frames:startswith",   res.at("/query/frames/0").asText());
-        assertEquals("korap:reference",         res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",  res.at("/query/operands/0/operation").asText());
-        assertEquals(128,  res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
         assertEquals("korap:reference",     res.at("/query/operands/1/@type").asText());
         assertEquals("operation:focus",     res.at("/query/operands/1/operation").asText());
-        assertEquals(129,  res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals(2,  res.at("/query/operands/1/classRef/0").asInt());
 
     }
     @Test
@@ -732,12 +742,12 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("frames:startswith",   res.at("/query/frames/0").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("frames:endswith",     res.at("/query/operands/0/operands/0/frames/0").asText());
         assertEquals("korap:span",          res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
         assertEquals("NP",                  res.at("/query/operands/1/key").asText());
 
@@ -775,14 +785,14 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("p",                   res.at("/query/operands/0/operands/0/operands/0/wrap/layer").asText());
         assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
 
@@ -791,14 +801,14 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("p",                   res.at("/query/operands/0/operands/0/operands/0/wrap/layer").asText());
         assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
 
@@ -807,10 +817,10 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:relation",  res.at("/query/operation").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/wrap/key").asText());
         assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
@@ -820,20 +830,20 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:sequence",  res.at("/query/operation").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(2,                     res.at("/query/operands/0/classRef/0").asInt());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
         assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
         assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(128,                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,                     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals(130,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(3,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("P",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("operation:focus",     res.at("/query/operands/1/operation").asText());
-        assertEquals(130,                   res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals(3,                     res.at("/query/operands/1/classRef/0").asInt());
         assertEquals(true,                  res.at("/query/operands/1/operands").isMissingNode());
     }
 
@@ -847,7 +857,7 @@
         assertEquals("korap:boundary",  res.at("/query/attr/tokenarity/@type").asText());
         assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
         assertEquals(2,                 res.at("/query/attr/tokenarity/max").asInt());
-        
+
         query = "cnx/cat=\"NP\" & #1:tokenarity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
@@ -859,13 +869,13 @@
         assertEquals("korap:boundary",  res.at("/query/attr/tokenarity/@type").asText());
         assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
         assertEquals(2,                 res.at("/query/attr/tokenarity/max").asInt());
-        
+
         query = "cnx/cat=\"NP\" & #1:tokenarity=2,5";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
         assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
         assertEquals(5,                 res.at("/query/attr/tokenarity/max").asInt());
-        
+
         query = "cnx/cat=\"NP\" & #1:root";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
@@ -875,7 +885,7 @@
         assertEquals("NP",              res.at("/query/key").asText());
         assertEquals("korap:term",      res.at("/query/attr/@type").asText());
         assertEquals(true,              res.at("/query/attr/root").asBoolean());
-        
+
         query = "cnx/cat=\"NP\" & node & #1>#2 & #1:tokenarity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
@@ -890,28 +900,44 @@
         assertEquals(2,                 res.at("/query/operands/0/attr/tokenarity/min").asInt());
         assertEquals(2,                 res.at("/query/operands/0/attr/tokenarity/max").asInt());
         assertEquals("korap:span",      res.at("/query/operands/1/@type").asText());
-        
+
     }
 
-    //	@Test
-    //	public void testCommonParent() throws Exception {
-    //		query = "cat=\"NP\" & cat=\"VP\" & #1 $ #2";
-    //		String cp1 =
-    //				"{@type=korap:group, operation=operation:relation, operands=[" +
-    //						"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
-    //							"{@type=korap:group, operation=operation:relation, operands=[" +
-    //								"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
-    //									"{@type=korap:span}" +
-    //								"]}," +
-    //								"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
-    //							"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
-    //						"]}," +
-    //						"{@type=korap:span, layer=cat, key=VP, match=match:eq}" +
-    //					"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
-    //					"";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(cp1.replaceAll(" ", ""), map.replaceAll(" ", ""));		
+    @Test
+    public void testCommonParent() throws Exception {
+        query = "cat=\"NP\" & cat=\"VP\" & #1 $ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:relation",  res.at("/query/operation").asText());
+        assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("korap:group",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
+        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
+        assertEquals(1,                     res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals("korap:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
+        assertEquals(true,                  res.at("/query/operands/0/operands/0/operands/0/operands/0/key").isMissingNode());
+        assertEquals("korap:span",          res.at("/query/operands/0/operands/0/operands/1/@type").asText());
+        assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/1/key").asText());
+        assertEquals("c",                   res.at("/query/operands/0/operands/0/operands/1/layer").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("VP",                  res.at("/query/operands/1/key").asText());
+        assertEquals("c",                   res.at("/query/operands/1/layer").asText());
+        
+        query = "cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 $ #3";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:relation",  res.at("/query/operation").asText());
+        assertEquals("korap:reference",     res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
+        assertEquals(1,                     res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("korap:group",         res.at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
+    }
     //		
     //		query = "cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 $ #3";
     //		String cp2 =
@@ -920,7 +946,7 @@
     //						"{@type=korap:group, operation=operation:relation, operands=[" +
     //							"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //								"{@type=korap:group, operation=operation:relation, operands=[" +
-    //									"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //									"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //										"{@type=korap:span}" +
     //									"]}," +
     //									"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
@@ -946,7 +972,7 @@
     //								"{@type=korap:group, operation=operation:relation, operands=[" +
     //									"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //										"{@type=korap:group, operation=operation:relation, operands=[" +
-    //											"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //											"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //												"{@type=korap:span}" +
     //											"]}," +
     //											"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
@@ -971,7 +997,7 @@
     //				"{@type=korap:group, operation=operation:relation, operands=[" +
     //						"{@type=korap:reference, operation=operation:focus, classRef=[0], operands=[" +
     //							"{@type=korap:group, operation=operation:relation, operands=[" +
-    //								"{@type=korap:group, operation=operation:class, class=128, classOut=128, operands=[" +
+    //								"{@type=korap:group, operation=operation:class, class=1, classOut=1, operands=[" +
     //									"{@type=korap:span}" +
     //								"]}," +
     //								"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
index df30e6d..92f6a16 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
@@ -400,7 +400,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -410,8 +410,8 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("Sonne",				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mond",				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
@@ -421,7 +421,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -436,8 +436,8 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("Sonne",				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mond",				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
@@ -479,7 +479,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -489,19 +489,19 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
         assertEquals("Sonne",				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:reference",		res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/1/operands/0/classRef/0").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/1/operands/0/classRef/0").asInt());
         assertEquals("operation:focus",		res.at("/query/operands/0/operands/1/operands/0/operation").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operands/1/operands/0/operands/0/operation").asText());
         assertEquals("w",					res.at("/query/operands/0/operands/1/operands/0/operands/0/distances/0/key").asText());
         assertEquals(1,						res.at("/query/operands/0/operands/1/operands/0/operands/0/distances/0/boundary/min").asInt());
         assertEquals(7,						res.at("/query/operands/0/operands/1/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(130,					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("Mond",				res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("Sterne",				res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
 
         query = "Sonne /+w1:4 Mond /-w1:7 Sterne";
@@ -516,7 +516,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -526,19 +526,19 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("Sonne",				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:reference",		res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
         assertEquals("operation:focus",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
         assertEquals("w",					res.at("/query/operands/0/operands/0/operands/0/operands/0/distances/0/key").asText());
         assertEquals(0,						res.at("/query/operands/0/operands/0/operands/0/operands/0/distances/0/boundary/min").asInt());
         assertEquals(2,						res.at("/query/operands/0/operands/0/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(130,					res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("Mond",				res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("Sterne",				res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
 
     }
@@ -550,24 +550,24 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(131,							res.at("/query/classRef/0").asInt());
+        assertEquals(3,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operation").asText());
         assertEquals("classRefCheck:includes",		res.at("/query/operands/0/classRefCheck/0").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals(true,							res.at("/query/operands/0/operands/0/frames/0").isMissingNode());
-        assertEquals(129,							res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(130,							res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(131,                           res.at("/query/operands/0/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(3,                             res.at("/query/operands/0/classOut").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:span",					res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",					res.at("/query/operands/0/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("wegen",						res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
 
@@ -620,7 +620,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:class",             res.at("/query/operation").asText());
         assertEquals("classRefOp:delete",           res.at("/query/classRefOp").asText());
-        assertEquals(131,                           res.at("/query/classIn/0").asInt());
+        assertEquals(3,                             res.at("/query/classIn/0").asInt());
         assertEquals("classRefCheck:equals",		res.at("/query/operands/0/classRefCheck/0").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
         assertEquals(true,							res.at("/query/operands/0/operands/0/exclude").asBoolean());
@@ -631,7 +631,7 @@
         assertEquals("operation:merge",             res.at("/query/operation").asText());
         assertEquals("operation:class",             res.at("/query/operands/0/operation").asText());
         assertEquals("classRefOp:delete",           res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(131,                           res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(3,                             res.at("/query/operands/0/classIn/0").asInt());
         assertEquals("classRefCheck:equals",        res.at("/query/operands/0/operands/0/classRefCheck/0").asText());
         assertEquals("frames:matches",              res.at("/query/operands/0/operands/0/operands/0/frames/0").asText());
         assertEquals(true,                          res.at("/query/operands/0/operands/0/operands/0/exclude").asBoolean());
@@ -644,25 +644,25 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(131,							res.at("/query/classRef/0").asInt());
+        assertEquals(3,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operation").asText());
         assertEquals("classRefCheck:intersects",	res.at("/query/operands/0/classRefCheck/0").asText());
         //		assertEquals("classRefOp:merge",            res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(131,                           res.at("/query/operands/0/classOut").asInt());
-        assertEquals(129,                           res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(130,                           res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(3,                             res.at("/query/operands/0/classOut").asInt());
+        assertEquals(1,                             res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(2,                             res.at("/query/operands/0/classIn/1").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals(true,							res.at("/query/operands/0/operands/0/frames/0").isMissingNode());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:span",					res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",					res.at("/query/operands/0/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("wegen",						res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
 
@@ -719,7 +719,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -729,7 +729,7 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:reference",		res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
         assertEquals(0,						res.at("/query/operands/0/operands/0/operands/0/spanRef/0").asInt());
@@ -745,7 +745,7 @@
         assertEquals("der",					res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mann",				res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/wrap/key").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",			res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("kommt",				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
 
@@ -754,7 +754,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/distances/0/@type").asText());
@@ -764,7 +764,7 @@
         assertEquals(true,					res.at("/query/operands/0/inOrder").asBoolean());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:reference",		res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operands/0/operands/1/operands/0/operation").asText());
         assertEquals(0,						res.at("/query/operands/0/operands/1/operands/0/spanRef/0").asInt());
@@ -780,7 +780,7 @@
         assertEquals("der",					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mann",				res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/wrap/key").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,					res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/operands/0/classOut").asInt());
         assertEquals("korap:token",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("kommt",				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
 
@@ -916,13 +916,13 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
         assertEquals("classRefOp:inversion",res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(130,					res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(131,					res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(129,					res.at("/query/operands/0/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(3,  					res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/classOut").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/operands/0/distances/0/@type").asText());
@@ -931,8 +931,8 @@
         assertEquals(10,					res.at("/query/operands/0/operands/0/distances/0/boundary/max").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals(131,					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(3,  					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",			res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("gehen",				res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("voran",				res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
@@ -942,13 +942,13 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",		res.at("/query/@type").asText());
         assertEquals("operation:focus",		res.at("/query/operation").asText());
-        assertEquals(129,					res.at("/query/classRef/0").asInt());
+        assertEquals(1,  					res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
         assertEquals("classRefOp:inversion",res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(130,					res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(131,					res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(129,					res.at("/query/operands/0/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(3,  					res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(1,  					res.at("/query/operands/0/classOut").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/@type").asText());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operation").asText());
         assertEquals("korap:distance",		res.at("/query/operands/0/operands/0/distances/0/@type").asText());
@@ -957,15 +957,15 @@
         assertEquals(10,					res.at("/query/operands/0/operands/0/distances/0/boundary/max").asInt());
         assertEquals("korap:group",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
         assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals(131,					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(3,  					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("gehen",				res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("operation:focus",		res.at("/query/operands/0/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals(132,					res.at("/query/operands/0/operands/0/operands/1/operands/0/classRef/0").asInt());
+        assertEquals(4,			     		res.at("/query/operands/0/operands/0/operands/1/operands/0/classRef/0").asInt());
         assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operation").asText());
-        assertEquals(132,					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/0/classOut").asInt());
+        assertEquals(4,  					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/0/classOut").asInt());
         assertEquals("voran",				res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(132,					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(4, 					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("Beispiel",			res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
 
     }
@@ -977,13 +977,13 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:startswith",			res.at("/query/operands/0/frames/0").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("korap:span",					res.at("/query/operands/0/operands/0/@type").asText());
@@ -994,7 +994,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/frames/0").asText());
@@ -1010,7 +1010,7 @@
         assertEquals(1,								res.at("/query/operands/0/operands/1/spanRef/1").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/1/operands/0/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/1/operands/0/classOut").asInt());
         assertEquals("operation:sequence",			res.at("/query/operands/0/operands/1/operands/0/operands/0/operation").asText());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mann",						res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/wrap/key").asText());
@@ -1020,7 +1020,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/frames/0").asText());
@@ -1032,7 +1032,7 @@
         assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("operation:sequence",			res.at("/query/operands/0/operands/0/operands/1/operands/0/operation").asText());
         assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mann",						res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/wrap/key").asText());
@@ -1045,7 +1045,7 @@
         assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
         assertEquals("operation:sequence",			res.at("/query/operands/0/operands/1/operands/1/operands/0/operation").asText());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key").asText());
         assertEquals("Mann",						res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/1/wrap/key").asText());
@@ -1059,13 +1059,13 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:startswith",			res.at("/query/operands/0/frames/0").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/1/classOut").asInt());
         assertEquals("korap:token",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("korap:span",					res.at("/query/operands/0/operands/0/@type").asText());
@@ -1076,7 +1076,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/frames/0").asText());
@@ -1087,7 +1087,7 @@
         assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operation").asText());
@@ -1097,7 +1097,7 @@
         assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/1/operands/0/wrap/key").asText());
 
         query = "der:sa,-pa,+te";
@@ -1105,7 +1105,7 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("korap:reference",				res.at("/query/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operation").asText());
-        assertEquals(129,							res.at("/query/classRef/0").asInt());
+        assertEquals(1,  							res.at("/query/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operation").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/frames/0").asText());
@@ -1116,11 +1116,11 @@
         assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(1,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("korap:reference",				res.at("/query/operands/0/operands/1/@type").asText());
         assertEquals("operation:focus",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/1/classRef/0").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/1/classRef/0").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operands/0/operation").asText());
         assertEquals("frames:matches",				res.at("/query/operands/0/operands/1/operands/0/frames/0").asText());
@@ -1132,7 +1132,7 @@
         assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals(2,  							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/0/operands/1/@type").asText());
         assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operands/0/operands/1/operation").asText());
@@ -1149,7 +1149,7 @@
         assertEquals(1,								res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/spanRef/1").asInt());
         assertEquals("korap:group",					res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/@type").asText());
         assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operation").asText());
-        assertEquals(131,							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/classOut").asInt());
+        assertEquals(3,  							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/classOut").asInt());
         assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key").asText());
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
index 44519ec..c0b91f7 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
@@ -136,10 +136,22 @@
 		assertEquals("type:regex",			res.at("/query/wrap/type").asText());
 		assertEquals("orth", 				res.at("/query/wrap/layer").asText());
 		assertEquals("match:eq",			res.at("/query/wrap/match").asText());
-
 	}
 
 	@Test
+    public void testPunct() throws JsonProcessingException, IOException {
+        query = "[punct=.]";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:token",         res.at("/query/@type").asText());
+        assertEquals("korap:term",          res.at("/query/wrap/@type").asText());
+        assertEquals(".",                   res.at("/query/wrap/key").asText());
+        assertEquals("type:punct",          res.at("/query/wrap/type").asText());
+        assertEquals("orth",                res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq",            res.at("/query/wrap/match").asText());
+	}
+	
+	@Test
 	public void testCaseSensitivityFlag() throws JsonProcessingException, IOException {
 		query = "[orth=deutscher/i]";
 		qs.setQuery(query, "poliqarpplus");
@@ -456,13 +468,15 @@
 		operands = Lists.newArrayList(operands.get(1).at("/operands").elements());
 		assertEquals("korap:token",			operands.get(0).at("/@type").asText());
 		assertEquals(true,					operands.get(0).at("/wrap").isMissingNode());
-
+		assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+		
 		query = "[base=der]{2:[]}[base=Mann]";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
 		operands = Lists.newArrayList(res.at("/query/operands").elements());
 		assertEquals("operation:class",		operands.get(1).at("/operation").asText());
 		assertEquals(2,						operands.get(1).at("/classOut").asInt());
+		assertEquals(2,                     res.at("/meta/highlight/0").asInt());
 
 		query = "{1:[]}[base=der][base=Mann]";
 		qs.setQuery(query, "poliqarpplus");
@@ -470,6 +484,7 @@
 		operands = Lists.newArrayList(res.at("/query/operands").elements());
 		assertEquals("operation:class",		operands.get(0).at("/operation").asText());
 		assertEquals(1,						operands.get(0).at("/classOut").asInt());
+		assertEquals(1,                     res.at("/meta/highlight/0").asInt());
 
 		query = "{1:{2:der} {3:[]} Mann}";
 		qs.setQuery(query, "poliqarpplus");
@@ -478,7 +493,9 @@
 		assertEquals(1,	operands.size());  // class operation may only have one operand (the sequence)
 		operands = Lists.newArrayList(operands.get(0).at("/operands").elements());
 		assertEquals(3,	operands.size());  // the sequence has three operands ("der", "[]" and "Mann")
-
+		assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+		assertEquals(2,                     res.at("/meta/highlight/1").asInt());
+		assertEquals(3,                     res.at("/meta/highlight/2").asInt());
 	}
 
 	@Test
@@ -900,7 +917,8 @@
 		assertEquals(true, 					res.at("/query/operands/0/classIn").isMissingNode());
 		assertEquals("Mann", 				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
 		assertEquals("Frau", 				res.at("/query/operands/0/operands/0/operands/1/wrap/key").asText());
-
+		assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+		
 		query = "{2:{1:[tt/p=ADJA]}[mate/p=NN]}";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
@@ -909,6 +927,8 @@
 		assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
 		assertEquals(2, 					res.at("/query/classOut").asInt());
 		assertEquals(1, 					res.at("/query/operands/0/operands/0/classOut").asInt());
+		assertEquals(2,                     res.at("/meta/highlight/0").asInt());
+		assertEquals(1,                     res.at("/meta/highlight/1").asInt());
 	}
 
 	@Test
@@ -923,7 +943,8 @@
 		assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
 		assertEquals(1, 					res.at("/query/operands/0/operands/1/classOut").asInt());
 		assertEquals("Mann", 				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-
+		assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+		
 		query = "focus([orth=Der]{[orth=Mann][orth=geht]})";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
@@ -936,7 +957,8 @@
 		res = mapper.readTree(qs.toJSON());
 		assertEquals(2, 					res.at("/query/classRef/0").asInt());
 		assertEquals(2, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-
+		assertEquals(2,                     res.at("/meta/highlight/0").asInt());
+		
 		query = "focus(3:startswith(<s>,{3:<np>}))";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
@@ -947,12 +969,14 @@
 		assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
 		assertEquals(3, 					res.at("/query/operands/0/operands/1/classOut").asInt());
 		assertEquals("frames:startswith", 	res.at("/query/operands/0/frames/0").asText());
-
+		assertEquals(3,                     res.at("/meta/highlight/0").asInt());
+		
 		query = "focus(1000:startswith(<s>,{1000:<np>}))";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
-		assertEquals(127, 					res.at("/query/classRef/0").asInt());
-		assertEquals(127, 					res.at("/query/operands/0/operands/1/classOut").asInt());
+		assertEquals(128, 					res.at("/query/classRef/0").asInt());
+		assertEquals(128, 					res.at("/query/operands/0/operands/1/classOut").asInt());
+		assertEquals(128,                     res.at("/meta/highlight/0").asInt());
 
 		query = "focus(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}}))";
 		qs.setQuery(query, "poliqarpplus");
@@ -987,6 +1011,9 @@
 		assertEquals("classRefOp:intersection", res.at("/query/classRefOp").asText());
 		assertEquals("korap:reference", 		res.at("/query/@type").asText());
 		assertEquals("operation:split", 		res.at("/query/operation").asText());
+		assertEquals(3,                     res.at("/meta/highlight/0").asInt());
+		assertEquals(1,                     res.at("/meta/highlight/1").asInt());
+		assertEquals(2,                     res.at("/meta/highlight/2").asInt());
 
 		query = "focus(1:{[base=der]}{1:[pos=ADJA]})";
 		qs.setQuery(query, "poliqarpplus");
@@ -1063,6 +1090,16 @@
 		assertEquals("d", 					res.at("/query/relation/wrap/layer").asText());
 		assertEquals("HEAD", 				res.at("/query/relation/wrap/key").asText());
 
+        query = "dependency([base=fällen],[base=Baum])";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("lemma",               res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("fällen",              res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("lemma",               res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("Baum",                res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("korap:relation",      res.at("/query/relation/@type").asText());
+        assertEquals("d",                   res.at("/query/relation/wrap/layer").asText());
+
 		query = "dominates(Baum,<np>)";
 		qs.setQuery(query, "poliqarpplus");
 		res = mapper.readTree(qs.toJSON());
@@ -1112,8 +1149,8 @@
 		assertEquals("operation:sequence", 	res.at("/query/operation").asText());
 		assertEquals("der", 				res.at("/query/operands/0/wrap/key").asText());
 		assertEquals("operation:class", 	res.at("/query/operands/1/operation").asText());
-		assertEquals(129, 					res.at("/query/operands/1/classOut").asInt());
-		assertEquals(129, 					res.at("/meta/alignment").asInt());
+		assertEquals(1,   					res.at("/query/operands/1/classOut").asInt());
+		assertEquals(1,   					res.at("/meta/alignment").asInt());
 
 		query = "[orth=der]^[orth=große][orth=Mann]";
 		qs.setQuery(query, "poliqarpplus");
@@ -1123,8 +1160,8 @@
 		assertEquals("operation:sequence", 	res.at("/query/operands/1/operands/0/operation").asText());
 		assertEquals("große", 				res.at("/query/operands/1/operands/0/operands/0/wrap/key").asText());
 		assertEquals("Mann", 				res.at("/query/operands/1/operands/0/operands/1/wrap/key").asText());
-		assertEquals(129, 					res.at("/query/operands/1/classOut").asInt());
-		assertEquals(129, 					res.at("/meta/alignment").asInt());
+		assertEquals(1,   					res.at("/query/operands/1/classOut").asInt());
+		assertEquals(1,   					res.at("/meta/alignment").asInt());
 
 		query = "([base=a]^[base=b])|[base=c]";
 		qs.setQuery(query, "poliqarpplus");
@@ -1135,8 +1172,8 @@
 		assertEquals("a", 					res.at("/query/operands/0/operands/0/wrap/key").asText());
 		assertEquals("b", 					res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
 		assertEquals("c", 					res.at("/query/operands/1/wrap/key").asText());
-		assertEquals(129, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-		assertEquals(129, 					res.at("/meta/alignment").asInt());
+		assertEquals(1,   					res.at("/query/operands/0/operands/1/classOut").asInt());
+		assertEquals(1,   					res.at("/meta/alignment").asInt());
 
 		query = "([base=a]^[base=b][base=c])|[base=d]";
 		qs.setQuery(query, "poliqarpplus");
@@ -1153,8 +1190,8 @@
 		assertEquals("b", 					res.at("/query/operands/0/operands/1/operands/0/operands/0/wrap/key").asText());
 		assertEquals("c", 					res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/wrap/key").asText());
 		assertEquals("d", 					res.at("/query/operands/1/wrap/key").asText());
-		assertEquals(129, 					res.at("/meta/alignment/0").asInt());
-		assertEquals(130, 					res.at("/meta/alignment/1").asInt());
+		assertEquals(1,   					res.at("/meta/alignment/0").asInt());
+		assertEquals(2,   					res.at("/meta/alignment/1").asInt());
 	}
 
 	@Test