diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
index 0a9f5d8..e7bf8bd 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
@@ -55,6 +55,15 @@
 		return group;
 	}
 	
+	protected LinkedHashMap<String, Object> makePosition(String frame) {
+		LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
+		group.put("@type", "korap:group");
+		group.put("operation", "operation:position");
+		group.put("frame", "frame:"+frame);
+		group.put("operands", new ArrayList<Object>());
+		return group;
+	}
+	
 	protected LinkedHashMap<String, Object> makeClass(int classCount) {
 		LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
 		group.put("@type", "korap:group");
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
index 67cef8c..d21f325 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
@@ -30,73 +30,60 @@
     /**
      * Flag that indicates whether token fields or meta fields are currently being processed
      */
-    boolean inMeta = false;
+    private boolean inMeta = false;
     /**
      * Flag that indicates whether a cq_segment is to be ignored (e.g. when it is empty, is followed directly by only a spanclass and has no other children etc...).
      */
-    boolean ignoreCq_segment = false;
+    private boolean ignoreCq_segment = false;
     /**
      * Flag that indicates whether a cq_segments element is quantified by an occ element.
      */
-    boolean cqHasOccSibling = false;
+    private boolean cqHasOccSibling = false;
     /**
      * Flag that indicates whether a cq_segments' children are quantified by an occ element.
      */
-    boolean cqHasOccChild = false;
+    private boolean cqHasOccChild = false;
     /**
      * Flag for negation of complete field
      */
-    boolean negField = false;
-    /**
-     * Flag that indicates whether subsequent element is to be aligned.
-     */
-    boolean alignNext = false;
-    /**
-     * Flag that indicates whether current element has been aligned.
-     */
-    boolean isAligned = false;
-    /**
-     * Indicates a sequence which has an align operator as its child. Needed for deciding
-     * when to close the align group object.
-     */
-//	ParseTree alignedSequence = null;
+    private boolean negField = false;
     /**
      * Parser object deriving the ANTLR parse tree.
      */
-    Parser parser;
+    private Parser parser;
     /**
      * Keeps track of all visited nodes in a tree
      */
-    List<ParseTree> visited = new ArrayList<ParseTree>();
+    private List<ParseTree> visited = new ArrayList<ParseTree>();
 
     /**
      * Keeps track of active fields (like 'base=foo').
      */
-    LinkedList<ArrayList<Object>> fieldStack = new LinkedList<ArrayList<Object>>();
+    private LinkedList<ArrayList<Object>> fieldStack = new LinkedList<ArrayList<Object>>();
     /**
      * Keeps track of active tokens.
      */
-    LinkedList<LinkedHashMap<String, Object>> tokenStack = new LinkedList<LinkedHashMap<String, Object>>();
+    private LinkedList<LinkedHashMap<String, Object>> tokenStack = new LinkedList<LinkedHashMap<String, Object>>();
     /**
      * Marks the currently active token in order to know where to add flags (might already have been taken away from token stack).
      */
-    LinkedHashMap<String, Object> curToken = new LinkedHashMap<String, Object>();
+    private LinkedHashMap<String, Object> curToken = new LinkedHashMap<String, Object>();
     /**
      * Keeps track of active object.
      */
-    LinkedList<LinkedHashMap<String, Object>> objectStack = new LinkedList<LinkedHashMap<String, Object>>();
+    private LinkedList<LinkedHashMap<String, Object>> objectStack = new LinkedList<LinkedHashMap<String, Object>>();
     /**
      * Marks the object to which following occurrence information is to be added.
      */
-    LinkedHashMap<String, Object> curOccGroup = new LinkedHashMap<String, Object>();
+    private LinkedHashMap<String, Object> curOccGroup = new LinkedHashMap<String, Object>();
     /**
      * Keeps track of how many objects there are to pop after every recursion of {@link #processNode(ParseTree)}
      */
-    LinkedList<Integer> objectsToPop = new LinkedList<Integer>();
+    private LinkedList<Integer> objectsToPop = new LinkedList<Integer>();
     /**
      * Keeps track of how many objects there are to pop after every recursion of {@link #processNode(ParseTree)}
      */
-    LinkedList<Integer> tokensToPop = new LinkedList<Integer>();
+    private LinkedList<Integer> tokensToPop = new LinkedList<Integer>();
     /**
      * Keeps track of how many objects there are to pop after every recursion of {@link #processNode(ParseTree)}
      */
@@ -108,10 +95,11 @@
     /**
      * Index of the current child of its parent (needed for relating occ elements to their operands).
      */
-    int curChildIndex = 0;
+    private int curChildIndex = 0;
     /**
      *
      */
+    ParseTree currentNode = null;
     Integer stackedObjects = 0;
     Integer stackedTokens = 0;
     Integer stackedFields = 0;
@@ -180,11 +168,8 @@
         if (visited.contains(node)) return;
         else visited.add(node);
 
-        if (alignNext) {
-            alignNext = false;
-            isAligned = true;
-        }
-
+        currentNode = node;
+        
         String nodeCat = getNodeCat(node);
         openNodeCats.push(nodeCat);
 
@@ -194,7 +179,6 @@
 
         if (verbose) {
             System.err.println(" " + objectStack);
-//			System.err.println(" "+tokenStack);
             System.out.println(openNodeCats);
         }
 
@@ -261,9 +245,7 @@
                         distMap.put("min", min);
                         distMap.put("max", max);
                     } else {
-                        sequence.put("@type", "korap:group");
-                        sequence.put("operation", "operation:" + "sequence");
-                        ArrayList<Object> sequenceOperands = new ArrayList<Object>();
+                        sequence = makeGroup("sequence");
                         if (emptySegments != null) {
                             String[] minmax = parseEmptySegments(emptySegments);
                             Integer min = Integer.parseInt(minmax[0]);
@@ -271,7 +253,6 @@
                             sequence.put("offset-min", min - 1);
                             sequence.put("offset-max", max - 1);
                         }
-                        sequence.put("operands", sequenceOperands);
                         objectStack.push(sequence);
                         stackedObjects++;
                     }
@@ -353,7 +334,7 @@
         if (nodeCat.equals("cq_segment")) {
             int onTopOfObjectStack = 0;
             // Step I: determine whether to create new token or get token from the stack (if added by cq_segments)
-            LinkedHashMap<String, Object> token;
+            LinkedHashMap<String, Object> token = makeToken();
             if (tokenStack.isEmpty()) {
                 token = new LinkedHashMap<String, Object>();
                 tokenStack.push(token);
@@ -373,15 +354,6 @@
             // take into account a possible 'occ' child
             if (node.getParent().getChildCount() > 1) {
                 if (node.getText().equals("[]")) {
-//					LinkedHashMap<String, Object> sequence  = objectStack.get(onTopOfObjectStack);
-//					String offsetStr = (String) sequence.get("offset");
-//					if (offsetStr == null) {
-//						sequence.put("offset", "1");
-//					} else {
-//						Integer offset = Integer.parseInt(offsetStr);
-//						sequence.put("offset", offset+1);
-//					}
-//					
                 } else {
                     ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(onTopOfObjectStack).get("operands");
                     topSequenceOperands.add(token);
@@ -391,21 +363,11 @@
 
         // cq_segment modified by occurrence
         if (nodeCat.equals("cq_seg_occ")) {
-            LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
+            LinkedHashMap<String, Object> group = makeGroup("repetition");
             curOccGroup = group;
-            group.put("@type", "korap:group");
-            group.put("operands", new ArrayList<Object>());
+            putIntoSuperObject(group);
             objectStack.push(group);
             stackedObjects++;
-            // add group to sequence only if it is not an only child (in that case, cq_segments has already added the info and is just waiting for the values from "field")
-            // take into account a possible 'occ' child
-//			if (node.getParent().getChildCount()>1) {
-            if (objectStack.size() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(group);
-            } else {
-                requestMap.put("query", group);
-            }
         }
 
         // disjoint cq_segments, like ([base=foo][base=bar])|[base=foobar]
@@ -428,7 +390,7 @@
 
         // field element (outside meta)
         if (nodeCat.equals("field")) {
-            LinkedHashMap<String, Object> fieldMap = new LinkedHashMap<String, Object>();
+            LinkedHashMap<String, Object> fieldMap = makeTerm();
             // Step I: extract info
             String layer = "";
             String foundry = null;
@@ -470,7 +432,6 @@
             if (hasChild(node, "key")) valNode = node.getChild(3);
             else valNode = node.getChild(2);
             String valType = getNodeCat(valNode);
-            fieldMap.put("@type", "korap:term");
             if (valType.equals("simple_query")) {
                 value = valNode.getChild(0).getChild(0).toStringTree(parser);   //e.g. (simple_query (sq_segment foo))
             } else if (valType.equals("re_query")) {
@@ -524,10 +485,6 @@
 
         // conj_field serves for both conjunctions and disjunctions
         if (nodeCat.equals("conj_field")) {
-            LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
-
-            group.put("@type", "korap:termGroup");
-
             // Step I: get operator (& or |)
             ParseTree operatorNode = node.getChild(1).getChild(0);
             String operator = getNodeCat(operatorNode);
@@ -535,9 +492,8 @@
             if (negField) {
                 relation = relation.equals("or") ? "and" : "or";
             }
-            group.put("relation", "relation:" + relation);
-            ArrayList<Object> groupOperands = new ArrayList<Object>();
-            group.put("operands", groupOperands);
+            LinkedHashMap<String, Object> group = makeTermGroup(relation);
+            ArrayList<Object> groupOperands = (ArrayList<Object>) group.get("operands");
             fieldStack.push(groupOperands);
             stackedFields++;
             // Step II: decide where to put the group (directly under token or in top meta filter section or embed in super group)
@@ -592,84 +548,54 @@
 
         if (nodeCat.equals("re_query")) {
             LinkedHashMap<String, Object> reQuery = new LinkedHashMap<String, Object>();
-            reQuery.put("type", "type:regex");
-            String regex = node.getChild(0).toStringTree(parser);
-            reQuery.put("key", regex);
-            reQuery.put("match", "match:" + "eq");
-
             // if in field, regex was already added there
             if (!openNodeCats.get(1).equals("field")) {
                 LinkedHashMap<String, Object> token = new LinkedHashMap<String, Object>();
                 token.put("@type", "korap:token");
                 token.put("wrap", reQuery);
                 reQuery.put("@type", "korap:term");
-
-                if (openNodeCats.get(1).equals("query")) {
-                    requestMap.put("query", token);
-                } else {
-                    ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                    topSequenceOperands.add(token);
-                }
+                putIntoSuperObject(reQuery);
             }
         }
 
         if (nodeCat.equals("alignment")) {
-            alignNext = true;
             LinkedHashMap<String, Object> alignGroup = new LinkedHashMap<String, Object>();
-            // push but don't increase the stackedObjects counter in order to keep this
-            // group open until the mother cq_segments node will be closed, since the
-            // operands are siblings of this align node rather than children, i.e. the group
-            // would be removed from the stack before seeing its operands.
+            alignGroup.put("@type", "korap:group");
+            alignGroup.put("align", "left");
+            alignGroup.put("operands", new ArrayList<Object>());
+            putIntoSuperObject(alignGroup);
             objectStack.push(alignGroup);
             stackedObjects++;
-            // Step I: get info
-            // fill group
-            alignGroup.put("@type", "korap:group");
-            alignGroup.put("alignment", "left");
-            alignGroup.put("operands", new ArrayList<Object>());
-            // Step II: decide where to put the group
-            // add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
-            if (node.getParent().getChildCount() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(alignGroup);
-            } else if (openNodeCats.get(2).equals("query")) {
-                requestMap.put("query", alignGroup);
-            } else {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(alignGroup);
-            }
             visited.add(node.getChild(0));
         }
 
         if (nodeCat.equals("element")) {
             // Step I: determine whether to create new token or get token from the stack (if added by cq_segments)
-            LinkedHashMap<String, Object> elem;
-            if (tokenStack.isEmpty()) {
-                elem = new LinkedHashMap<String, Object>();
-            } else {
+            LinkedHashMap<String, Object> span = makeSpan();
+            if (!tokenStack.isEmpty()) {
                 // in case sq_segments has already added the token
-                elem = tokenStack.getFirst();
+                span = tokenStack.getFirst();
             }
-            curToken = elem;
-            objectStack.push(elem);
-            stackedObjects++;
+            curToken = span;
             // Step II: fill object (token values) and put into containing sequence
-            elem.put("@type", "korap:span");
+            span.put("@type", "korap:span");
             int valChildIdx = node.getChildCount() - 2; // closing '>' is last child
             String value = node.getChild(valChildIdx).toStringTree(parser);
             ParseTree foundryNode = getFirstChildWithCat(node, "foundry");
             ParseTree layerNode = getFirstChildWithCat(node, "layer");
             if (foundryNode != null) {
-                elem.put("foundry", foundryNode.getChild(0).toStringTree(parser));
+                span.put("foundry", foundryNode.getChild(0).toStringTree(parser));
             }
             if (layerNode != null) {
-                elem.put("layer", layerNode.getChild(0).toStringTree(parser));
+                span.put("layer", layerNode.getChild(0).toStringTree(parser));
             }
-            elem.put("key", value);
+            span.put("key", value);
             // add token to sequence only if it is not an only child (in that case, cq_segments has already added the info and is just waiting for the values from "field")
+            objectStack.push(span);
+            stackedObjects++;
             if (node.getParent().getChildCount() > 1) {
                 ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(elem);
+                topSequenceOperands.add(span);
             }
             visited.add(node.getChild(0));
             visited.add(node.getChild(1));
@@ -677,12 +603,6 @@
         }
 
         if (nodeCat.equals("spanclass")) {
-            LinkedHashMap<String, Object> span = new LinkedHashMap<String, Object>();
-            span.put("@type", "korap:group");
-            span.put("operation", "operation:" + "class");
-            objectStack.push(span);
-            stackedObjects++;
-            ArrayList<Object> spanOperands = new ArrayList<Object>();
             // Step I: get info
             int classId = 0;
             if (getNodeCat(node.getChild(1)).equals("spanclass_id")) {
@@ -690,60 +610,29 @@
                 try {
                     classId = Integer.parseInt(ref);
                 } catch (NumberFormatException e) {
-                    throw new QueryException("The specified class reference in the shrink/split-Operator is not a number: " + ref);
+                	log.error("The specified class reference in the focus/split-Operator is not a number: " + ref);
+                    throw new QueryException("The specified class reference in the focus/split-Operator is not a number: " + ref);
                 }
                 // only allow class id up to 255
                 if (classId > 255) {
                     classId = 0;
                 }
             }
-            span.put("class", classId);
-            span.put("operands", spanOperands);
-            // Step II: decide where to put the span
-            // add span to sequence only if it is not an only child (in that case, cq_segments has already added the info and is just waiting for the relevant info)
-            if (openNodeCats.get(2).equals("query") && node.getParent().getChildCount() == 1) {
-                requestMap.put("query", span);
-            } else if (objectStack.size() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(span);
-            }
-            // ignore leading and trailing braces
-            visited.add(node.getChild(0));
-            visited.add(node.getChild(node.getChildCount() - 1));
-            if (getNodeCat(node.getChild(1)).equals("spanclass_id")) {
-                visited.add(node.getChild(1));
-            }
+            LinkedHashMap<String, Object> classGroup = makeClass(classId);
+            putIntoSuperObject(classGroup);
+            objectStack.push(classGroup);
+            stackedObjects++;
         }
 
         if (nodeCat.equals("position")) {
-            LinkedHashMap<String, Object> positionGroup = new LinkedHashMap<String, Object>();
+        	String frame = getNodeCat(node.getChild(0)).toLowerCase();
+            LinkedHashMap<String, Object> positionGroup = makePosition(frame);
+            putIntoSuperObject(positionGroup);
             objectStack.push(positionGroup);
             stackedObjects++;
-            ArrayList<Object> posOperands = new ArrayList<Object>();
-            // Step I: get info
-            String relation = getNodeCat(node.getChild(0));
-            positionGroup.put("@type", "korap:group");
-            positionGroup.put("operation", "operation:" + "position");
-            positionGroup.put("frame", "frame:" + relation.toLowerCase());
-//			positionGroup.put("@subtype", "incl");
-            positionGroup.put("operands", posOperands);
-            // Step II: decide where to put the group
-            // add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
-            if (node.getParent().getChildCount() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(positionGroup);
-            } else if (openNodeCats.get(2).equals("query")) {
-                requestMap.put("query", positionGroup);
-            } else {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
-                topSequenceOperands.add(positionGroup);
-            }
         }
 
         if (nodeCat.equals("focus")) {
-            
-            stackedObjects++;
-            ArrayList<Object> referenceOperands = new ArrayList<Object>();
             // Step I: get info
             ArrayList<Integer> classRefs = new ArrayList<Integer>();
             String classRefOp = null;
@@ -756,10 +645,6 @@
                     } else {
                         try {
                             int classRef = Integer.parseInt(ref);
-                            // only allow class id up to 255
-                            if (classRef > 255) {
-                                classRef = 0;
-                            }
                             classRefs.add(classRef);
                         } catch (NumberFormatException e) {
                             throw new QueryException("The specified class reference in the shrink/split-Operator is not a number.");
@@ -770,25 +655,18 @@
                 classRefs.add(0);
             }
             LinkedHashMap<String, Object> referenceGroup = makeReference(classRefs);
-            objectStack.push(referenceGroup);
+            
             String type = node.getChild(0).toStringTree(parser);
             if (type.equals("split")) referenceGroup.put("operation", "operation:split");
             if (classRefOp != null) {
                 referenceGroup.put("classRefOp", "classRefOp:" + classRefOp);
             }
+            ArrayList<Object> referenceOperands = new ArrayList<Object>();
             referenceGroup.put("operands", referenceOperands);
-            int i = 1;
             // Step II: decide where to put the group
-            // add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
-            if (node.getParent().getChildCount() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("operands"); // this shrinkGroup is on top
-                topSequenceOperands.add(referenceGroup);
-            } else if (openNodeCats.get(2).equals("query")) {
-                requestMap.put("query", referenceGroup);
-            } else if (objectStack.size() > 1) {
-                ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(i).get("operands");
-                topSequenceOperands.add(referenceGroup);
-            }
+            putIntoSuperObject(referenceGroup);
+            objectStack.push(referenceGroup);
+            stackedObjects++;
             visited.add(node.getChild(0));
         }
 
@@ -851,12 +729,6 @@
             negField = !negField;
         }
 
-        // pop the align group that was introduced by previous 'align' but never closed
-//		if (isAligned) {
-//			isAligned=false;
-//			objectStack.pop();
-//		}
-
         // Stuff that happens when leaving a node (taking items off the stacks)
         for (int i = 0; i < objectsToPop.get(0); i++) {
             objectStack.pop();
@@ -873,6 +745,23 @@
         openNodeCats.pop();
     }
 
+    private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
+		putIntoSuperObject(object, 0);
+	}
+	
+	@SuppressWarnings({ "unchecked" })
+	private void putIntoSuperObject(LinkedHashMap<String, Object> object, int objStackPosition) {
+		if (currentNode.getParent().getChildCount() > 1) {
+			ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("operands");
+			topObjectOperands.add(object);
+		} else if (openNodeCats.get(2).equals("query")) {
+			requestMap.put("query", object);
+		} else {
+			ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("operands");
+			topObjectOperands.add(object);
+		}
+	}
+
 	private int[] parseRepetition(String repetition) {
 		if (repetition.equals("*")) {
 			return new int[] {0, MAXIMUM_DISTANCE};
@@ -1001,25 +890,6 @@
 		 * For testing
 		 */
         String[] queries = new String[]{
-                "focus(1|2:{1:[base=der]}{2:[base=Mann]})",
-                "{[base=Mann]}",
-                "focus(1:[orth=Der]{1:[orth=Mann][orth=geht]})",
-                "[base=Mann/i]",
-                "[cnx/base=pos:n]",
-                "<cnx/c=np>",
-                "contains(<cnx/c=np>, [mate/pos=NE])",
-                "matches(<A>,[pos=N]*)",
-                "[base=Auto]matches(<A>,[][pos=N]{4})",
-                "[base=der][]*[base=Mann]",
-                "[base=der] within s",
-                "([orth=der][base=katze])|([orth=eine][base=baum])",
-                "[orth=der][base=katze]|[orth=eine][base=baum]",
-                "focus(1:{[base=der]}{1:[pos=ADJA]})",
-                "[mate/m : tense=pres]",
-                "[cnx/base=pos:n]",
-                "deutscher/i",
-                "[orth=deutscher/i]",
-                "deutscher Bundestag/i"
         };
 		PoliqarpPlusTree.verbose=true;
         for (String q : queries) {
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 28dd0cf..430b271 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -172,9 +172,9 @@
 		String et4 = 
 			"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +	
 				"{@type=korap:span, key=s}," +
-				"{@type=korap:group, operation=operation:sequence, offset-min=1, offset-max=1, operands=[" +
+				"{@type=korap:group, operation=operation:sequence, operands=[" +
 					"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=lemma, match=match:eq}}" +
-				"]}" +
+				"], offset-min=1, offset-max=1}" +
 			"]}";
 		ppt = new PoliqarpPlusTree("startswith(<s>, [][base=Mann])");
 		map = ppt.getRequestMap().get("query").toString();
@@ -266,9 +266,9 @@
 	@Test
 	public void testOccurrence() throws QueryException {
 		// [base=foo]*
-		String occ1 = "{@type=korap:group, operands=[" +
+		String occ1 = "{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					  "], operation=operation:repetition, min=0, max=100}"; 
+					  "], min=0, max=100}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]*");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -276,9 +276,9 @@
 		// [base=foo]*[base=bar]
 		String occ2 = 
 				"{@type=korap:group, operation=operation:sequence, operands=[" +
-					"{@type=korap:group, operands=[" +
+					"{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					"], operation=operation:repetition, min=0, max=100 }," +
+					"], min=0, max=100 }," +
 					"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=match:eq}}" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]");
@@ -289,9 +289,9 @@
 		String occ3 = 
 				"{@type=korap:group, operation=operation:sequence, operands=[" +
 					"{@type=korap:token, wrap={@type=korap:term, key=bar, layer=lemma, match=match:eq}}," +
-					"{@type=korap:group, operands=[" +
+					"{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					"], operation=operation:repetition, min=0, max=100 }" +
+					"], min=0, max=100 }" +
 				"]}"; 
 		ppt = new PoliqarpPlusTree("[base=bar][base=foo]*");
 		map = ppt.getRequestMap().get("query").toString();
@@ -375,33 +375,33 @@
 		assertEquals(occ8.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]+
-		String occ9 = "{@type=korap:group, operands=[" +
+		String occ9 = "{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					  "], operation=operation:repetition, min=1, max=100}"; 
+					  "], min=1, max=100}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]+");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ9.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]?
-		String occ10 = "{@type=korap:group, operands=[" +
+		String occ10 = "{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					  "], operation=operation:repetition, min=0, max=1}"; 
+					  "], min=0, max=1}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]?");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ10.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]{2,5}
-		String occ11 = "{@type=korap:group, operands=[" +
+		String occ11 = "{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					  "], operation=operation:repetition, min=2, max=5}"; 
+					  "], min=2, max=5}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]{2,5}");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ11.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// [base=foo]{2}
-		String occ12 = "{@type=korap:group, operands=[" +
+		String occ12 = "{@type=korap:group, operation=operation:repetition, operands=[" +
 					     "{@type=korap:token, wrap={@type=korap:term, key=foo, layer=lemma, match=match:eq}}" +
-					  "], operation=operation:repetition, min=2, max=2}"; 
+					  "], min=2, max=2}"; 
 		ppt = new PoliqarpPlusTree("[base=foo]{2}");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(occ12.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -596,7 +596,9 @@
 							"]}" +
 						"]}" +
 					  "]}";
-		assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}"));
+		ppt = new PoliqarpPlusTree("[p=NN]{[base=Mann][orth=Frau]}");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(cls3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		// {[base=Mann][orth=Frau]}[p=NN]
 		String cls4 = "{@type=korap:group, operation=operation:sequence, operands=[" +
@@ -671,9 +673,9 @@
 		String pos5 = 
 					"{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
 				  		"{@type=korap:span, key=s}," +
-				  		"{@type=korap:group, " +
+				  		"{@type=korap:group, operation=operation:repetition, " +
 				  			"operands=[{@type=korap:token, wrap={@type=korap:term, key=N, layer=pos, match=match:eq}}" +
-				  			"], operation=operation:repetition, min=0, max=100" +
+				  			"], min=0, max=100" +
 				  		"}" +
 				  	"]}";
 		ppt = new PoliqarpPlusTree("contains(<s>,[pos=N]*)");
@@ -686,9 +688,9 @@
 					"{@type=korap:token, wrap={@type=korap:term, key=Auto, layer=lemma, match=match:eq}}," +
 					"{@type=korap:group, operation=operation:position, frame=frame:contains, operands=[" +
 				  		"{@type=korap:span, key=s}," +
-				  		"{@type=korap:group, " +
+				  		"{@type=korap:group, operation=operation:repetition, " +
 				  			"operands=[{@type=korap:token, wrap={@type=korap:term, key=N, layer=pos, match=match:eq}}" +
-				  			"], operation=operation:repetition, min=0, max=100" +
+				  			"], min=0, max=100" +
 				  		"}" +
 				  	"]}" +
 				"]}";
@@ -884,7 +886,7 @@
 		String align1 = 
 				"{@type=korap:group, operation=operation:sequence, operands=[" +
 					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}," +
-					"{@type=korap:group, alignment=left, operands=[" +
+					"{@type=korap:group, align=left, operands=[" +
 						"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
 					"]}" +
 				"]}";
@@ -897,7 +899,7 @@
 		String align1b = 
 				"{@type=korap:group, operation=operation:sequence, operands=[" +
 					"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}," +
-					"{@type=korap:group, alignment=left, operands=[" +
+					"{@type=korap:group, align=left, operands=[" +
 						"{@type=korap:group, operation=operation:sequence, operands=[" +
 							"{@type=korap:token, wrap={@type=korap:term, key=große, layer=orth, match=match:eq}}," +
 							"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
@@ -913,7 +915,7 @@
 				"{@type=korap:group, operation=operation:or, operands=[" +
 						"{@type=korap:group, operation=operation:sequence, operands=[" +
 							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=match:eq}}," +
-							"{@type=korap:group, alignment=left, operands=[" +
+							"{@type=korap:group, align=left, operands=[" +
 								"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=match:eq}}" +
 							"]}" +
 						"]}," +
@@ -928,7 +930,7 @@
 				"{@type=korap:group, operation=operation:or, operands=[" +
 						"{@type=korap:group, operation=operation:sequence, operands=[" +
 							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=match:eq}}," +
-							"{@type=korap:group, alignment=left, operands=[" +
+							"{@type=korap:group, align=left, operands=[" +
 								"{@type=korap:group, operation=operation:sequence, operands=[" +
 									"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=match:eq}}," +
 									"{@type=korap:token, wrap={@type=korap:term, key=c, layer=lemma, match=match:eq}}" +
@@ -946,10 +948,10 @@
 				"{@type=korap:group, operation=operation:or, operands=[" +
 						"{@type=korap:group, operation=operation:sequence, operands=[" +
 							"{@type=korap:token, wrap={@type=korap:term, key=a, layer=lemma, match=match:eq}}," +
-							"{@type=korap:group, alignment=left, operands=[" +
+							"{@type=korap:group, align=left, operands=[" +
 								"{@type=korap:group, operation=operation:sequence, operands=[" +
 									"{@type=korap:token, wrap={@type=korap:term, key=b, layer=lemma, match=match:eq}}," +
-									"{@type=korap:group, alignment=left, operands=[" +
+									"{@type=korap:group, align=left, operands=[" +
 										"{@type=korap:token, wrap={@type=korap:term, key=c, layer=lemma, match=match:eq}}" +
 									"]}" +
 								"]}" +
