diff --git a/ChangeLog b/ChangeLog
index 2aaaf03..697b74c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+20/11/2020
+  - Fixed parsing error response from KorAP API and updated tests
+  
 20/12/2019
   - Added dynamic acquisition of resource info using KorAP API.
 
diff --git a/pom.xml b/pom.xml
index 1a655ea..809b3ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>de.mannheim.ids</groupId>
 	<artifactId>KorapSRU</artifactId>
-	<version>1.0.3-SNAPSHOT</version>
+	<version>1.0.4-SNAPSHOT</version>
 	<packaging>war</packaging>
 
 	<name>KorapSRU</name>
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
index 347aaae..fccc24a 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
@@ -178,18 +178,20 @@
             try {
                 result = objectMapper.readValue(jsonStream, KorapResult.class);
             }
-            catch (IOException e) {
-                throw new IOException("Failed processing response.");
-            }
+//            catch (IOException e) {
+//                throw new IOException("Failed processing response.");
+//            }
             finally {
                 jsonStream.close();
             }
         }
-        catch (IOException e) {
-            throw new IOException("Failed executing HTTP request.", e);
-        }
+//        catch (IOException e) {
+//            throw new IOException("Failed executing HTTP request.", e);
+//        }
         finally {
-            response.close();
+            if (response != null) {
+                response.close();
+            }
         }
 
         return result;
@@ -225,23 +227,35 @@
 
         InputStream is = response.getEntity().getContent();
         JsonNode node = objectMapper.readTree(is);
-        String message = node.get("error").textValue();
-        String[] errorItems;
-        if (message.contains("SRU diagnostic")) {
-            errorItems = message.split(":", 2);
-            errorItems[0] = errorItems[0].replace("SRU diagnostic ", "");
-            errorItems[1] = errorItems[1].trim();
+        node = node.at("/errors");
+        String errorCode="", errorMessage="";
+        for (int i=0; i<node.size(); i++){
+            errorCode = node.get(i).get(0).asText();
+            errorMessage= node.get(i).get(1).asText();
+            if (errorCode.contains("SRU diagnostic")){
+                errorCode = errorCode.replace("SRU diagnostic ", "");
+            }
+            // see de.ids_mannheim.korap.query.serialize.util.StatusCodes
+            else if (errorCode.equals("301")){
+                errorCode="7"; // Mandatory parameter not supplied
+            }
+            else if (errorCode.equals("302") || errorCode.equals("303")
+                    || errorCode.equals("304") || errorCode.equals("305")) {
+                errorCode = "10"; // Query syntax error
+            }
+            else if (errorCode.equals("399")){
+                errorCode="47"; // Cannot process query; reason unknown 
+            }
+            else if (errorCode.equals("306") || errorCode.equals("307") ){ 
+                errorCode = "6"; // Unsupported parameter value
+            }
+            else{
+                errorCode = "1"; // General system error
+            }
         }
-        else if (message.contains("not a supported query language")) {
-            errorItems = new String[] { "4",
-                    "KorAP does not support the query language." };
-        }
-        else {
-            errorItems = new String[] { "1", message };
-        }
-
-        throw new HttpResponseException(Integer.parseInt(errorItems[0]),
-                errorItems[1]);
+        System.out.println(errorCode +" "+errorMessage);
+        throw new HttpResponseException(Integer.parseInt(errorCode),
+                errorMessage);
     }
 
     /**
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
index 25133f0..2a711b1 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
@@ -171,6 +171,7 @@
             saxParser.parse(is, annotationHandler);
         }
         catch (SAXException | IOException | URISyntaxException e) {
+            logger.error(e.getMessage());
             throw new XMLStreamException(e);
         }
 
@@ -200,6 +201,7 @@
         if (dataviews.contains("adv")) {
             helper.writeAdvancedDataView(writer);
         }
+        helper.reset();
     }
 
     /**
diff --git a/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java b/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java
index ffb7675..8e56007 100644
--- a/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java
@@ -2,8 +2,10 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -62,8 +64,9 @@
         builder.addParameters(params);
 
         URI uri = builder.build();
-        assertEquals(korapSruUri + "?operation=startRetrieve&query="
-                + "%5Btt%3Alemma%3D%22.*bar%22%5D&queryType=fcs",
+        assertEquals(
+                korapSruUri + "?operation=startRetrieve&query="
+                        + "%5Btt%3Alemma%3D%22.*bar%22%5D&queryType=fcs",
                 uri.toString());
 
         HttpGet request = new HttpGet(uri);
@@ -81,7 +84,7 @@
         assertEquals("134", nodeList.item(0).getTextContent());
         response.close();
     }
-    
+
     @Test
     public void testLemmaRegex () throws URISyntaxException, IOException,
             SAXException, ParserConfigurationException {
@@ -95,8 +98,7 @@
 
         URI uri = builder.build();
         assertEquals(korapSruUri + "?operation=startRetrieve&query=%5Blemma"
-                + "%3D%22.*bar%22%5D&queryType=fcs",
-                uri.toString());
+                + "%3D%22.*bar%22%5D&queryType=fcs", uri.toString());
 
         HttpGet request = new HttpGet(uri);
         CloseableHttpClient client = HttpClients.createDefault();
@@ -114,4 +116,43 @@
         response.close();
     }
 
+    @Test
+    public void testUnsupportedLayer () throws URISyntaxException, IOException,
+            SAXException, ParserConfigurationException {
+        List<NameValuePair> params = new ArrayList<NameValuePair>();
+        params.add(new BasicNameValuePair("operation", "startRetrieve"));
+        params.add(new BasicNameValuePair("query", "[unknown=\"Feuer\"]"));
+        params.add(new BasicNameValuePair("queryType", "fcs"));
+
+        URIBuilder builder = new URIBuilder(korapSruUri);
+        builder.addParameters(params);
+
+        URI uri = builder.build();
+        assertEquals(
+                korapSruUri + "?operation=startRetrieve&query="
+                        + "%5Bword%3D%22Feuer%22%5D&queryType=fcs",
+                uri.toString());
+
+        HttpGet request = new HttpGet(uri);
+        CloseableHttpClient client = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        response = client.execute(request);
+
+        assertEquals(200, response.getStatusLine().getStatusCode());
+
+        InputStream is = response.getEntity().getContent();
+//        BufferedReader br = new BufferedReader(new InputStreamReader(is));
+//        String line = null;
+//        while ((line=br.readLine())!=null){
+//            System.out.println(line); 
+//        }
+        
+        Document document = documentBuilder.parse(is);
+        NodeList nodeList = document.getElementsByTagName("diag:message");
+        assertEquals(
+                "status code: 6, reason phrase: Layer unknown is unsupported.",
+                nodeList.item(0).getTextContent());
+        response.close();
+    }
+
 }
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
index 26e3311..dee9022 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
@@ -6,13 +6,11 @@
 import java.net.URISyntaxException;
 
 import org.apache.http.client.HttpResponseException;
-import org.junit.Ignore;
 import org.junit.Test;
 
-import com.fasterxml.jackson.databind.JsonNode;
-
 import de.ids_mannheim.korap.sru.KorapClient;
 import de.ids_mannheim.korap.sru.KorapMatch;
+import de.ids_mannheim.korap.sru.KorapResource;
 import de.ids_mannheim.korap.sru.KorapResult;
 import de.ids_mannheim.korap.sru.QueryLanguage;
 
@@ -35,7 +33,7 @@
     private KorapMatch match;
     
     public KorapClientTest () {
-        c = new KorapClient("http://localhost:8089/api/", 25, 50);
+        c = new KorapClient("http://localhost:8089/api/v1.0", 25, 50);
     }
 
     @Test
@@ -92,12 +90,11 @@
 	}
     
     @Test
-    @Ignore
     public void testRetrieveResource () throws HttpResponseException, Exception {
-        JsonNode resources = c.retrieveResources();
-
-        //assertEquals(1, resources.size());
-        assertEquals("Wikipedia 2015", resources.get(0).get("name").asText());
-        assertEquals("Deutsche Wikipedia 2015", resources.get(0).get("description").asText());
+        KorapResource[] resources = c.retrieveResources();
+        assertEquals(3, resources.length);
+        assertEquals("WPD17", resources[0].getResourceId());
+        assertEquals("WDD17", resources[1].getResourceId());
+        assertEquals("WUD17", resources[2].getResourceId());
     }
 }
