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 06ea165..b3afe99 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
@@ -3,7 +3,6 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Map;
 
 import org.junit.Test;
 
@@ -678,232 +677,222 @@
         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());
+
+    }
+    @Test
+    public void testPositions() throws Exception {
+        query = "node & node & #1 _=_ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:group",         res.at("/query/@type").asText());
+        assertEquals("operation:position",  res.at("/query/operation").asText());
+        assertEquals("frames:matches",      res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+
+        query = "node & node & #1 _i_ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:contains",     res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+
+        query = "node & node & #1 _l_ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:startswith",   res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+
+        query = "node & node & #1 _r_ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+
+        query = "node & \"Mann\" & #1 _r_ #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
+        assertEquals("korap:token",         res.at("/query/operands/1/@type").asText());
+        assertEquals("Mann",                res.at("/query/operands/1/wrap/key").asText());
+
+        query = "node & \"Mann\" & #2 _r_ #1";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
+        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("korap:token",         res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann",                res.at("/query/operands/0/wrap/key").asText());
+
+        query = "node & cat=\"VP\" & cat=\"NP\" & #1 _r_ #2 & #2 _l_ #3";
+        qs.setQuery(query, "annis");
+        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("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("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
+        assertEquals("NP",                  res.at("/query/operands/1/key").asText());
+
+        query = "node & \"Mann\" & #2 _o_ #1";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
+        assertEquals("frames:overlapsRight",    res.at("/query/frames/1").asText());
+        assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
+        assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+
+        query = "node & \"Mann\" & #2 _ol_ #1";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
+        assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
+        assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+
+        query = "node & \"Mann\" & #2 _or_ #1";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("frames:overlapsRight",    res.at("/query/frames/0").asText());
+        assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
+        assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+    }
+
+    @Test
+    public void testMultiplePredications() throws Exception {
+        // a noun before a verb before a preposition
+        query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 . #2 & #2 . #3"; 
+        qs.setQuery(query, "annis");
+        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("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("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());
+
+        query = "pos=\"N\" & pos=\"V\" & #1 . #2 & #2 . pos=\"P\""; 
+        qs.setQuery(query, "annis");
+        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("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("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());
+
+        query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3";
+        qs.setQuery(query, "annis");
+        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("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("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());
+
+        query = "cat=\"NP\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3 & #2 . #3";
+        qs.setQuery(query, "annis");
+        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("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("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("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("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("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(true,                  res.at("/query/operands/1/operands").isMissingNode());
+    }
+
+    @Test
+    public void testUnaryRelations() throws JsonProcessingException, IOException {
+        query = "node & #1:tokenarity=2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("korap:span",      res.at("/query/@type").asText());
+        assertEquals("korap:term",      res.at("/query/attr/@type").asText());
+        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());
+        assertEquals("korap:span",      res.at("/query/@type").asText());
+        assertEquals("cnx",             res.at("/query/foundry").asText());
+        assertEquals("c",               res.at("/query/layer").asText());
+        assertEquals("NP",              res.at("/query/key").asText());
+        assertEquals("korap:term",      res.at("/query/attr/@type").asText());
+        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());
+        assertEquals("korap:span",      res.at("/query/@type").asText());
+        assertEquals("cnx",             res.at("/query/foundry").asText());
+        assertEquals("c",               res.at("/query/layer").asText());
+        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());
+        assertEquals("korap:group",     res.at("/query/@type").asText());
+        assertEquals("operation:relation",     res.at("/query/operation").asText());
+        assertEquals("korap:span",      res.at("/query/operands/0/@type").asText());
+        assertEquals("cnx",             res.at("/query/operands/0/foundry").asText());
+        assertEquals("c",               res.at("/query/operands/0/layer").asText());
+        assertEquals("NP",              res.at("/query/operands/0/key").asText());
+        assertEquals("korap:term",      res.at("/query/operands/0/attr/@type").asText());
+        assertEquals("korap:boundary",  res.at("/query/operands/0/attr/tokenarity/@type").asText());
+        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 testPositions() throws Exception {
-    		query = "node & node & #1 _=_ #2";
-	        qs.setQuery(query, "annis");
-	        res = mapper.readTree(qs.toJSON());
-	        assertEquals("korap:group",         res.at("/query/@type").asText());
-	        assertEquals("operation:position",  res.at("/query/operation").asText());
-	        assertEquals("frames:matches",      res.at("/query/frames/0").asText());
-	        assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
-	        assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
 
-            query = "node & node & #1 _i_ #2";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:contains",     res.at("/query/frames/0").asText());
-            assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
-            assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
-
-            query = "node & node & #1 _l_ #2";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:startswith",   res.at("/query/frames/0").asText());
-            assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
-            assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
-
-            query = "node & node & #1 _r_ #2";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
-            assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
-            assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
-
-            query = "node & \"Mann\" & #1 _r_ #2";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
-            assertEquals("korap:span",          res.at("/query/operands/0/@type").asText());
-            assertEquals("korap:token",         res.at("/query/operands/1/@type").asText());
-            assertEquals("Mann",                res.at("/query/operands/1/wrap/key").asText());
-
-            query = "node & \"Mann\" & #2 _r_ #1";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:endswith",     res.at("/query/frames/0").asText());
-            assertEquals("korap:span",          res.at("/query/operands/1/@type").asText());
-            assertEquals("korap:token",         res.at("/query/operands/0/@type").asText());
-            assertEquals("Mann",                res.at("/query/operands/0/wrap/key").asText());
-            
-            query = "node & cat=\"VP\" & cat=\"NP\" & #1 _r_ #2 & #2 _l_ #3";
-            qs.setQuery(query, "annis");
-            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("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("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-            assertEquals("NP",                  res.at("/query/operands/1/key").asText());
-            
-            query = "node & \"Mann\" & #2 _o_ #1";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
-            assertEquals("frames:overlapsRight",    res.at("/query/frames/1").asText());
-            assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
-            assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
-            assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
-            
-            query = "node & \"Mann\" & #2 _ol_ #1";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
-            assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
-            assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
-            assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
-            
-            query = "node & \"Mann\" & #2 _or_ #1";
-            qs.setQuery(query, "annis");
-            res = mapper.readTree(qs.toJSON());
-            assertEquals("frames:overlapsRight",    res.at("/query/frames/0").asText());
-            assertEquals("korap:span",              res.at("/query/operands/1/@type").asText());
-            assertEquals("korap:token",             res.at("/query/operands/0/@type").asText());
-            assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
-    	}
-    	
-    	@Test
-    	public void testMultiplePredications() throws Exception {
-    		// a noun before a verb before a preposition
-    		query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 . #2 & #2 . #3"; 
-            qs.setQuery(query, "annis");
-            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("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("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());
-            
-            query = "pos=\"N\" & pos=\"V\" & #1 . #2 & #2 . pos=\"P\""; 
-            qs.setQuery(query, "annis");
-            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("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("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());
-            
-            query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3";
-            qs.setQuery(query, "annis");
-            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("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("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());
-            
-            query = "cat=\"NP\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3 & #2 . #3";
-            qs.setQuery(query, "annis");
-            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("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("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("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("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("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(true,                  res.at("/query/operands/1/operands").isMissingNode());
-    	}
-    		
-    //		query = "cat=\"NP\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3 & #2 . #3";
-    //		String mult4 = 
-    //				"{@type=korap:group, operation=operation:sequence, operands=[" +
-    //					// reduce dominance relations "#1 > #2 & #1 > #3" to operand #2 in order to make it accessible for #2 . #3 (the last/outermost relation)  
-    //					"{@type=korap:reference, operation=operation:focus, classRef=[1], operands=[" +
-    //						"{@type=korap:group, operation=operation:relation, operands=[" +
-    //							// dominance relation #1 > #2 is reduced to #1, for expressing #1 > #3
-    //							"{@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, layer=cat, key=NP, match=match:eq}" +
-    //									"]}," +
-    //									"{@type=korap:group, operation=operation:class, class=129, classOut=129, operands=[" +
-    //										"{@type=korap:token, wrap={@type=korap:term, layer=pos, key=V, match=match:eq}}" +
-    //									"]}" +
-    //								"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
-    //							"]}," +
-    //							// establish class 2 around P for later reference
-    //							"{@type=korap:group, operation=operation:class, class=130, classOut=130, operands=[" +
-    //								"{@type=korap:token, wrap={@type=korap:term, layer=pos, key=P, match=match:eq}}" +
-    //							"]}" +
-    //						"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}}" +
-    //					"]}," +
-    //					// refer back to class 2 as second operand
-    //					"{@type=korap:reference, operation=operation:focus, classRef=[2]}" +
-    //				"], inOrder=true}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(mult4.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //	}	
-    //	
-    //	@Test
-    //	public void testUnaryRelations() throws Exception {
-    //		query = "node & #1:tokenarity=2";
-    //		String unary1 = 
-    //				"{@type=korap:span, attr={@type=korap:term, tokenarity={@type=korap:boundary,min=2,max=2}}}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(unary1.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //		query = "cnx/cat=\"NP\" & #1:tokenarity=2";
-    //		String unary2 = 
-    //				"{@type=korap:span, foundry=cnx, layer=cat, key=NP, match=match:eq, attr={@type=korap:term, tokenarity={@type=korap:boundary,min=2,max=2}}}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(unary2.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //		query = "cnx/cat=\"NP\" & #1:root";
-    //		String unary3 = 
-    //				"{@type=korap:span, foundry=cnx, layer=cat, key=NP, match=match:eq, attr={@type=korap:term, root=true}}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(unary3.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //		
-    //		query = "cnx/cat=\"NP\" & node & #1>#2 & #1:tokenarity=2";
-    //		String unary4 = 
-    //					"{@type=korap:group, operation=operation:relation, operands=[" +
-    //						"{@type=korap:span, foundry=cnx, layer=cat, key=NP, match=match:eq, attr={@type=korap:term, tokenarity={@type=korap:boundary,min=2,max=2}}}," +
-    //						"{@type=korap:span}" +
-    //					"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}" +
-    //					"}";
-    //		aqlt = new AqlTree(query);
-    //		map = aqlt.getRequestMap().get("query").toString();
-    //		assertEquals(unary4.replaceAll(" ", ""), map.replaceAll(" ", ""));
-    //	}	
-    //	
     //	@Test
     //	public void testCommonParent() throws Exception {
     //		query = "cat=\"NP\" & cat=\"VP\" & #1 $ #2";
