diff --git a/pom.xml b/pom.xml
index d49199c..9047b67 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,18 @@
 			<artifactId>org.apache.commons.lang</artifactId>
 			<version>2.6</version>
 		</dependency>
+		<dependency>
+			<groupId>com.sun.jersey.jersey-test-framework</groupId>
+			<artifactId>jersey-test-framework-core</artifactId>
+			<version>${jersey.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.sun.jersey.jersey-test-framework</groupId>
+			<artifactId>jersey-test-framework-grizzly</artifactId>
+			<version>${jersey.version}</version>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 
 	<repositories>
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java b/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java
index 1631075..10e4412 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java
@@ -51,19 +51,25 @@
     
     public KorapEndpointDescription (ServletContext context)
             throws SRUConfigException {
+        
+        String endpointDesc = context.getInitParameter("de.ids_mannheim.korap.endpointDescription");
+        if (endpointDesc==null || endpointDesc.isEmpty()){
+            endpointDesc = "/WEB-INF/endpoint-description.xml";
+        }
+        
         try {
-            URL url = context.getResource("/WEB-INF/endpoint-description.xml");
-            EndpointDescription simpleEndpointDescription = SimpleEndpointDescriptionParser
-                    .parse(url);
+            URL url = context.getResource(endpointDesc);
+            EndpointDescription simpleEndpointDescription =
+                    SimpleEndpointDescriptionParser.parse(url);
             if (simpleEndpointDescription != null) {
-                setSupportedLayers(simpleEndpointDescription
-                        .getSupportedLayers());
-                setAnnotationLayers(simpleEndpointDescription
-                        .getSupportedLayers());
-                setSupportedDataViews(simpleEndpointDescription
-                        .getSupportedDataViews());
-                setDefaultDataViews(simpleEndpointDescription
-                        .getSupportedDataViews());
+                setSupportedLayers(
+                        simpleEndpointDescription.getSupportedLayers());
+                setAnnotationLayers(
+                        simpleEndpointDescription.getSupportedLayers());
+                setSupportedDataViews(
+                        simpleEndpointDescription.getSupportedDataViews());
+                setDefaultDataViews(
+                        simpleEndpointDescription.getSupportedDataViews());
                 setCapabilities(simpleEndpointDescription.getCapabilities());
             }
 
@@ -76,37 +82,39 @@
     }
 
     @Override
-    public void destroy() {
-        dataviews.clear();
-        capabilities.clear();
+    public void destroy () {
+        //dataviews.clear();
+        //capabilities.clear();
+        dataviews = null;
+        capabilities = null;
         languages.clear();
     }
 
-    public void setLanguages() {
+    public void setLanguages () {
         languages = new ArrayList<String>();
         languages.add("deu");
     }
 
     @Override
-    public List<URI> getCapabilities() {
+    public List<URI> getCapabilities () {
         return capabilities;
     }
 
-    public void setCapabilities(List<URI> list) throws SRUConfigException {
+    public void setCapabilities (List<URI> list) throws SRUConfigException {
         capabilities = list;
     }
 
     @Override
-    public List<DataView> getSupportedDataViews() {
+    public List<DataView> getSupportedDataViews () {
         return dataviews;
     }
 
-    public void setSupportedDataViews(List<DataView> list) {
+    public void setSupportedDataViews (List<DataView> list) {
         dataviews = list;
     }
 
     @Override
-    public List<ResourceInfo> getResourceList(String pid) throws SRUException {
+    public List<ResourceInfo> getResourceList (String pid) throws SRUException {
 
         List<ResourceInfo> resourceList = new ArrayList<ResourceInfo>();
 
@@ -116,12 +124,13 @@
         JsonNode resources;
 
         try {
-            //resources = KorapSRU.korapClient.retrieveResources();
-            InputStream is = getClass().getClassLoader().getResourceAsStream("resources.json");
-            resources = mapper.readTree(is); 
+            // resources = KorapSRU.korapClient.retrieveResources();
+            InputStream is = getClass().getClassLoader()
+                    .getResourceAsStream("resources.json");
+            resources = mapper.readTree(is);
         }
-        catch ( //URISyntaxException | 
-                IOException e) {
+        catch ( // URISyntaxException |
+        IOException e) {
             throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
                     "Failed retrieving resources.");
         }
@@ -143,11 +152,11 @@
         return resourceList;
     }
 
-    public List<String> getDefaultDataViews() {
+    public List<String> getDefaultDataViews () {
         return defaultDataviews;
     }
 
-    public void setDefaultDataViews(List<DataView> supportedDataViews) {
+    public void setDefaultDataViews (List<DataView> supportedDataViews) {
         defaultDataviews = new ArrayList<String>();
         for (DataView d : supportedDataViews) {
             if (d.getDeliveryPolicy() == DeliveryPolicy.SEND_BY_DEFAULT) {
@@ -156,20 +165,20 @@
         }
     }
 
-    public void setSupportedLayers(List<Layer> layers) {
+    public void setSupportedLayers (List<Layer> layers) {
         this.layers = layers;
     }
 
     @Override
-    public List<Layer> getSupportedLayers() {
+    public List<Layer> getSupportedLayers () {
         return layers;
     }
 
-    public List<AnnotationLayer> getAnnotationLayers() {
+    public List<AnnotationLayer> getAnnotationLayers () {
         return annotationLayers;
     }
 
-    public void setAnnotationLayers(List<Layer> layers) {
+    public void setAnnotationLayers (List<Layer> layers) {
         annotationLayers = new ArrayList<AnnotationLayer>(layers.size());
 
         String layerCode;
@@ -191,7 +200,8 @@
                     if (type.equals(AnnotationLayer.TYPE.POS.toString())) {
                         sb.append("/p");
                     }
-                    else if (type.equals(AnnotationLayer.TYPE.LEMMA.toString())) {
+                    else if (type
+                            .equals(AnnotationLayer.TYPE.LEMMA.toString())) {
                         sb.append("/l");
                     }
                     else {
@@ -201,17 +211,17 @@
                 layerCode = sb.toString();
             }
 
-            AnnotationLayer annotationLayer = new AnnotationLayer(layerCode,
-                    l.getResultId());
+            AnnotationLayer annotationLayer =
+                    new AnnotationLayer(layerCode, l.getResultId());
             annotationLayers.add(annotationLayer);
         }
     }
 
-    public Layer getTextLayer() {
+    public Layer getTextLayer () {
         return textLayer;
     }
 
-    public void setTextLayer(Layer textLayer) {
+    public void setTextLayer (Layer textLayer) {
         this.textLayer = textLayer;
     }
 }
diff --git a/src/main/webapp/WEB-INF/endpoint-description.xml b/src/main/webapp/WEB-INF/endpoint-description.xml
index 1bd2b25..bd3e7a7 100644
--- a/src/main/webapp/WEB-INF/endpoint-description.xml
+++ b/src/main/webapp/WEB-INF/endpoint-description.xml
@@ -16,25 +16,25 @@
     </SupportedDataViews>
     <SupportedLayers>
         <SupportedLayer id="l1" result-id="http://clarin.ids-mannheim.de/korapsru/layers/text">text</SupportedLayer>
-        <SupportedLayer id="l2" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos1" qualifier="cnx"
+        <SupportedLayer id="l2" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos/cnx" qualifier="cnx"
         	alt-value-info="based on STTS tagset"
         	alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>
-        <SupportedLayer id="l3" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos2" qualifier="tt"
+        <SupportedLayer id="l3" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos/tt" qualifier="tt"
             alt-value-info="based on STTS tagset"
             alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>
-        <SupportedLayer id="l4" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos3" qualifier="opennlp"
+        <SupportedLayer id="l4" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos/opennlp" qualifier="opennlp"
             alt-value-info="based on STTS tagset"
             alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>
-       <SupportedLayer id="l5" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos4" qualifier="mate"
+       <SupportedLayer id="l5" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos/mate" qualifier="mate"
             alt-value-info="based on STTS tagset"
             alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>        
-        <SupportedLayer id="l6" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos5" qualifier="xip"
+        <SupportedLayer id="l6" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos/xip" qualifier="xip"
             alt-value-info="based on STTS tagset"
             alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>       
-        <SupportedLayer id="l7" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma1" qualifier="cnx">lemma</SupportedLayer>
-        <SupportedLayer id="l8" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma2" qualifier="tt">lemma</SupportedLayer>
-        <SupportedLayer id="l9" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma3" qualifier="mate">lemma</SupportedLayer>
-        <SupportedLayer id="l10" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma4" qualifier="xip">lemma</SupportedLayer>
+        <SupportedLayer id="l7" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma/cnx" qualifier="cnx">lemma</SupportedLayer>
+        <SupportedLayer id="l8" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma/tt" qualifier="tt">lemma</SupportedLayer>
+        <SupportedLayer id="l9" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma/mate" qualifier="mate">lemma</SupportedLayer>
+        <SupportedLayer id="l10" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma/xip" qualifier="xip">lemma</SupportedLayer>
     </SupportedLayers>
     <Resources>
      	<Resource pid="dummy pid">
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 a60947e..7b030c3 100644
--- a/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/FCSQLRequestTest.java
@@ -36,7 +36,7 @@
  * @author margaretha
  *
  */
-public class FCSQLRequestTest {
+public class FCSQLRequestTest extends KorapJerseyTest {
 
     private String korapSruUri = "http://localhost:8080/KorapSRU";
     private static DocumentBuilder documentBuilder;
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java
new file mode 100644
index 0000000..a2de639
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java
@@ -0,0 +1,44 @@
+package de.ids_mannheim.korap.test;
+
+import com.sun.jersey.test.framework.AppDescriptor;
+import com.sun.jersey.test.framework.JerseyTest;
+import com.sun.jersey.test.framework.WebAppDescriptor;
+import com.sun.jersey.test.framework.spi.container.TestContainerException;
+import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
+import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
+
+import eu.clarin.sru.server.utils.SRUServerServlet;
+
+public class KorapJerseyTest extends JerseyTest {
+
+    @Override
+    protected AppDescriptor configure () {
+        return new WebAppDescriptor.Builder()
+                .servletClass(SRUServerServlet.class)
+                .initParam("eu.clarin.sru.server.utils.sruServerConfigLocation",
+                        "/src/main/webapp/WEB-INF/sru-server-config.xml")
+                .initParam(
+                        "eu.clarin.sru.server.utils.sruServerSearchEngineClass",
+                        "de.ids_mannheim.korap.sru.KorapSRU")
+                .initParam("eu.clarin.sru.server.database", "korapsru")
+                .initParam("eu.clarin.sru.server.sruSupportedVersionMax", "2.0")
+                .initParam("eu.clarin.sru.server.sruSupportedVersionDefault", "2.0")
+                .initParam("eu.clarin.sru.server.numberOfRecords", "25")
+                .initParam("eu.clarin.sru.server.maximumRecords", "50")
+                .contextParam("de.ids_mannheim.korap.endpointDescription",
+                        "/src/main/webapp/WEB-INF/endpoint-description.xml")
+                .contextParam("korap.service.uri", "http://localhost:8089/api/v1.0/")
+                .build();
+    }
+
+    @Override
+    protected TestContainerFactory getTestContainerFactory ()
+            throws TestContainerException {
+        return new GrizzlyWebTestContainerFactory();
+    }
+
+    @Override
+    protected int getPort (int defaultPort) {
+        return 8080;
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
index b5b6c1c..542c815 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
@@ -33,7 +33,7 @@
  * @author margaretha
  *
  */
-public class KorapSRUTest {
+public class KorapSRUTest extends KorapJerseyTest{
 	private int port = 8080;
 	
 	DocumentBuilder docBuilder;
@@ -110,7 +110,7 @@
 		
 		node = node.getFirstChild();
 		attr = node.getAttributes().getNamedItem("id").getNodeValue();
-		assertEquals("http://clarin.ids-mannheim.de/korapsru/layers/text", attr);
+		assertEquals("http://clarin.ids-mannheim.de/korapsru/layers/pos/opennlp", attr);
 //		assertEquals(50, node.getChildNodes().getLength());
 	}
 	
@@ -142,9 +142,9 @@
 		
 		NodeList children = nodelist.item(0).getChildNodes();
 		assertEquals("zr:host", children.item(0).getNodeName());
-		assertEquals("clarin.ids-mannheim.de", children.item(0).getTextContent());
+		assertEquals("127.0.0.1", children.item(0).getTextContent());
 		assertEquals("zr:port", children.item(1).getNodeName());
-		assertEquals("80", children.item(1).getTextContent());
+		assertEquals("8080", children.item(1).getTextContent());
 		assertEquals("zr:database", children.item(2).getNodeName());
 		assertEquals("korapsru", children.item(2).getTextContent());
 		
