diff --git a/Changes b/Changes
index 17e4db5..b4bc7bd 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,9 @@
-0.33 2019-01-08
+0.33 2019-02-15
     - Added debug flags (margaretha)
     - [bugfix] Fixed poliqarp layer bug (#52; margaretha)
     - Replaced log4j with log4j2 (margaretha)
     - Fixed issue #43 - C2 OPIN (margaretha)
+    - [bugfix] Flatten serialization of query errors (diewald, margaretha) 
     
 0.32 2018-12-13
     - [bugfix] Support verbatim string queries (#57; diewald).
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 53fa5bd..c6a909b 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
@@ -181,14 +181,6 @@
         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);
-    }
-
-
     /**
      * Adds an error to {@link #errors}.
      * 
@@ -241,4 +233,4 @@
     public Map<String, Object> getRequestMap () {
         return requestMap;
     }
-}
\ No newline at end of file
+}
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 2688675..c2e14e9 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
@@ -77,8 +77,11 @@
             processNode(tree);
         }
         else {
-            addError(StatusCodes.MALFORMED_QUERY, new String[]{"Could not parse query >>> "
-                    + query + " <<<.", query});
+            ArrayList<Object> errors = new ArrayList<>(3);
+            errors.add(StatusCodes.MALFORMED_QUERY);
+            errors.add("Could not parse query >>> "+ query + " <<<.");
+            errors.add(query);
+            addError(errors);
         }
     }
 
@@ -129,8 +132,13 @@
             term.put("match", "match:" + interpretMatchOperator(match));
 
             if (!checkOperatorValueConformance(term)) {
-                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND, 
-                        new String[]{"Operator "+match+" is not acceptable.", match});
+                ArrayList<Object> errors = new ArrayList<>(3);
+                errors.add(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND);
+                errors.add("Operator "+match+" is not acceptable.");
+                errors.add(match);
+                addError(errors);
+//                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND, 
+//                        new String[]{"Operator "+match+" is not acceptable.", match});
                 requestMap = new HashMap<String, Object>();
                 return;
             }
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 cba745c..9ae9b77 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
@@ -61,6 +61,16 @@
         this.messages = new ArrayList<>();
     }
 
+
+    /**
+     * Remove all messages from the query serialization.
+     */
+    public void resetMsgs () {
+        this.errors.clear();
+        this.warnings.clear();
+        this.messages.clear();
+    }
+
     /**
      * @param args
      */
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
index 3c37b34..5829482 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
@@ -279,10 +279,23 @@
         assertEquals("match:eq", res.at("/collection/match").asText());
     } 
 
+	@Test
+    public void testRegexFailure () throws JsonProcessingException, IOException {    
+        collection = "textClass=/po/litik/";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        qs.resetMsgs();
+        assertEquals("302", res.at("/errors/0/0").asText());
+        assertEquals("Could not parse query >>> textClass=/po/litik/ <<<.",
+                     res.at("/errors/0/1").asText());
+        assertEquals("", res.at("/errors/1/0").asText());
+    }
 
     @Test
     public void testNotDate () throws JsonProcessingException, IOException {
         collection = "author=\"firefighter1974\"";
+        qs.resetMsgs();
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
index 4958fe2..f8bfa1a 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
@@ -155,6 +155,8 @@
         assertEquals("NN", res.at("/query/wrap/key").asText());
         assertEquals("p", res.at("/query/wrap/layer").asText());
         assertEquals("match:eq", res.at("/query/wrap/match").asText());
+        assertEquals("", res.at("/errors/0/0").asText());
+        assertEquals("", res.at("/errors/1/0").asText());
     }
 
 
