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 82f3a80..e1bb0dd 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
@@ -6,9 +6,12 @@
 
 import org.antlr.v4.runtime.*;
 import org.antlr.v4.runtime.tree.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Method;
 import java.util.*;
+import java.util.regex.Pattern;
 
 /**
  * @author hanl, bingel
@@ -16,6 +19,7 @@
  */
 public class CollectionQueryTree extends Antlr4AbstractSyntaxTree {
 
+	private static Logger log = LoggerFactory.getLogger(CollectionQueryTree.class);
     private Parser parser;
     private static boolean verbose;
     private List<ParseTree> visited = new ArrayList<ParseTree>();
@@ -53,7 +57,7 @@
         } else {
             throw new NullPointerException("Parser has not been instantiated!");
         }
-        System.out.println("Processing collection query");
+        log.info("Processing collection query");
         if (verbose) System.out.println(tree.toStringTree(parser));
         processNode(tree);
     }
@@ -99,6 +103,11 @@
             	requestMap = new LinkedHashMap<String,Object>();
             	return;
             }
+            if (checkDateValidity(valueNode)) {
+        		addWarning("The collection query contains a value that looks like a date ('"+valueNode.getText()+"')"
+        				+ " and an operator that is only defined for strings ('"+match+"'). The value is interpreted as "
+        						+ "a string, use a date operator to ensure the value is treated as a date");            	
+            }
             putIntoSuperObject(term);
         }
         
@@ -201,7 +210,7 @@
 		String match = (String) term.get("match");
 		String type = (String) term.get("type");
 		if (type == null || type.equals("type:regex")) {
-			if (!(match.equals("match:eq") || match.equals("match:ne") || match.equals("match:contains"))) {
+			if (!(match.equals("match:eq") || match.equals("match:ne") || match.equals("match:contains") || match.equals("match:containsnot"))) {
 				addError(302, "You used an inequation operator with a string value.");
 				return false;
 			}
@@ -231,8 +240,10 @@
 		return map;
 	}
 
-	private void checkDateValidity(ParseTree valueNode) {
+	private boolean checkDateValidity(ParseTree valueNode) {
 		// TODO ensure month is <= 12, day is <= 31 etc.
+//		Pattern p = 
+		return true;
 	}
 
 	private String interpretMatchOperator(String match) {
@@ -260,7 +271,7 @@
                 out = "contains";
                 break;    
             case "!~":
-                out = "notcontains";
+                out = "containsnot";
                 break;    
             case "in":
                 out = "eq";
@@ -312,8 +323,8 @@
             ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("operands");
             topObjectOperands.add(object);
         } else {
-        	requestMap = object;
-//        	requestMap.put("collection", object);
+//        	requestMap = object;
+        	requestMap.put("collection", object);
         }
     }
 
@@ -428,12 +439,10 @@
             // Get starting rule from parser
             Method startRule = CollectionQueryParser.class.getMethod("start");
             tree = (ParserRuleContext) startRule.invoke(parser, (Object[]) null);
-            System.out.println(tree.toStringTree(parser));
-
         }
         // Some things went wrong ...
         catch (Exception e) {
-            System.err.println("Parsing exception message: " + e.getMessage());
+            System.err.println("Parsing exception message: " + e);
         }
         if (tree == null) {
             throw new QueryException("Could not parse query. Make sure it is correct syntax.");
@@ -446,10 +455,9 @@
         String query = "foo=bar&c=d";
         query = "(1990<year<2010&genre=Sport)|textClass=politk";
         query = "(textClass=wissenschaft & textClass=politik) | textClass=ausland";
-        query = "1990<year<2010 & genre=Sport";
-        query = "1990<year<2010";
         query = "textClass=Sport & year=2014";
-        query = "textClass=0154";
+        query = "title!~mannheim";
+        query = "title=1984";
         CollectionQueryTree.verbose = true;
         CollectionQueryTree filter = null;
         try {
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 42b5775..1dfb430 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
@@ -113,7 +113,6 @@
 			throw new QueryException("Your query could not be processed. Please make sure it is well-formed.");
 		}
 		log.info("Processing CosmasII query");
-		System.out.println("Processing Cosmas");
 		processNode(tree);
 		log.info(requestMap.toString());
 	}
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
index 6458578..ef47d2f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
@@ -2,14 +2,17 @@
 
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.databind.JsonMappingException;
+
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.KorAPLogger;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,6 +26,9 @@
     private AbstractSyntaxTree ast;
     private Object collection;
     private Map meta;
+    private List errors;
+    private List warnings;
+    private List messages;
     private org.slf4j.Logger log = LoggerFactory
             .getLogger(QuerySerializer.class);
 
@@ -40,16 +46,17 @@
         String[] queries;
         if (args.length == 0) {
             queries = new String[]{
-
+            		"foo"
             };
         } else
             queries = new String[]{args[0]};
-
+        
         for (String q : queries) {
             i++;
             try {
                 System.out.println(q);
                 String ql = "cosmas2";
+                jg.setCollection("pubDate=2014");
                 jg.run(q, ql, System.getProperty("user.home") + "/" + ql + "_" + i + ".jsonld");
                 System.out.println();
             } catch (NullPointerException npe) {
@@ -92,7 +99,9 @@
         } else {
             throw new QueryException(queryLanguage + " is not a supported query language!");
         }
+        toJSON();
         Map<String, Object> requestMap = ast.getRequestMap();
+        System.out.println(requestMap);
 //        mapper.writeValue(new File(outFile), requestMap);
     }
 
@@ -146,12 +155,28 @@
         if (ast != null) {
             Map<String, Object> requestMap = ast.getRequestMap();
             Map meta = (Map) requestMap.get("meta");
+            List errors = (List) requestMap.get("errors");
+            List warnings = (List) requestMap.get("warnings");
+            List messages = (List) requestMap.get("messages");
             if (collection != null)
                 requestMap.put("collection", collection);
             if (this.meta != null) {
                 meta.putAll(this.meta);
                 requestMap.put("meta", meta);
             }
+            if (this.errors != null) {
+                errors.addAll(this.errors);
+                requestMap.put("errors", errors);
+            }
+            if (this.warnings != null) {
+                warnings.addAll(this.warnings);
+                requestMap.put("warnings", warnings);
+            }
+            if (this.messages != null) {
+            	messages.addAll(this.messages);
+                requestMap.put("messages", messages);
+            }
+            
 
             return requestMap;
         }
@@ -194,8 +219,12 @@
 
     public QuerySerializer setCollection(String collection) throws QueryException {
         CollectionQueryTree tree = new CollectionQueryTree();
+        Map collectionRequest = tree.getRequestMap();
         tree.process(collection);
-        this.collection = tree.getRequestMap();
+        this.collection = collectionRequest.get("collection");
+        this.errors = (List) collectionRequest.get("errors");
+        this.warnings = (List) collectionRequest.get("warnings");
+        this.messages = (List) collectionRequest.get("messages");
         return this;
     }
 
