diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 63437f2..de9e493 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -79,6 +79,37 @@
 	
 	@Test
 	public void testOccurrence() {
+		// [base=foo]*
+		String occ1 = "{@type=korap:group, operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+					  "], relation=repetition, quantifier=* }"; 
+		ppt = new PoliqarpPlusTree("[base=foo]*");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(occ1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		// [base=foo]*[base=bar]
+		String occ2 = 
+				"{@type=korap:sequence, operands=[" +
+					"{@type=korap:group, operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+					"], relation=repetition, quantifier=* }," +
+					"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}" +
+				"]}"; 
+		ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(occ2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		// [base=bar][base=foo]*
+		String occ3 = 
+				"{@type=korap:sequence, operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
+					"{@type=korap:group, operands=[" +
+					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
+					"], relation=repetition, quantifier=* }" +
+				"]}"; 
+		ppt = new PoliqarpPlusTree("[base=bar][base=foo]*");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(occ3.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
@@ -182,6 +213,19 @@
 						"{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
 					  "]}";
 		assertTrue(equalsQueryContent(cls4, "{[base=Mann][orth=Frau]}[p=NN]"));
+
+		// {2:{1:[tt/p=ADJA]}[mate/p=NN]}"
+		String cls5 = "{@type=korap:group, class=2, operands=[" +
+						"{@type=korap:sequence, operands=[" +
+						   "{@type=korap:group, class=1, operands=[" +
+						     "{@type=korap:token, @value={@type=korap:term, @value=tt/p:ADJA, relation==}}" +
+						   "]}," +
+						   "{@type=korap:token, @value={@type=korap:term, @value=mate/p:NN, relation==}}" + 
+						"]}" +
+					  "]}";
+		ppt = new PoliqarpPlusTree("{2: {1:[tt/p=ADJA]}[mate/p=NN]}");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(cls5.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
@@ -237,7 +281,7 @@
 					"{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}" +
 				"]}" +
 			"]}";
-		ppt = new PoliqarpPlusTree("contains(<s>,startswith(<np>,[orth=Der]))");
+		ppt = new PoliqarpPlusTree("contains(<s>, startswith(<np>,[orth=Der]))");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(npos1.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
@@ -302,13 +346,40 @@
 					"]}" +
 				"]}" +
 			"]}";
-		ppt = new PoliqarpPlusTree("shrink(1:startswith(<s>,{1:<np>}))");
+		ppt = new PoliqarpPlusTree("shrink(1: startswith(<s>,{1:<np>}))");
 		map = ppt.getRequestMap().get("query").toString();
 		assertEquals(shr4.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		// shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) 
+		String shr5 = 
+			"{@type=korap:group, relation=shrink, shrink=3, operands=[" +
+				"{@type=korap:group, relation=position, position=startswith, operands=[" +
+					"{@type=korap:element, @value=s}," +
+					"{@type=korap:group, class=3, operands=[" +
+						"{@type=korap:sequence, operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
+							"{@type=korap:group, class=1, operands=[" +
+								"{@type=korap:sequence, operands=[" +
+									"{@type=korap:token, @value={@type=korap:term, @value=mate/p:ADJA, relation==}}," +
+									"{@type=korap:group, class=2, operands=[" +
+										"{@type=korap:token, @value={@type=korap:term, @value=tt/p:NN, relation==}}" +
+									"]}" + 
+								"]}" +
+							"]}" +
+						"]}" +
+					"]}" +
+				"]}" +
+			"]}";
+		ppt = new PoliqarpPlusTree("shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) ");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(shr5.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
 	@Test
 	public void testLayers() {
+		// [base=Mann]
+		String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=tt/base:Mann, relation==}}";
+		assertTrue(equalsQueryContent(layer1, "[tt/base=Mann]"));
 		
 	}
 }
