diff --git a/Changes b/Changes
index f74c7a7..3a859d4 100644
--- a/Changes
+++ b/Changes
@@ -1,7 +1,8 @@
-0.26 2017-06-28
+0.26 2017-06-29
 	- Updated collection query grammar (margaretha)
 	- Updated maven dependency phase (margaretha)
-  - Fixed handling of non-necessary brackets in tokens (diewald)
+    - Fixed handling of non-necessary brackets in tokens (diewald)
+    - Improved error handling (margaretha)
 
 0.25 2017-05-10
 	- Altered dominance and relation serialization (margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
index d6f024a..53fa5bd 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
@@ -180,6 +180,13 @@
         List<Object> error = Arrays.asList(new Object[] { code, msg });
         errors.add(error);
     }
+    
+    public void addError (int code, String[] details) {
+        List<Object> error = new ArrayList<Object>();
+        error.add(code);
+        error.add(details);
+        errors.add(error);
+    }
 
 
     /**
@@ -192,10 +199,19 @@
     public void addError (List<Object> fullErrorMsg) {
         errors.add(fullErrorMsg);
     }
+    
+    
+    /** Retrieves a list of errors occurring in the serialization process. 
+     * 
+     * @return a list of errors
+     */
+    public List<List<Object>> getErrors () {
+        return errors;
+    }
 
 
     /**
-     * Add a class to the list of classes highlighted in KWIC view.
+     * Adds a class to the list of classes highlighted in KWIC view.
      * 
      * @param classId
      *            The class ID.
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
index ba9ab97..1930a9a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
@@ -66,15 +66,13 @@
             throw new NullPointerException("Parser has not been instantiated!");
         }
         log.info("Processing virtual collection query: " + query);
-        if (verbose)
-            System.out.println(tree.toStringTree(parser));
+        log.debug("ANTLR parse tree: " + tree.toStringTree(parser));
         if (tree != null) {
-            log.debug("ANTLR parse tree: " + tree.toStringTree(parser));
             processNode(tree);
         }
         else {
-            addError(StatusCodes.MALFORMED_QUERY, "Could not parse query >>> "
-                    + query + " <<<.");
+            addError(StatusCodes.MALFORMED_QUERY, new String[]{"Could not parse query >>> "
+                    + query + " <<<.", query});
         }
     }
 
@@ -120,6 +118,8 @@
             term.put("match", "match:" + interpretMatchOperator(match));
 
             if (!checkOperatorValueConformance(term)) {
+                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND, 
+                        "Operator "+match+" is not valid.");
                 requestMap = new HashMap<String, Object>();
                 return;
             }
@@ -254,8 +254,6 @@
             if (!(match.equals("match:eq") || match.equals("match:ne")
                     || match.equals("match:contains") || match
                         .equals("match:containsnot"))) {
-                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
-                        "You used an inequation operator with a string value.");
                 return false;
             }
         }
