diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
index 22cfac2..b20bfee 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
@@ -236,8 +236,13 @@
 				if (! operandOnlyNodeRefs.contains(variableCounter.toString())) {
 					putIntoSuperObject(object);
 				}
+				ParseTree parentsFirstChild = node.getParent().getChild(0);
+				if (getNodeCat(parentsFirstChild).endsWith("#")) {
+					variableReferences.put(getNodeCat(parentsFirstChild).replaceAll("#", ""), object);
+				}
 				variableReferences.put(variableCounter.toString(), object);
 				variableCounter++;
+				System.out.println(variableReferences);
 			}
 		}
 
@@ -331,7 +336,7 @@
 				term.put("layer", "c");
 				relation.put("wrap", term);
 				// commonancestor is an indirect commonparent relation
-				if (reltype.equals("commonancestor")) relation.put("boundary", makeBoundary(1, MAXIMUM_DISTANCE));
+				if (reltype.equals("commonancestor")) relation.put("boundary", makeBoundary(1, null));
 				group.put("relation", relation);
 				innerGroup.put("relation", relation);
 				// Get operands list before possible re-assignment of 'group' (see following 'if')
@@ -367,15 +372,20 @@
 				} catch (ClassCastException | NullPointerException n) {
 					groupType = "relation";
 				}
-				group = makeGroup(groupType);
 				if (groupType.equals("relation") || groupType.equals("treeRelation")) {
+					group = makeGroup(groupType);
 					LinkedHashMap<String, Object> relation = new LinkedHashMap<String, Object>();
 					putAllButGroupType(relation, operatorGroup);
 					System.err.println(relation);
 					group.put("relation", relation);
-				} else if (groupType.equals("sequence") || groupType.equals("position")) {
+				} else if (groupType.equals("sequence")) {
+					group = makeGroup(groupType);
+					putAllButGroupType(group, operatorGroup);
+				} else if (groupType.equals("position")) {
+					group = new LinkedHashMap<String,Object>();
 					putAllButGroupType(group, operatorGroup);
 				}
+					
 				// Get operands list before possible re-assignment of 'group' (see following 'if')
 				operands  = (ArrayList<Object>) group.get("operands");
 				// Wrap in reference object in case other relations are following
@@ -483,7 +493,7 @@
 			LinkedHashMap<String,Object> term = makeTerm();
 			if (qName != null) term.putAll(parseQNameNode(qName));
 			if (edgeSpec != null) term.putAll(parseEdgeSpec(edgeSpec));
-			if (star != null) relation.put("boundary", makeBoundary(0, 100));
+			if (star != null) relation.put("boundary", makeBoundary(0, null));
 			if (rangeSpec != null) relation.put("boundary", boundaryFromRangeSpec(rangeSpec));
 			relation.put("wrap", term);
 		}
@@ -504,39 +514,41 @@
 			relation.put("inOrder", true);
 		}
 		else if (operator.equals("spanrelation")) {
-			relation = makeGroup("position");
-			relation.put("groupType", "position");
+//			relation = makeGroup("position");
+//			relation.put("groupType", "position");
 			String reltype = operatorNode.getChild(0).toStringTree(parser);
-			String frame = null;
-			boolean inOrder = true;
+			String[] frames = new String[]{};
+			String[] sharedClasses = new String[]{"sharedClasses:includes"};
 			switch (reltype) {
 			case "_=_":
-				frame = "matches"; break;
+				frames = new String[]{"frame:matches"}; 
+				sharedClasses = new String[]{"sharedClasses:equals"};
+				break;
 			case "_l_":
-				frame = "startswith"; 
-				inOrder = false;
+				frames = new String[]{"frame:startswith"};
 				break;
 			case "_r_":
-				frame = "endswith";
-				inOrder = false;
+				frames = new String[]{"frame:endswith"};
 				break;
 			case "_i_":
-				frame = "contains"; break;
+				frames = new String[]{"frame:contains"};break;
 			case "_o_":
-				frame = "overlaps"; 
-				inOrder = false;
+				frames = new String[]{"frame:overlapsLeft", "frame:overlapsRight"};
+				sharedClasses = new String[]{"sharedClasses:intersects"};
 				break;
 			case "_ol_":
-				frame = "overlapsLeft"; 
-				inOrder = false;
+				frames = new String[]{"frame:overlapsLeft"};
+				sharedClasses = new String[]{"sharedClasses:intersects"};
 				break;
 			case "_or_":
-				frame = "overlapsRight"; 
-				inOrder = false;
+				frames = new String[]{"frame:overlapsRight"};
+				sharedClasses = new String[]{"sharedClasses:intersects"};
 				break;
 			}
-			if (!inOrder) relation.put("inOrder", false);
-			relation.put("frame", "frame:"+frame);
+//			relation.put("frames", frames);
+//			relation.put("sharedClasses", sharedClasses);
+			relation = makePosition(frames, sharedClasses);
+			relation.put("groupType", "position");
 		}
 		else if (operator.equals("identity")) {
 			//TODO
@@ -711,7 +723,12 @@
 //				"cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 > #3",
 //				"tok=\"Mann\" & tok=\"geht\" & #1 .* #2",
 //				"\"Sonne\"",
-				"\"so\" & \"nicht\" & #1 .1,6 #2"
+//				"\"so\" & ( \"nicht\" | \"doch\" ) & #1 .1,6 #2",
+//				
+//				"NP#cat=\"NP\" & PP1#cat=\"PP\" . PP2#cat=\"PP\" & #NP > #PP1 & #NP > #PP2 ",
+//				"cat=\"NP\" > cat=\"VP\" & #1 _l_ #2",
+//				"cat=\"NP\" > cat=\"VP\" & #1 . tok=\"foo\"",
+				"cat=\"NP\" & cat=\"VP\" & #1 > #2 & #1 _l_ #2",
 		};
 		//		AqlTree.verbose=true;
 		for (String q : queries) {
diff --git a/src/test/java/AqlTreeTest.java b/src/test/java/AqlTreeTest.java
index a0f133d..0cf0564 100644
--- a/src/test/java/AqlTreeTest.java
+++ b/src/test/java/AqlTreeTest.java
@@ -436,23 +436,44 @@
 		map = aqlt.getRequestMap().get("query").toString();
 		assertEquals(cp2.replaceAll(" ", ""), map.replaceAll(" ", ""));		
 	}
-	
+	/*
+	@Test
+	public void testMultipleOperatorsWithSameOperands() throws QueryException {
+		
+		query = "cat=\"NP\" > cat=\"VP\" & #1 _l_ #2";
+		String eq2 =
+				"{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+						"{@type=korap:group, operation=operation:relation, operands=[" +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
+							"]}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+								"{@type=korap:span, layer=cat, key=VP, match=match:eq}" +
+							"]}" +
+						"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c}}," +
+					"{@type=korap:reference, operation=operation:focus, classRef=[2]}" +
+				"]" +
+				"}"; // ???
+		aqlt = new AqlTree(query);
+		map = aqlt.getRequestMap().get("query").toString();
+		assertEquals(eq2.replaceAll(" ", ""), map.replaceAll(" ", ""));		
+	}
+	*/
 	@Test
 	public void testPositions() throws QueryException {
 		query = "node & node & #2 _=_ #1";
 		String pos1 = 
-				"{@type=korap:group, operation=operation:position, operands=[" +
+				"{@type=korap:group, operation=operation:position, frames=[frame:matches], sharedClasses=[sharedClasses:equals], operands=[" +
 						"{@type=korap:span}," +
 						"{@type=korap:span}" +
-				"], frame=frame:matches" +
-				"}";
+				"], frame=frame:matches}";
 		aqlt = new AqlTree(query);
 		map = aqlt.getRequestMap().get("query").toString();
 		assertEquals(pos1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "node & node & #2 _i_ #1";
 		String pos2 = 
-				"{@type=korap:group, operation=operation:position, operands=[" +
+				"{@type=korap:group, operation=operation:position, frames=[frame:contains], sharedClasses=[sharedClasses:includes], operands=[" +
 						"{@type=korap:span}," +
 						"{@type=korap:span}" +
 				"], frame=frame:contains" +
@@ -463,10 +484,10 @@
 		
 		query = "node & node & #2 _l_ #1";
 		String pos3 = 
-				"{@type=korap:group, operation=operation:position, operands=[" +
+				"{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
 						"{@type=korap:span}," +
 						"{@type=korap:span}" +
-				"], inOrder=false, frame=frame:startswith" +
+				"], frame=frame:startswith" +
 				"}";
 		aqlt = new AqlTree(query);
 		map = aqlt.getRequestMap().get("query").toString();
@@ -474,10 +495,10 @@
 		
 		query = "node & \"Mann\" & #1 _r_ #2";
 		String pos4 = 
-					"{@type=korap:group, operation=operation:position, operands=[" +
+					"{@type=korap:group, operation=operation:position, frames=[frame:endswith], sharedClasses=[sharedClasses:includes], operands=[" +
 						"{@type=korap:span}," +
 						"{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Mann, match=match:eq}}" +
-						"], inOrder=false, frame=frame:endswith" +
+						"], frame=frame:endswith" +
 					"}";
 		aqlt = new AqlTree(query);
 		map = aqlt.getRequestMap().get("query").toString();
@@ -485,10 +506,10 @@
 		
 		query = "node & \"Mann\" & #2 _r_ #1";
 		String pos5 = 
-					"{@type=korap:group, operation=operation:position, operands=[" +
+					"{@type=korap:group, operation=operation:position, frames=[frame:endswith], sharedClasses=[sharedClasses:includes], operands=[" +
 						"{@type=korap:token, wrap={@type=korap:term, layer=orth, key=Mann, match=match:eq}}," +
 						"{@type=korap:span}" +
-						"], inOrder=false, frame=frame:endswith" +
+						"], frame=frame:endswith" +
 					"}";
 		aqlt = new AqlTree(query);
 		map = aqlt.getRequestMap().get("query").toString();
@@ -688,6 +709,36 @@
 		aqlt = new AqlTree(query);
 		map = aqlt.getRequestMap().get("query").toString();
 		assertEquals(cp3.replaceAll(" ", ""), map.replaceAll(" ", ""));		
-	}
 		
+		query = "cat=\"NP\" & cat=\"VP\" & #1 $* #2";
+		String cp4 =
+				"{@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=0, operands=[" +
+									"{@type=korap:span}" +
+								"]}," +
+								"{@type=korap:span, layer=cat, key=NP, match=match:eq}" +
+							"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c},boundary={@type=korap:boundary,min=1}}}" +
+						"]}," +
+						"{@type=korap:span, layer=cat, key=VP, match=match:eq}" +
+					"], relation={@type=korap:relation, wrap={@type=korap:term, layer=c},boundary={@type=korap:boundary,min=1}}}" +
+					"";
+		aqlt = new AqlTree(query);
+		map = aqlt.getRequestMap().get("query").toString();
+		assertEquals(cp4.replaceAll(" ", ""), map.replaceAll(" ", ""));		
+	}
+	
+	/*		
+	@Test
+	public void testEqualNotequalValue() throws QueryException {
+		query = "cat=\"NP\" & cat=\"VP\" & #1 == #2";
+		String eq1 =
+				"{}"; // ???
+		aqlt = new AqlTree(query);
+		map = aqlt.getRequestMap().get("query").toString();
+		assertEquals(eq1.replaceAll(" ", ""), map.replaceAll(" ", ""));		
+	}
+	*/
+	
 }
\ No newline at end of file
