diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/AnnotationControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/AnnotationControllerTest.java
new file mode 100644
index 0000000..0b37968
--- /dev/null
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/AnnotationControllerTest.java
@@ -0,0 +1,99 @@
+package de.ids_mannheim.korap.web.controller;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import javax.ws.rs.core.MediaType;
+
+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 AnnotationControllerTest extends SpringJerseyTest {
+    @Test
+    public void testAnnotationLayers () throws KustvaktException {
+        ClientResponse response = resource().path(API_VERSION)
+                .path("annotation").path("layers").get(ClientResponse.class);
+
+        String entity = response.getEntity(String.class);
+        JsonNode n = JsonUtils.readTree(entity);
+
+        assertEquals(31, n.size());
+        n = n.get(0);
+        assertEquals(1, n.get("id").asInt());
+        assertEquals("opennlp/p", n.get("code").asText());
+        assertEquals("p", n.get("layer").asText());
+        assertEquals("opennlp", n.get("foundry").asText());
+        assertNotNull(n.get("description"));
+    }
+
+    @Test
+    public void testAnnotationFoundry () throws KustvaktException {
+        ClientResponse response =
+                resource().path(API_VERSION).path("annotation")
+                        .path("description").type(MediaType.APPLICATION_JSON)
+                        .entity("{\"codes\":[\"opennlp/*\"], \"language\":\"en\"}")
+                        .post(ClientResponse.class);
+
+        String entity = response.getEntity(String.class);
+        JsonNode n = JsonUtils.readTree(entity);
+
+        n = n.get(0);
+        assertEquals("opennlp", n.get("code").asText());
+        assertEquals("OpenNLP", n.get("description").asText());
+        assertEquals(1, n.get("layers").size());
+
+        n = n.get("layers").get(0);
+        assertEquals("p", n.get("code").asText());
+        assertEquals("Part-of-Speech", n.get("description").asText());
+        assertEquals(52, n.get("keys").size());
+
+        n = n.get("keys").get(0);
+        assertEquals("ADJA", n.get("code").asText());
+        assertEquals("Attributive Adjective", n.get("description").asText());
+        assertTrue(n.get("values") == null);
+    }
+
+    @Test
+    public void testAnnotationValues () throws KustvaktException {
+        ClientResponse response =
+                resource().path(API_VERSION).path("annotation")
+                        .path("description").type(MediaType.APPLICATION_JSON)
+                        .entity("{\"codes\":[\"mate/m\"], \"language\":\"en\"}")
+                        .post(ClientResponse.class);
+
+        String entity = response.getEntity(String.class);
+        JsonNode n = JsonUtils.readTree(entity);
+
+        n = n.get(0);
+        assertEquals("mate", n.get("code").asText());
+        assertEquals("Mate", n.get("description").asText());
+        assertEquals(1, n.get("layers").size());
+
+        n = n.get("layers").get(0);
+        assertEquals("m", n.get("code").asText());
+        assertEquals("Morphology", n.get("description").asText());
+        assertEquals(8, n.get("keys").size());
+
+        n = n.get("keys").get(1);
+        assertEquals("case", n.get("code").asText());
+        assertEquals("Case", n.get("description").asText());
+        assertEquals(5, n.get("values").size());
+
+        n = n.get("values");
+        Iterator<Entry<String, JsonNode>> fields = n.fields();
+        Entry<String, JsonNode> e = fields.next();
+        assertEquals("*", e.getKey());
+        assertEquals("Undefined", e.getValue().asText());
+    }
+
+}
diff --git a/full/src/test/resources/test-config.xml b/full/src/test/resources/test-config.xml
index 7a4b439..26dc607 100644
--- a/full/src/test/resources/test-config.xml
+++ b/full/src/test/resources/test-config.xml
@@ -5,15 +5,15 @@
 	xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
 	xmlns:cache="http://www.springframework.org/schema/cache"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans
-           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+           http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
-           http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
+           http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
-           http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
+           http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context
-           http://www.springframework.org/schema/context/spring-context-4.0.xsd
+           http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/util
-           http://www.springframework.org/schema/util/spring-util-4.0.xsd">
+           http://www.springframework.org/schema/util/spring-util.xsd">
 
 	<context:component-scan base-package="de.ids_mannheim.korap" />
 	<context:annotation-config />
