diff --git a/src/test/java/CollectionQueryTreeTest.java b/src/test/java/CollectionQueryTreeTest.java
index cf7c398..349b98a 100644
--- a/src/test/java/CollectionQueryTreeTest.java
+++ b/src/test/java/CollectionQueryTreeTest.java
@@ -10,14 +10,6 @@
 	private String query;
 	private String expected;
 
-	private boolean equalsQueryContent(String res, String query) throws QueryException {
-		res = res.replaceAll(" ", "");
-		cqt = new CollectionQueryTree();
-		cqt.process(query);
-		String queryMap = cqt.getRequestMap().get("query").toString().replaceAll(" ", "");
-		return res.equals(queryMap);
-	}
-
 	@Test
 	public void testSimple() throws QueryException {
 		query = "textClass=Sport";
@@ -25,7 +17,7 @@
 		expected = "{@type=korap:doc, key=textClass, value=Sport, match=match:eq}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 
 		query = "textClass!=Sport";
@@ -33,7 +25,18 @@
 		expected = "{@type=korap:doc, key=textClass, value=Sport, match=match:ne}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
+		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
+	}
+	
+	@Test
+	public void testContains() throws QueryException {
+		query = "title~Mannheim";
+		expected = 
+			"{@type=korap:doc, key=title, value=Mannheim, match=match:contains}";
+		cqt = new CollectionQueryTree();
+		cqt.process(query);
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -47,7 +50,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -64,7 +67,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -79,7 +82,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -96,7 +99,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 
@@ -115,7 +118,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "(textClass=Sport & textClass=ausland) & corpusID=WPD";
@@ -130,7 +133,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White)";
@@ -148,7 +151,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White & year=2010)";
@@ -168,7 +171,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 
@@ -183,7 +186,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "pubDate>=1990";
@@ -191,7 +194,7 @@
 				"{@type=korap:doc, key=pubDate, type=type:date, value=1990, match=match:geq}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "pubDate>=1990-05";
@@ -199,7 +202,7 @@
 				"{@type=korap:doc, key=pubDate, type=type:date, value=1990-05, match=match:geq}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "pubDate>=1990-05-01";
@@ -207,7 +210,7 @@
 				"{@type=korap:doc, key=pubDate, type=type:date, value=1990-05-01, match=match:geq}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 
@@ -218,7 +221,7 @@
 				"{@type=korap:doc, key=author, value=Go.*he, type=type:regex, match=match:eq}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -229,7 +232,7 @@
 				"{@type=korap:token, wrap={@type=korap:term, layer=lemma, key=Schwalbe, match=match:eq}}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "[cnx/base=Schwalbe]";
@@ -237,7 +240,7 @@
 				"{@type=korap:token, wrap={@type=korap:term, foundry=cnx, layer=lemma, key=Schwalbe, match=match:eq}}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "[base!=Schwalbe]";
@@ -245,7 +248,7 @@
 				"{@type=korap:token, wrap={@type=korap:term, layer=lemma, key=Schwalbe, match=match:ne}}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "[base=Schwalbe] & [orth=Foul]";
@@ -256,7 +259,7 @@
 					"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 	
@@ -270,7 +273,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 		
 		query = "[base=Schwalbe] & textClass=Sport";
@@ -281,7 +284,7 @@
 				"]}";
 		cqt = new CollectionQueryTree();
 		cqt.process(query);
-		map = cqt.getRequestMap().toString();
+		map = cqt.getRequestMap().get("collection").toString();
 		assertEquals(expected.replaceAll(" ", ""), map.replaceAll(" ", ""));
 	}
 
