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 f97cc77..777d06a 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
@@ -6,6 +6,8 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.antlr.runtime.ANTLRStringStream;
 import org.antlr.runtime.RecognitionException;
@@ -85,7 +87,7 @@
 	/**
 	 * A list of node categories that can be sequenced (i.e. which can be in a sequence with any number of other nodes in this list)
 	 */
-	private final List<String> sequentiableCats = Arrays.asList(new String[] {"OPWF", "OPLEM", "OPMORPH", "OPBEG", "OPEND", "OPIN"});
+	private final List<String> sequentiableCats = Arrays.asList(new String[] {"OPWF", "OPLEM", "OPMORPH", "OPBEG", "OPEND", "OPIN", "OPBED"});
 	/**
 	 * Keeps track of sequenced nodes, i.e. nodes that implicitly govern  a sequence, as in (C2PQ (OPWF der) (OPWF Mann)).
 	 * This is necessary in order to know when to take the sequence off the object stack, as the sequence is introduced by the
@@ -133,7 +135,7 @@
 		}
 		
 		System.out.println("Processing Cosmas");
-		requestMap.put("context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
+		requestMap.put("@context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
 //		QueryUtils.prepareContext(requestMap);
 		processNode(tree);
 	}
@@ -164,6 +166,7 @@
 		// Check for potential implicit sequences as in (C2PQ (OPWF der) (OPWF Mann)). The sequence is introduced
 		// by the first child if it (and its siblings) is sequentiable.
 		if (sequentiableCats.contains(nodeCat)) {
+			System.err.println(nodeCat);
 			// for each node, check if parent has more than one child (-> could be implicit sequence)
 			Tree parent = node.getParent();
 			if (parent.getChildCount()>1) {
@@ -173,13 +176,14 @@
 					for (int i=1; i<parent.getChildCount() ;i++) {
 						if (sequentiableCats.contains(QueryUtils.getNodeCat(parent.getChild(i)))) {
 							hasSequentiableSiblings = true;
+							continue;
 						}
 					}
 					if (hasSequentiableSiblings) {
 						// Step I: create sequence
 						LinkedHashMap<String, Object> sequence = new LinkedHashMap<String, Object>();
 						sequence.put("@type", "korap:group");
-						sequence.put("operation", "operation:"+ "sequence");
+						sequence.put("operation", "operation:sequence");
 						sequence.put("operands", new ArrayList<Object>());
 						// push sequence on object stack but don't increment stackedObjects counter since
 						// we've got to wait until the parent node is processed - therefore, add the parent
@@ -223,7 +227,12 @@
 				fieldMap.put("match", "match:eq");
 			}
 			//Step II: decide where to put
-			putIntoSuperObject(token, 1);
+			if (! QueryUtils.hasChild(node, "TPOS")) {
+				putIntoSuperObject(token, 1);
+			} else {
+				
+			}
+			
 		}
 		
 		if (nodeCat.equals("OPMORPH")) {
@@ -505,7 +514,7 @@
 			submatchgroup.put("classRef", spanRef);
 			ArrayList<Object> submatchoperands = new ArrayList<Object>();
 			submatchgroup.put("operands", submatchoperands);
-			putIntoSuperObject(submatchgroup, 1);
+			putIntoSuperObject(submatchgroup, 0);
 			
 			// Distinguish two cases. Normal case: query has just one condition, like #BED(X, sa) ...
 			if (conditions.getChildCount()==1) {
@@ -767,9 +776,27 @@
 	}
 	
 
-	private static Tree parseCosmasQuery(String p) throws RecognitionException {
+	private static Tree parseCosmasQuery(String q) throws RecognitionException {
+		  Pattern p = Pattern.compile("(\\w+):((\\+|-)?(sa|se|pa|pe|ta|te),?)+");
+		  Matcher m = p.matcher(q);
+		  
+		  String rewrittenQuery = q;
+		  while (m.find()) {
+			  String match = m.group();
+			  String conditionsString = match.split(":")[1];
+			  Pattern conditionPattern = Pattern.compile("(\\+|-)?(sa|se|pa|pe|ta|te)");
+			  Matcher conditionMatcher = conditionPattern.matcher(conditionsString);
+			  String replacement = "#BED("+m.group(1)+" , ";
+			  while (conditionMatcher.find()) {
+				  replacement = replacement+conditionMatcher.group()+",";
+			  }
+			  replacement = replacement.substring(0, replacement.length()-1)+")"; //remove trailing comma and close parenthesis
+			  System.out.println(replacement);
+			  rewrittenQuery = rewrittenQuery.replace(match, replacement);
+		  }
+		  q = rewrittenQuery;
 		  Tree tree = null;
-		  ANTLRStringStream	ss = new ANTLRStringStream(p);
+		  ANTLRStringStream	ss = new ANTLRStringStream(q);
 		  c2psLexer	lex = new c2psLexer(ss);
 		  org.antlr.runtime.CommonTokenStream tokens = new org.antlr.runtime.CommonTokenStream(lex);  //v3
 		  cosmasParser = new c2psParser(tokens);
@@ -800,9 +827,11 @@
 //				"(Mann oder Frau) #IN <s>",
 //				"#BEG(der /w3:5 Mann) /+w10 kommt",
 //				"&würde /w0 MORPH(V)",
-				"#NHIT(gehen /w1:10 voran)",
-				"#BED(der Mann , sa,-pa)",
-				"Mann /t0 Frau"
+//				"#NHIT(gehen /w1:10 voran)",
+//				"#BED(der Mann , sa,-pa)",
+//				"Mann /t0 Frau",
+				"sagt der:sa Bundeskanzler",
+//				"Der:sa,-pe,+te ",
 				};
 //		CosmasTree.debug=true;
 		for (String q : queries) {
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 ec62578..161aa18 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
@@ -179,7 +179,7 @@
 			}
 		}
 		System.out.println("Processing PoliqarpPlus");
-		requestMap.put("context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
+		requestMap.put("@context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
 //		QueryUtils.prepareContext(requestMap);
 		processNode(tree);
 	}
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
index 4495c01..e0f0c0d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
@@ -58,6 +58,22 @@
      * @param childCat The category of the potential child.
      * @return true iff one or more children belong to the specified category
      */
+    public static boolean hasChild(Tree node, String childCat) {
+        for (int i = 0; i < node.getChildCount(); i++) {
+            if (getNodeCat(node.getChild(i)).equals(childCat)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Tests whether a certain node has a child by a certain name
+     *
+     * @param node     The parent node.
+     * @param childCat The category of the potential child.
+     * @return true iff one or more children belong to the specified category
+     */
     public static boolean hasChild(ParseTree node, String childCat) {
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(childCat)) {
@@ -335,4 +351,5 @@
     }
 
 
+
 }
diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/CosmasTreeTest.java
index 1cfb8bb..b084bb4 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/CosmasTreeTest.java
@@ -24,24 +24,9 @@
 		return res.equals(queryMap);
 	}
 	
-//	@Test
+	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap = http://korap.ids-mannheim.de/ns/KorAP/json-ld/v0.1/, " +
-							"boundary = korap:boundary/,"+
-							"group = korap:group/,"+ 
-							"operation = {@id = group:operation/, @type = @id},"+
-							"class = {@id = group:class, @type = xsd:integer},"+
-							"operands = {@id = group:operands, @container = @list},"+
-							"frame = {@id = group:frame/, @type = @id},"+
-							"classRef = {@id = group:classRef, @type = xsd:integer},"+
-							"spanRef = {@id = group:spanRef, @type = xsd:integer},"+
-							"classRefOp = {@id = group:classRefOp, @type = @id},"+
-							"min = {@id = boundary:min, @type = xsd:integer},"+
-							"max = {@id = boundary:max, @type = xsd:integer},"+
-							"exclude = {@id = group:exclude, @type = xsd:boolean},"+
-							"distances = {@id = group:distances, @container = @list},"+
-							"inOrder = {@id = group:inOrder, @type = xsd:boolean}"+
-							"}";
+		String contextString = "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld";
 		ct = new CosmasTree("Test");
 		assertEquals(contextString.replaceAll(" ", ""), ct.getRequestMap().get("@context").toString().replaceAll(" ", ""));
 	}
@@ -599,5 +584,52 @@
 		assertEquals(bed3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
+	@Test
+	public void testColonSeparatedConditions() throws QueryException {
+		
+		query = "Der:sa";
+		String col1 = 
+				"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+					"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+						"{@type=korap:span, key=s}," +
+						"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+							"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=match:eq}}" +
+						"]}" +
+					"]}" +
+				"]}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
+		assertEquals(col1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		query = "Mann:sa,-pa,+te)";
+		String col2 = 
+				"{@type=korap:group, operation=operation:submatch, classRef=[1], operands=[" +
+					"{@type=korap:group, operation=operation:sequence, distances=[" +
+						"{@type=korap:distance, key=w, min=0, max=0}" +
+					"], operands=[" +
+						"{@type=korap:group, operation=operation:position, frame=frame:startswith, operands=[" +
+							"{@type=korap:span, key=s}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
+							"]}" +
+						"]}," +
+						"{@type=korap:group, operation=operation:position, frame=frame:startswith, exclude=true, operands=[" +
+							"{@type=korap:span, key=p}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
+							"]}" +
+						"]}," +
+						"{@type=korap:group, operation=operation:position, frame=frame:endswith, operands=[" +
+							"{@type=korap:span, key=t}," +
+							"{@type=korap:group, operation=operation:class, class=1, operands=[" +
+									"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
+						"]}" +
+					"]}" +
+					"]}" +
+				"]}";
+		ct = new CosmasTree(query);
+		map = ct.getRequestMap().get("query").toString();
+		assertEquals(col2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+	}
 }
 
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index b7c48be..ad293eb 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -24,24 +24,9 @@
 		return res.equals(queryMap);
 	}
 	
-//	@Test
+	@Test
 	public void testContext() throws QueryException {
-		String contextString = "{korap = http://korap.ids-mannheim.de/ns/KorAP/json-ld/v0.1/, " +
-							"boundary = korap:boundary/,"+
-							"group = korap:group/,"+ 
-							"operation = {@id = group:operation/, @type = @id},"+
-							"class = {@id = group:class, @type = xsd:integer},"+
-							"operands = {@id = group:operands, @container = @list},"+
-							"frame = {@id = group:frame/, @type = @id},"+
-							"classRef = {@id = group:classRef, @type = xsd:integer},"+
-							"spanRef = {@id = group:spanRef, @type = xsd:integer},"+
-							"classRefOp = {@id = group:classRefOp, @type = @id},"+
-							"min = {@id = boundary:min, @type = xsd:integer},"+
-							"max = {@id = boundary:max, @type = xsd:integer},"+
-							"exclude = {@id = group:exclude, @type = xsd:boolean},"+
-							"distances = {@id = group:distances, @container = @list},"+
-							"inOrder = {@id = group:inOrder, @type = xsd:boolean}"+
-							"}";
+		String contextString = "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld";
 		ppt = new PoliqarpPlusTree("Test");
 		assertEquals(contextString.replaceAll(" ", ""), ppt.getRequestMap().get("@context").toString().replaceAll(" ", ""));
 	}
