diff --git a/src/main/java/de/ids_mannheim/korap/KrillMeta.java b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
index a3db457..6d715e5 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillMeta.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
@@ -40,7 +40,8 @@
         fields = new ArrayList<String>(16);
 
         // Lift following fields per default
-        // These fields are chosen for <legacy /> reasons
+        // These fields are chosen for
+        // <legacy /> reasons
         for (String field : new String[] {
 				"ID",
 				"UID",
diff --git a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
index 413b1d0..7ee4751 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -38,6 +38,7 @@
  */
 @JsonInclude(Include.NON_EMPTY)
 // @JsonIgnoreProperties(ignoreUnknown = true)
+
 public abstract class AbstractDocument extends Response {
     ObjectMapper mapper = new ObjectMapper();
     
@@ -155,20 +156,13 @@
 
 
     public void populateFields (Document doc, List<String> fields) {
-        // Remove all fields already set
         Iterator<String> fieldsIter = fields.iterator();
-        while (fieldsIter.hasNext()) {
-            if (mFields.contains(fieldsIter.next())) {
-                fieldsIter.remove();
-            };
-        };
-
         
         if (fields.contains("UID")) {
             this.setUID(doc.get("UID"));
         };
         
-        fieldsIter = fields.iterator();
+        // fieldsIter = fields.iterator();
         mFields.fieldsOrder = new ArrayList<>(16);
 
         while (fieldsIter.hasNext()) {
@@ -180,6 +174,11 @@
 
             mFields.fieldsOrder.add(name);
 
+            // Ignore fields already set
+            if (mFields.contains(name)) {
+                continue;
+            };
+
             IndexableField iField = doc.getField(name);
             
             if (iField == null)
@@ -314,6 +313,7 @@
      * 
      * @return The text sigle as a string.
      */
+    @JsonIgnore
     public String getTextSigle () {
         return this.getFieldValue("textSigle");
     };
@@ -324,6 +324,7 @@
      * 
      * @return The document sigle as a string.
      */
+    @JsonIgnore
     public String getDocSigle () {
         return this.getFieldValue("docSigle");
     };
@@ -334,12 +335,14 @@
      * 
      * @return The corpus sigle as a string.
      */
+    @JsonIgnore
     public String getCorpusSigle () {
         return this.getFieldValue("corpusSigle");
     };
 
 
     @Deprecated
+    @JsonIgnore
     public String getAvailability () {
         return this.getFieldValue("availability");
     };
@@ -369,6 +372,7 @@
             if (mf == null)
                 continue;
             String mfs = mf.key;
+
             String value = this.getFieldValue(mfs);
                 if (value != null && (
                         legacyDateFields.contains(mfs) ||
diff --git a/src/main/java/de/ids_mannheim/korap/response/MetaFields.java b/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
index e083769..514292f 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
@@ -20,9 +20,6 @@
 
 public class MetaFields extends AbstractDocument {
 
-    // Mapper for JSON serialization
-    ObjectMapper mapper = new ObjectMapper();
-
     public MetaFields (String id) {
 		this.addMessage(0, "Response format is temporary");
     };
diff --git a/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java b/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
index c6ba70e..1c60b1d 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
@@ -208,6 +208,7 @@
         return fieldsMap.containsKey(key);
     };
 
+
     private Iterator<String> getIterator () {
         if (this.fieldsOrder == null) {
             return fieldsMap.keySet().iterator();
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/DocIdentifier.java b/src/main/java/de/ids_mannheim/korap/response/match/DocIdentifier.java
index 53280c7..8d69760 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/DocIdentifier.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/DocIdentifier.java
@@ -7,9 +7,10 @@
 // TODO: This should only use textSigle!
 
 public class DocIdentifier {
-    protected String textSigle, // fine
-            corpusID, // LEGACY
-            docID;    // LEGACY
+    protected String
+        textSigle, // fine
+        corpusID, // LEGACY
+        docID;    // LEGACY
 
 
     // Legacy
