diff --git a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java b/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
index ab3cd02..c05ae6b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
+++ b/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
@@ -141,18 +141,19 @@
             if (layer == null) {
                 computeLayer(annotationCode);
             }
-            String code = array.get(1);
-            if (code.endsWith("=") || code.endsWith(":")) {
-                code = code.substring(0, code.length() - 1);
-            }
+
             Annotation annotation = null;
             if (array.size() == 2) {
+                String code = array.get(1);
+                if (code.endsWith("=") || code.endsWith(":")) {
+                    code = code.substring(0, code.length() - 1);
+                }
                 annotation = retrieveOrCreateAnnotation(code, annotationType,
                         null, array.get(0));
             }
             else if (array.size() == 3) {
-                annotation = retrieveOrCreateAnnotation(code, annotationType,
-                        array.get(1), array.get(2));
+                annotation = retrieveOrCreateAnnotation(array.get(0),
+                        annotationType, array.get(1), array.get(2));
             }
             if (annotation != null) {
                 AnnotationKey annotationKey =
@@ -167,8 +168,7 @@
             if (this.key == null) {
                 computeKey(annotationCode);
             }
-            String valueCode = array.get(0);
-            Annotation value = retrieveOrCreateAnnotation(valueCode,
+            Annotation value = retrieveOrCreateAnnotation(array.get(0),
                     AnnotationType.VALUE, array.get(1), array.get(2));
             if (value != null) {
                 values.add(value);
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java b/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
index 1cccb4f..e6347e8 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
@@ -45,8 +45,10 @@
         resourceParser.run();
     }
 
-    public void initTest () {
+    public void initTest () throws IOException, KustvaktException {
         setInitialAccessScope();
+        annotationParser.run();
+        resourceParser.run();
     }
 
     private void setInitialAccessScope () {
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java b/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java
index aa6ef2f..26cf383 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
@@ -36,14 +37,14 @@
     public class Layer {
         private String code;
         private String description;
-        private List<Key> keys;
+        private Set<Key> keys;
     }
 
     @Getter
     @Setter
     @JsonInclude(Include.NON_EMPTY)
     @JsonSerialize(include=Inclusion.NON_EMPTY) // old codehouse annotation used by jersey
-    public class Key {
+    public class Key implements Comparable<Key>{
 
         private String code;
         private String description;
@@ -52,5 +53,10 @@
         public Key (String code) {
             this.code = code;
         }
+        
+        @Override
+        public int compareTo (Key k) {
+            return this.code.compareTo(k.code); 
+        }
     }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
index 272d4c8..efe1c43 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
@@ -4,6 +4,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 import org.springframework.stereotype.Component;
 
@@ -86,11 +89,12 @@
                 }
 
                 Annotation layer = f.getLayer();
-                List<Key> keys = new ArrayList<>();
+                Set<Key> keys = new TreeSet<>();
 
                 for (AnnotationKey ak : f.getKeys()) {
                     Annotation a = ak.getKey();
-                    Map<String, String> values = new HashMap<>();
+                    Map<String, String> values = new TreeMap<>();
+                    
                     Key key = dto.new Key(a.getCode());
                     if (language.equals("de")) {
                         key.setDescription(a.getGermanDescription());
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java b/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java
index f644b25..35ee11d 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java
@@ -23,15 +23,6 @@
 @Table(name = "annotation")
 public class Annotation {
 
-    public Annotation () {}
-
-    public Annotation (String code, String type, String text, String description) {
-        this.code = code;
-        this.type = type;
-        this.text = text;
-        this.description = description;
-    }
-
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private int id;
@@ -42,6 +33,16 @@
     @Column(name = "de_description")
     private String germanDescription;
 
+    public Annotation () {}
+
+    public Annotation (String code, String type, String text,
+                       String description) {
+        this.code = code;
+        this.type = type;
+        this.text = text;
+        this.description = description;
+    }
+
     @Override
     public String toString () {
         return "id=" + id + ", code= " + code + ", type= " + type
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index e5f2c1e..c653150 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-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 />
