diff --git a/Changes b/Changes
index 51e3dbb..4521dbb 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+0.29 2018-07-05
+  - Added check for errors on QuerySerializer object (diewald)
+
 0.28 2018-01-10
 	- Added some enums for koral:operation (margaretha)
 	- Fixed node serialization of Annis QL containing lemma (margaretha)
diff --git a/pom.xml b/pom.xml
index 7087576..7cffd74 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Koral</artifactId>
-	<version>0.28</version>
+	<version>0.29</version>
 	<packaging>jar</packaging>
 	<name>Koral</name>
 	<url>http://maven.apache.org</url>
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 699581b..4c02a31 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
@@ -21,8 +21,9 @@
  * Main class for Koral, serializes queries from concrete QLs to KoralQuery
  * 
  * @author Joachim Bingel (bingel@ids-mannheim.de), Michael Hanl
- *         (hanl@ids-mannheim.de), Eliza Margaretha (margaretha@ids-mannheim.de)
- * @version 0.3.0
+ *         (hanl@ids-mannheim.de), Eliza Margaretha (margaretha@ids-mannheim.de),
+ *         Nils Diewald (diewald@ids-mannheim.de)
+ * @version 0.3.1
  * @since 0.1.0
  */
 public class QuerySerializer {
@@ -201,6 +202,18 @@
         return raw();
     }
 
+	/**
+	 * Checks, if a query object contains errors.
+	 */
+	public boolean hasErrors () {
+		if (ast != null) {
+			if (!ast.getErrors().isEmpty()) {
+				return true;
+			};
+		};
+		return false;
+	}
+	
     @SuppressWarnings("unchecked")
     private Map<String, Object> raw () {
         if (ast != null) {
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 0af2c18..f964f8b 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
@@ -44,6 +44,7 @@
     public void testSingleTokens () throws JsonProcessingException, IOException {
         query = "[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
+		assertFalse(qs.hasErrors());
         res = mapper.readTree(qs.toJSON());
         assertEquals("koral:token", res.at("/query/@type").asText());
         assertEquals("Mann", res.at("/query/wrap/key").asText());
@@ -52,6 +53,7 @@
 
         query = "[orth!=Frau]";
         qs.setQuery(query, "poliqarpplus");
+		assertFalse(qs.hasErrors());
         res = mapper.readTree(qs.toJSON());
         assertEquals("koral:token", res.at("/query/@type").asText());
         assertEquals("Frau", res.at("/query/wrap/key").asText());
@@ -60,6 +62,7 @@
 
         query = "[p!=NN]";
         qs.setQuery(query, "poliqarpplus");
+		assertFalse(qs.hasErrors());
         res = mapper.readTree(qs.toJSON());
         assertEquals("koral:token", res.at("/query/@type").asText());
         assertEquals("NN", res.at("/query/wrap/key").asText());
@@ -68,6 +71,7 @@
 
         query = "[!p!=NN]";
         qs.setQuery(query, "poliqarpplus");
+		assertFalse(qs.hasErrors());
         res = mapper.readTree(qs.toJSON());
         assertEquals("koral:token", res.at("/query/@type").asText());
         assertEquals("NN", res.at("/query/wrap/key").asText());
@@ -76,6 +80,7 @@
 
         query = "[base=schland/x]";
         qs.setQuery(query, "poliqarpplus");
+		assertFalse(qs.hasErrors());
         res = mapper.readTree(qs.toJSON());
         assertEquals("koral:token", res.at("/query/@type").asText());
         assertEquals(".*?schland.*?", res.at("/query/wrap/key").asText());
@@ -84,6 +89,21 @@
         assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
+	@Test
+    public void testFailure () throws JsonProcessingException, IOException {
+        query = "[base=Mann";
+        qs.setQuery(query, "poliqarpplus");
+		assertTrue(qs.hasErrors());
+        res = mapper.readTree(qs.toJSON());
+        assertEquals(302, res.at("/errors/0/0").asInt());
+        assertEquals(302, res.at("/errors/1/0").asInt());
+		/*
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("Mann", res.at("/query/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
+		*/
+	}
 
     @Test
     public void testNegatedTokens () throws JsonProcessingException,
@@ -389,12 +409,6 @@
         assertEquals(7, operands.get(1).at("/value").asInt());
         assertEquals("match:ne", operands.get(1).at("/match").asText());
     }
-
-
-    
-
-
-    
     
     @Test
     public void testRepetition () throws JsonProcessingException, IOException {
