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 d2628c8..a6e4686 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
@@ -86,8 +86,8 @@
 	 * nodes here and exclude the operands from being written into the query map individually.   
 	 */
 	private LinkedList<String> operandOnlyNodeRefs = new LinkedList<String>();
-	private List<String> mirroredPositionFrames = Arrays.asList(new String[]{"startswith", "endswith", "overlaps", "contains"});
-//	private List<String> mirroredPositionFrames = Arrays.asList(new String[]{});
+//	private List<String> mirroredPositionFrames = Arrays.asList(new String[]{"startswith", "endswith", "overlaps", "contains"});
+	private List<String> mirroredPositionFrames = Arrays.asList(new String[]{});
 	
 	public static boolean verbose = false;
 	
@@ -197,10 +197,12 @@
 			// naturally as operands of the relations/groups introduced by the 
 			// *node. For that purpose, this section mines all used references
 			// and stores them in a list for later reference.
+			List<ParseTree> globalLingTermNodes = new ArrayList<ParseTree>();
 			for (ParseTree exprNode : getChildrenWithCat(node,"expr")) {
 				List<ParseTree> lingTermNodes = new ArrayList<ParseTree>();
 				lingTermNodes.addAll(getChildrenWithCat(exprNode, "unary_linguistic_term"));
 				lingTermNodes.addAll(getChildrenWithCat(exprNode, "n_ary_linguistic_term"));
+				globalLingTermNodes.addAll(lingTermNodes);
 				// Traverse refOrNode nodes under *ary_linguistic_term nodes and extract references
 				for (ParseTree lingTermNode : lingTermNodes) {
 					for (ParseTree refOrNode : getChildrenWithCat(lingTermNode, "refOrNode")) {
@@ -221,6 +223,16 @@
 //				stackedObjects++;
 //				putIntoSuperObject(andGroup,1);
 //			}
+			System.out.println(globalLingTermNodes.size());
+			if (globalLingTermNodes.size() > 1) {
+				LinkedHashMap<String, Object> zeroTextDistance = makeGroup("sequence");
+				ArrayList<Object> distances = new ArrayList<Object>();
+				distances.add(makeDistance("t",0,0));
+				zeroTextDistance.put("distances", distances);
+				putIntoSuperObject(zeroTextDistance);
+				objectStack.push(zeroTextDistance);
+//				stackedObjects++;
+			}
 		}
 		
 		// establish new variables or relations between vars
@@ -242,7 +254,11 @@
 //			}
 		}
 		
-		if (nodeCat.equals("n_ary_linguistic_term") || nodeCat.equals("unary_linguistic_term")) {
+		if (nodeCat.equals("unary_linguistic_term")) {
+			
+		}
+		
+		if (nodeCat.equals("n_ary_linguistic_term")) {
 			// get referenced operands
 			// TODO generalize operator
 			// TODO capture variableExprs
@@ -264,23 +280,23 @@
 				putAllButGroupType(group, operatorTree);
 			} else if (groupType.equals("position")) {
 				String frame = (String) operatorTree.get("frame");
-				if (!mirroredPositionFrames.contains(frame.substring(6))) { //remove leading "frame:"
+//				if (!mirroredPositionFrames.contains(frame.substring(6))) { //remove leading "frame:"
 					putAllButGroupType(group, operatorTree);
-				} else {
-					group = makeGroup("or");
-					LinkedHashMap<String, Object> group1 = makeGroup(groupType);
-					LinkedHashMap<String, Object> group2 = makeGroup(groupType);
-					putAllButGroupType(group1, operatorTree);
-					putAllButGroupType(group2, operatorTree);
-					ArrayList<Object> groupOperands = (ArrayList<Object>) group.get("operands");
-					groupOperands.add(group1);
-					groupOperands.add(group2);
-					ArrayList<ArrayList<Object>> distOperandsList = new ArrayList<ArrayList<Object>>();
-					distOperandsList.add((ArrayList<Object>) group1.get("operands"));
-					distOperandsList.add((ArrayList<Object>) group2.get("operands"));
-					invertedOperandsLists.push((ArrayList<Object>) group2.get("operands"));
-					distributedOperandsLists.push(distOperandsList);
-				}
+//				} else {
+//					group = makeGroup("or");
+//					LinkedHashMap<String, Object> group1 = makeGroup(groupType);
+//					LinkedHashMap<String, Object> group2 = makeGroup(groupType);
+//					putAllButGroupType(group1, operatorTree);
+//					putAllButGroupType(group2, operatorTree);
+//					ArrayList<Object> groupOperands = (ArrayList<Object>) group.get("operands");
+//					groupOperands.add(group1);
+//					groupOperands.add(group2);
+//					ArrayList<ArrayList<Object>> distOperandsList = new ArrayList<ArrayList<Object>>();
+//					distOperandsList.add((ArrayList<Object>) group1.get("operands"));
+//					distOperandsList.add((ArrayList<Object>) group2.get("operands"));
+//					invertedOperandsLists.push((ArrayList<Object>) group2.get("operands"));
+//					distributedOperandsLists.push(distOperandsList);
+//				}
 			}
 			// insert referenced nodes into operands list
 			List<Object> operands = (List<Object>) group.get("operands");
@@ -432,39 +448,51 @@
 			relation.put("groupType", "position");
 			String reltype = operatorNode.getChild(0).toStringTree(parser);
 			String frame = null;
+			boolean inOrder = true;
 			switch (reltype) {
 				case "_=_":
 					frame = "matches"; break;
 				case "_l_":
-					frame = "startswith"; break;
+					frame = "startswith"; 
+					inOrder = false;
+					break;
 				case "_r_":
-					frame = "endswith"; break;
+					frame = "endswith";
+					inOrder = false;
+					break;
 				case "_i_":
 					frame = "contains"; break;
 				case "_o_":
-					frame = "overlaps"; break;
+					frame = "overlaps"; 
+					inOrder = false;
+					break;
 				case "_ol_":
-					frame = "overlapsLeft"; break;
+					frame = "overlapsLeft"; 
+					inOrder = false;
+					break;
 				case "_or_":
-					frame = "overlapsRight"; break;
+					frame = "overlapsRight"; 
+					inOrder = false;
+					break;
 			}
 			relation.put("operation", "operation:position");
+			if (!inOrder) relation.put("inOrder", false);
 			relation.put("frame", "frame:"+frame);
 		}
 		else if (operator.equals("commonparent")) {
-			
+			//TODO
 		}
 		else if (operator.equals("commonancestor")) {
-			
+			//TODO
 		}
 		else if (operator.equals("identity")) {
-			
+			//TODO
 		}
 		else if (operator.equals("equalvalue")) {
-			
+			//TODO
 		}
 		else if (operator.equals("notequalvalue")) {
-			
+			//TODO
 		}
 		return relation;
 	}
@@ -642,19 +670,8 @@
 		 * For testing
 		 */
 		String[] queries = new String[] {
-			
-			 "node & node & #1 . #2",
-			 "node & node & #1 .2,6 #2",
-			 "node & node & #1 .* #2",
-			 "node & node & #2 ->label[mate/coref=\"true\"] #1",
-			 "node & node & #1 _ol_ #2",
-			 "node & cat=\"NP\" & #2 _r_ #1",
-			 "node > cat=\"NP\"",
-			 "cat=\"NP\" > node",
-			 "node > cat=\"NP\"",
-//			 "node > node",
-			 "node & node & #2 _=_ #1",
-			 "node & node & #2 _i_ #1"
+			 "node & #1:root",
+			 "pos=\"N\" & pos=\"V\" & pos=\"N\" & #1 . #2 & #2 . #3"
 			};
 		AqlTree.verbose=true;
 		for (String q : queries) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
index 2fa9763..3592cdf 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
@@ -25,15 +25,6 @@
 
     private static Logger log = LoggerFactory.getLogger(CosmasTree.class);
 
-    /*
-     * Following collections have the following functions:
-     * - the request is a map with two keys (meta/query):			{meta=[], query=[]}
-     * - the query is a list of token group maps: 					{meta=[], query=[tg1=[], tg2=[]]}
-     * - each token group is a list of tokens: 						{meta=[], query=[tg1=[t1_1, t1_2], tg2=[t2_1, t2_2, t2_3]]}
-     * - each token corresponds to a single 'fields' linked list	{meta=[], query=[tg1=[t1_1=[], t1_2=[]], ... ]}
-     * - each fields list contains a logical operator and 'field maps' defining attributes and values
-     * 																{meta=[], query=[tg1=[t1_1=[[disj, {base=foo}, {base=bar}]], t1_2=[]], ... ]}
-     */
     String query;
     LinkedHashMap<String, Object> requestMap = new LinkedHashMap<String, Object>();
     /**
@@ -245,9 +236,7 @@
 //			fieldMap.put("key", "morph:"+node.getChild(0).toString().replace(" ", "_"));
             String[] morphValues = node.getChild(0).toString().split(" ");
             String pos = morphValues[0];
-
             fieldMap.put("key", pos);
-
             fieldMap.put("layer", "pos");
             // make category-specific fieldMap entry
             // negate field (see above)
