diff --git a/ChangeLog b/ChangeLog
index 4407924..2aaaf03 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,10 @@
+20/12/2019
+  - Added dynamic acquisition of resource info using KorAP API.
+
 11/07/2019
-   - Updated libraries, resources and endpoint description.
+  - Updated libraries, resources and endpoint description.
 
 07/01/2019
-   - Updated Jackson databind library.
-   - Updated tests' descriptions.
-   - Added change log. 
+  - Updated Jackson databind library.
+  - Updated tests' descriptions.
+  - Added change log.
\ No newline at end of file
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 435e21e..e8d9974 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
@@ -78,17 +78,17 @@
      * @throws URISyntaxException
      * @throws IOException
      */
-    public JsonNode retrieveResources ()
+    public KorapResource[] retrieveResources ()
             throws URISyntaxException, IOException {
 
-        URIBuilder builder = new URIBuilder(serviceUri + "Corpus");
+        URIBuilder builder = new URIBuilder(serviceUri + "/resource");
         URI uri = builder.build();
         logger.info("Resource URI: " + uri.toString());
         HttpGet httpRequest = new HttpGet(uri);
 
         CloseableHttpClient client = HttpClients.createDefault();
         CloseableHttpResponse response = null;
-        JsonNode resources = null;
+        KorapResource[] resources = null;
 
         try {
             response = client.execute(httpRequest);
@@ -102,10 +102,9 @@
                         response.getStatusLine().getReasonPhrase());
             }
 
-            BufferedInputStream jsonStream =
-                    new BufferedInputStream(response.getEntity().getContent());
+            InputStream jsonStream = response.getEntity().getContent();
             try {
-                resources = objectMapper.readValue(jsonStream, JsonNode.class);
+                resources = objectMapper.readValue(jsonStream, KorapResource[].class);
             }
             catch (JsonParseException | JsonMappingException e) {
                 throw e;
@@ -298,7 +297,7 @@
         params.add(
                 new BasicNameValuePair("offset", String.valueOf(startRecord)));
 
-        URIBuilder builder = new URIBuilder(serviceUri + "search");
+        URIBuilder builder = new URIBuilder(serviceUri + "/search");
         builder.addParameters(params);
 
         URI uri = builder.build();
@@ -409,7 +408,7 @@
 
         StringBuilder sb = new StringBuilder();
         sb.append(serviceUri);
-        sb.append("corpus/");
+        sb.append("/corpus/");
         sb.append(resourceId);
         sb.append("/");
         sb.append(documentId);
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 10e4412..22a133f 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapEndpointDescription.java
@@ -1,20 +1,18 @@
 package de.ids_mannheim.korap.sru;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.ServletContext;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import eu.clarin.sru.server.SRUConfigException;
 import eu.clarin.sru.server.SRUConstants;
 import eu.clarin.sru.server.SRUException;
@@ -47,7 +45,8 @@
     private Layer textLayer;
 
     private List<AnnotationLayer> annotationLayers;
-    private ObjectMapper mapper = new ObjectMapper();
+    
+    public KorapEndpointDescription () {}
     
     public KorapEndpointDescription (ServletContext context)
             throws SRUConfigException {
@@ -118,33 +117,24 @@
 
         List<ResourceInfo> resourceList = new ArrayList<ResourceInfo>();
 
-        Map<String, String> title;
         Map<String, String> description;
 
-        JsonNode resources;
-
+        KorapResource[] resources;
         try {
-            // resources = KorapSRU.korapClient.retrieveResources();
-            InputStream is = getClass().getClassLoader()
-                    .getResourceAsStream("resources.json");
-            resources = mapper.readTree(is);
+            resources = KorapSRU.korapClient.retrieveResources();
         }
-        catch ( // URISyntaxException |
-        IOException e) {
+        catch (URISyntaxException | IOException e) {
             throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
                     "Failed retrieving resources.");
         }
 
-        for (JsonNode r : resources) {
-            title = new HashMap<String, String>();
-            title.put("de", r.get("name").asText());
-            title.put("en", r.get("name").asText());
-
+        for (KorapResource r : resources) {
             description = new HashMap<String, String>();
-            description.put("de", r.get("description").asText());
+            description.put("de", r.getDescription());
 
-            ResourceInfo ri = new ResourceInfo(r.get("id").asText(), title,
-                    description, KorapSRU.KORAP_WEB_URL, languages, dataviews,
+            ResourceInfo ri = new ResourceInfo(r.getResourceId(), r.getTitles(),
+                    description, KorapSRU.KORAP_WEB_URL,
+                    Arrays.asList(r.getLanguages()), dataviews,
                     this.getSupportedLayers(), null);
             resourceList.add(ri);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapResource.java b/src/main/java/de/ids_mannheim/korap/sru/KorapResource.java
new file mode 100644
index 0000000..ef22102
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapResource.java
@@ -0,0 +1,43 @@
+package de.ids_mannheim.korap.sru;
+
+import java.util.Map;
+
+public class KorapResource {
+
+    private String resourceId;
+    private Map<String, String> titles;
+    private String description;
+    private String[] languages;
+    private Map<Integer, String> layers;
+    public String getResourceId () {
+        return resourceId;
+    }
+    public void setResourceId (String resourceId) {
+        this.resourceId = resourceId;
+    }
+    public Map<String, String> getTitles () {
+        return titles;
+    }
+    public void setTitles (Map<String, String> titles) {
+        this.titles = titles;
+    }
+    public String getDescription () {
+        return description;
+    }
+    public void setDescription (String description) {
+        this.description = description;
+    }
+    public String[] getLanguages () {
+        return languages;
+    }
+    public void setLanguages (String[] languages) {
+        this.languages = languages;
+    }
+    public Map<Integer, String> getLayers () {
+        return layers;
+    }
+    public void setLayers (Map<Integer, String> layers) {
+        this.layers = layers;
+    }
+
+}
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
index f115436..deea936 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
@@ -33,7 +33,7 @@
 public class KorapSRU extends SimpleEndpointSearchEngineBase {
 
     public static final String CLARIN_FCS_RECORD_SCHEMA = "http://clarin.eu/fcs/resource";
-    public static final String KORAP_WEB_URL = "http://korap.ids-mannheim.de/";
+    public static final String KORAP_WEB_URL = "https://korap.ids-mannheim.de/";
 
     public static String redirectBaseURI;
     public static KorapClient korapClient;
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java
index a2de639..388670f 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapJerseyTest.java
@@ -27,7 +27,7 @@
                 .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/")
+                .contextParam("korap.service.uri", "http://localhost:8089/api/v1.0")
                 .build();
     }
 
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 fdd0c8b..4d41ae2 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
@@ -43,10 +43,23 @@
 	    ClientResponse response = resource().queryParam("operation", "searchRetrieve")
                 .queryParam("query", "fein")
                 .get(ClientResponse.class);
-        
+
 	    InputStream entity = response.getEntity(InputStream.class);
         checkSRUSearchRetrieveResponse(entity);
-	} 
+	}
+	
+	@Test
+    public void searchRetrieveCQLTestWithStartRecord() throws IOException, SAXException{
+        ClientResponse response = resource().queryParam("operation", "searchRetrieve")
+                .queryParam("query", "der")
+                .queryParam("startRecord", "51")
+                .get(ClientResponse.class);
+      InputStream entity = response.getEntity(InputStream.class);
+      Document doc = docBuilder.parse(entity);
+      
+      NodeList nodelist = doc.getElementsByTagName("sruResponse:recordPosition");
+      assertEquals("51", nodelist.item(0).getTextContent());
+    } 
 	
 	@Test
 	public void searchRetrieveFCSQLTest() throws IOException, SAXException{
