diff --git a/full/Changes b/full/Changes
index bef9e7c..0ab4d5f 100644
--- a/full/Changes
+++ b/full/Changes
@@ -6,7 +6,8 @@
     - Implemented parsing free resource info from json (margaretha)
 22/10/2018
     - Updated jetty, spring and hibernate versions (margaretha)
-    - Fixed annotation order & added tests (margaretha)
+    - Fixed the order of annotation keys and values, and added tests (margaretha)
+    - Fixed resource DAO & added tests (margaretha)
 
 # version 0.61.2
 12/09/2018
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
index ff3ffd0..d12ff3f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
@@ -4,8 +4,10 @@
 import java.util.Set;
 
 import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
+import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Root;
@@ -37,15 +39,14 @@
      * 
      * @return a list of resources
      */
-    @SuppressWarnings("unchecked")
     public List<Resource> getAllResources () {
         CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
         CriteriaQuery<Resource> query =
                 criteriaBuilder.createQuery(Resource.class);
         Root<Resource> resource = query.from(Resource.class);
         query.select(resource);
-        
-        Query q = entityManager.createQuery(query);
+
+        TypedQuery<Resource> q = entityManager.createQuery(query);
         return q.getResultList();
     }
 
@@ -58,12 +59,17 @@
         query.where(criteriaBuilder.equal(resource.get(Resource_.id), id));
 
         Query q = entityManager.createQuery(query);
-        return (Resource) q.getSingleResult();
+        try {
+            return (Resource) q.getSingleResult();
+        }
+        catch (NoResultException e) {
+            return null;
+        }
     }
 
     public void createResource (String id, String germanTitle,
-            String englishTitle, String englishDescription, Set<AnnotationLayer> layers)
-            throws KustvaktException {
+            String englishTitle, String englishDescription,
+            Set<AnnotationLayer> layers) throws KustvaktException {
         ParameterChecker.checkStringValue(id, "id");
         ParameterChecker.checkStringValue(englishTitle, "en_title");
         ParameterChecker.checkStringValue(germanTitle, "de_title");
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java b/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
index fbe3f92..813adc5 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
@@ -6,8 +6,8 @@
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.Id;
-import javax.persistence.JoinTable;
 import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
 
diff --git a/full/src/main/resources/free-resources.json b/full/src/main/resources/free-resources.json
index ea71020..ba6f63e 100644
--- a/full/src/main/resources/free-resources.json
+++ b/full/src/main/resources/free-resources.json
@@ -5,6 +5,9 @@
     "en_description" : "A collection of German Wikipedia articles from May 2015.",
     "layers": [
         "opennlp/p",
-        "corenlp/p"
+        "corenlp/p",
+        "corenlp/c",
+        "marmot/m",
+        "marmot/p"
     ]
 }]
\ No newline at end of file
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java
new file mode 100644
index 0000000..7fc5807
--- /dev/null
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java
@@ -0,0 +1,31 @@
+package de.ids_mannheim.korap.web.controller;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.sun.jersey.api.client.ClientResponse;
+
+import de.ids_mannheim.korap.config.SpringJerseyTest;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.utils.JsonUtils;
+
+public class FreeResourceControllerTest extends SpringJerseyTest {
+    
+    @Test
+    public void testResource () throws KustvaktException {
+        ClientResponse response = resource().path(API_VERSION)
+                .path("resource").path("info").get(ClientResponse.class);
+
+        String entity = response.getEntity(String.class);
+        JsonNode n = JsonUtils.readTree(entity).get(0);
+        
+        assertEquals("WPD15",n.at("/resourceId").asText());
+        assertEquals("Deutsche Wikipedia Artikel 2015", n.at("/titles/de").asText());
+        assertEquals("German Wikipedia Articles 2015", n.at("/titles/en").asText());
+        assertEquals(1, n.at("/languages").size());
+        assertEquals(5, n.at("/layers").size());
+    }
+
+}
