diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
index f23d200..d5e473c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
@@ -748,29 +748,4 @@
 		// Return the generated tree
 		return tree;
 	}
-
-	public static void main(String[] args) {
-		/*
-		 * For testing
-		 */
-		String[] queries = new String[] {
-				"cat=\"S\" & cat=/NP/ & cat=/PP/ > #2",
-				"pos & tok & #1 . node",
-				"cat=/S/ & cat=/NP/ & cat=/PP/ > #1",
-				"(cat=\"a\" | cat=\"b\") & tok"
-		};
-		//		AqlTree.verbose=true;
-		for (String q : queries) {
-			try {
-				System.out.println(q);
-				AqlTree at = new AqlTree(q);
-				System.out.println(at.parseAnnisQuery(q).toStringTree(at.parser));
-				System.out.println();
-
-			} catch (NullPointerException | QueryException npe) {
-				npe.printStackTrace();
-			}
-		}
-	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java
index 5b0b0df..71a96fc 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java
@@ -476,22 +476,4 @@
         // Return the generated tree
         return tree;
     }
-
-    public static void main(String[] args) {
-        String query = "foo=bar&c=d";
-        query = "(1990<year<2010&genre=Sport)|textClass=politk";
-        query = "(textClass=wissenschaft & textClass=politik) | textClass=ausland";
-        query = "textClass=Sport & year=2014";
-        query = "title!~mannheim";
-        query = "title = /ada\\)ad/";
-        CollectionQueryTree.verbose = true;
-        CollectionQueryTree filter = null;
-        try {
-        	 filter = new CollectionQueryTree(query);
-        } catch (QueryException e) {
-            e.printStackTrace();
-        }
-        System.out.println(filter.getRequestMap());
-
-    }
-}
+}
\ No newline at end of file
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 ae0397e..5d94bd2 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
@@ -1071,51 +1071,4 @@
 		}
 		return rewrittenQuery;
 	}
-
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		/*
-		 * For debugging
-		 */
-		String[] queries = new String[]{
-				/* COSMAS 2 */
-//				"Mann:sa,-pa,+te,se",
-//				"d*r ($Baum oder $Wald)",
-//				"MORPH(mate/m=temp:pres)",
-//				"MORPH(V)",
-//				"MORPH(p!=V)",
-//				"MORPH(tt/p=V)",
-//				"MORPH(temp:pres)",
-//				"MORPH(a/m=temp:pres)",
-//				"Sonne nicht Mond nicht Sterne",
-//				"(Sonne nicht Mond) nicht Sterne",
-//				"Sonne nicht (Mond oder Sterne)",
-				"#ELEM(W ANA=N)",
-				 "#ELEM(W ANA=N FOO=BAR)",
-				 "#ELEM(W ANA='N V')",
-				 "#NHIT(a %w10 b)"
-		};
-//		CosmasTree.verbose=true;
-		for (String q : queries) {
-			try {
-				System.out.println(q);
-				try {
-					CosmasTree act = new CosmasTree(q);
-					System.out.println(act.parseCosmasQuery(q).toStringTree());
-					System.out.println(act.getRequestMap().get("query"));
-				} catch (QueryException e) {
-					e.printStackTrace();
-				} catch (RecognitionException e) {
-					e.printStackTrace();
-				}
-				System.out.println();
-
-			} catch (NullPointerException npe) {
-				npe.printStackTrace();
-				System.out.println("null\n");
-			}
-		}
-	}
-}
+}
\ No newline at end of file
