diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/CosmasTreeTest.java
index 6837282..d30e9ff 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/CosmasTreeTest.java
@@ -233,6 +233,46 @@
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(prox4.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		query="Sonne /-w4 Mond";
+		String prox5 = 
+					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
+						"constraint=[" +
+							"{@type=korap:distance, measure=w, direction=plus, min=0, max=4}" +
+						"], " +
+						"operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}" +
+						"]" +
+					"}";
+		ppt = new CosmasTree(query);
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(prox5.replaceAll(" ", ""), map.replaceAll(" ", ""));
+	}
+	
+	@Test
+	public void testNestedOPPROX() throws QueryException {	
+		query="Sonne /-w4 Mond /+w2 Sterne";
+		String prox6 = 
+					"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
+						"constraint=[" +
+							"{@type=korap:distance, measure=w, direction=plus, min=0, max=4}" +
+						"], " +
+						"operands=[" +
+							"{@type=korap:group, relation=distance, match=operands, @subtype=incl, " +
+								"constraint=[" +
+									"{@type=korap:distance, measure=w, direction=plus, min=0, max=2}" +
+								"], " +
+								"operands=[" +
+									"{@type=korap:token, @value={@type=korap:term, @value=orth:Mond, relation==}}," +
+									"{@type=korap:token, @value={@type=korap:term, @value=orth:Sterne, relation==}}" +
+								"]}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:Sonne, relation==}}" +
+						"]" +
+					"}";
+		ppt = new CosmasTree(query);
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(prox6.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
@@ -292,31 +332,6 @@
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(opin4.replaceAll(" ", ""), map.replaceAll(" ", ""));
-		
-//		// position argument is optional 
-//		query="wegen #IN <s>";
-//		String opin2 = 
-//					"{@type=korap:group, relation=include, operands=[" +
-//						"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}," +
-//						"{@type=korap:elem, @value=s}" +
-//					"]}";
-//		ppt = new CosmasTree(query);
-//		map = ppt.getRequestMap().get("query").toString();
-//		assertEquals(opin2.replaceAll(" ", ""), map.replaceAll(" ", ""));
-//		
-//		// parentheses around 'wegen mir' are optional
-//		query="wegen #IN (wegen mir)";
-//		String opin3 = 
-//					"{@type=korap:group, relation=include, operands=[" +
-//						"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}," +
-//						"{@type=korap:sequence, operands=[" +
-//							"{@type=korap:token, @value={@type=korap:term, @value=orth:wegen, relation==}}," +
-//							"{@type=korap:token, @value={@type=korap:term, @value=orth:mir, relation==}}" +
-//						"]}" +
-//					"]}";
-//		ppt = new CosmasTree(query);
-//		map = ppt.getRequestMap().get("query").toString();
-//		assertEquals(opin3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
@@ -435,18 +450,15 @@
 	public void testOPALL() throws QueryException {
 		query="#ALL(gehen /w1:10 voran)";
 		String all1 = 
-//				"{@type=korap:group, relation=all, operands=[" +
-					"{@type=korap:group, relation=distance, match=all, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
-						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
-						"]" +
-					"}" //+
-//				"]}"
-					;
+				"{@type=korap:group, relation=distance, match=all, @subtype=incl, " +
+					"constraint=[" +
+						"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
+					"], " +
+					"operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
+					"]" +
+				"}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(all1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -456,18 +468,15 @@
 	public void testOPNHIT() throws QueryException {
 		query="#NHIT(gehen /w1:10 voran)";
 		String nhit1 = 
-//				"{@type=korap:group, relation=nhit, operands=[" +
-					"{@type=korap:group, relation=distance, match=between, @subtype=incl, " +
-						"constraint=[" +
-							"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
-						"], " +
-						"operands=[" +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
-							"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
-						"]" +
-					"}" //+
-//				"]}"
-					;
+				"{@type=korap:group, relation=distance, match=between, @subtype=incl, " +
+					"constraint=[" +
+						"{@type=korap:distance, measure=w, direction=both, min=1, max=10}" +
+					"], " +
+					"operands=[" +
+						"{@type=korap:token, @value={@type=korap:term, @value=orth:gehen, relation==}}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=orth:voran, relation==}}" +
+					"]" +
+				"}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(nhit1.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -478,8 +487,8 @@
 		query = "#BED(der , sa)";
 		String bed1 = 
 				"{@type=korap:group, relation=position, position=startswith, operands=[" +
-					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
-					"{@type=korap:elem, @value=s}" +
+						"{@type=korap:elem, @value=s}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
@@ -488,15 +497,37 @@
 		query = "#BED(der Mann , +pe)";
 		String bed2 = 
 				"{@type=korap:group, relation=position, position=endswith, operands=[" +
+					"{@type=korap:elem, @value=p}," +
 					"{@type=korap:sequence, operands=[" +
 						"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
 						"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
-					"]}," +
-					"{@type=korap:elem, @value=p}" +
+					"]}" +
 				"]}";
 		ppt = new CosmasTree(query);
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(bed2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		query = "#BED(der Mann , sa,-pa)";
+		String bed3 = 
+				"{@type=korap:group, relation=and, operands=[" +
+					"{@type=korap:group, relation=position, position=startswith, operands=[" +
+						"{@type=korap:elem, @value=s}," +
+						"{@type=korap:sequence, operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+						"]}" +
+					"]}," +
+					"{@type=korap:group, relation=position, position=startswith, @subtype=excl, operands=[" +
+						"{@type=korap:elem, @value=p}," +
+						"{@type=korap:sequence, operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+						"]}" +
+					"]}" +
+				"]}";
+		ppt = new CosmasTree(query);
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(bed3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 }
