diff --git a/src/main/java/de/ids_mannheim/korap/Krill.java b/src/main/java/de/ids_mannheim/korap/Krill.java
index d395fec..6bee230 100644
--- a/src/main/java/de/ids_mannheim/korap/Krill.java
+++ b/src/main/java/de/ids_mannheim/korap/Krill.java
@@ -61,10 +61,6 @@
 
     private final ObjectMapper mapper = new ObjectMapper();
 
-    // Logger
-    private final static Logger log = LoggerFactory.getLogger(Krill.class);
-
-
     /**
      * Construct a new Krill object.
      */
@@ -305,7 +301,6 @@
 
         // Apply search
         else {
-
             // This contains meta and matches
             kr = this.index.search(this);
             // this.getCollection().setIndex(this.index);
@@ -313,6 +308,7 @@
         };
 
         kr.setQuery(this.getQuery());
+
         kr.setCollection(this.getCollection());
         kr.setMeta(this.getMeta());
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index 6a7e495..a365045 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -4,13 +4,7 @@
 import java.io.InputStream;
 import java.nio.ByteBuffer;
 // Java core classes
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 import java.util.regex.Pattern;
 import java.util.zip.GZIPInputStream;
 
@@ -818,7 +812,7 @@
         uid = new Integer(Integer.parseInt(uid)).toString();
 
         Filter filter = (Filter) new QueryWrapperFilter(
-                new TermQuery(new Term("UID", uid)));
+            new TermQuery(new Term("UID", uid)));
 
         try {
 
@@ -1110,24 +1104,28 @@
                         field);
 
 				// The following fields should be lifted for the match
-                HashSet<String> fields = (HashSet<String>) new Krill().getMeta()
-                        .getFields().clone();
-
-				// Lift primary field
-                fields.add(field);
+                List<String> fields = (ArrayList<String>) new Krill().getMeta()
+                    .getFields().clone();
 
 				// Lift all fields
 				if (fields.contains("@all"))
 					fields = null;
 
+                HashSet<String> fieldsSet = new HashSet<String>(fields);
+
+				// Lift primary field
+                fieldsSet.add(field);
+                
                 // Load the necessary fields of the document
-                Document doc = atomic.reader().document(localDocID, fields);
+                Document doc = (fields != null)
+                    ? atomic.reader().document(localDocID, fieldsSet)
+                    : atomic.reader().document(localDocID);
 
                 // Put some more information to the match
                 PositionsToOffset pto = new PositionsToOffset(atomic, field);
                 match.setPositionsToOffset(pto);
                 match.setLocalDocID(localDocID);
-                match.populateDocument(doc, field, fields);
+                match.populateDocument(doc, field, (List<String>) fields);
                 if (DEBUG)
                     log.trace("The document has the id '{}' or the sigle '{}'",
                             match.getDocID(), match.getTextSigle());
@@ -1346,15 +1344,18 @@
             kr.setVersion(this.getVersion());
 
         // The following fields should be lifted for matches
-        HashSet<String> fields = (HashSet<String>) meta.getFields().clone();
-
-        // Lift primary field
-        fields.add(field);
+        List<String> fields = (ArrayList<String>) meta.getFields().clone();
+        HashSet<String> fieldsSet = new HashSet<String>(fields);
 
         // Lift all fields
-        if (fields.contains("@all"))
+        if (fields.contains("@all")) {
             fields = null;
-
+        }
+        else {
+            // Lift primary field
+            fieldsSet.add(field);
+        };
+        
         // Some initializations ...
         int i = 0;
         int startIndex = kr.getStartIndex();
@@ -1479,7 +1480,7 @@
 
                     // Do not load all of this, in case the doc is the same!
                     final Document doc = (fields != null)
-                            ? lreader.document(localDocID, fields)
+                            ? lreader.document(localDocID, fieldsSet)
                             : lreader.document(localDocID);
 
                     // Create new Match
@@ -1593,20 +1594,24 @@
         return kr;
     };
 
+    public MetaFields getFields (String textSigle) {
+
+        List hs = new ArrayList<String>();
+        hs.add("@all");
+        return this.getFields(textSigle, hs);
+    };
+
 
 	// Return field values
-    public MetaFields getFields (String textSigle) {
-		// , HashSet<String> fields) {
+    public MetaFields getFields (String textSigle, List<String> fields) {
 
 		// Create TermQuery for document
 		TermQuery textSigleQuery = new TermQuery(new Term("textSigle", textSigle));
 
 		Filter filter = (Filter) new QueryWrapperFilter(textSigleQuery);
 
-		/*
-		if (fields.contain("@all"))
+		if (fields.contains("@all"))
 			fields = null;
-		*/
 
 		MetaFields metaFields = new MetaFields(textSigle);
 
@@ -1632,7 +1637,10 @@
                     continue;
 
                 Document doc = atomic.reader().document(localDocID);
-                metaFields.populateFields(doc);
+                if (fields == null)
+                    metaFields.populateFields(doc);
+                else
+                    metaFields.populateFields(doc, fields);
 
 				return metaFields;
 			};
diff --git a/src/main/java/de/ids_mannheim/korap/KrillMeta.java b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
index 330cbdb..a3db457 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillMeta.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
@@ -26,7 +26,7 @@
     private short itemsPerResource = 0;
     private SearchContext context;
 
-    private HashSet<String> fields;
+    private ArrayList<String> fields;
     HashSet<Integer> highlights;
 
     // Timeout search after milliseconds
@@ -37,9 +37,7 @@
     private final static Logger log = LoggerFactory.getLogger(Krill.class);
 
     {
-        fields = new HashSet<String>(16);
-
-        // TODO: Support @all
+        fields = new ArrayList<String>(16);
 
         // Lift following fields per default
         // These fields are chosen for <legacy /> reasons
@@ -171,8 +169,9 @@
                     this.addField(field.asText());
                 };
             }
-            else
+            else {
                 this.addField(json.get("fields").asText());
+            };
         };
 
         return this;
@@ -265,7 +264,7 @@
     /**
      * Get the fields as a set
      */
-    public HashSet<String> getFields () {
+    public ArrayList<String> getFields () {
         return this.fields;
     };
 
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 8856d98..8de0f35 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -115,7 +115,7 @@
      *            Primary data field.
      */
     public void populateDocument (Document doc, String field) {
-        HashSet<String> fieldList = new HashSet<>(32);
+        List<String> fieldList = new ArrayList<>(32);
         Iterator<IndexableField> fieldIterator = doc.getFields().iterator();
         while (fieldIterator.hasNext())
             fieldList.add(fieldIterator.next().name());
@@ -135,23 +135,26 @@
      *            Hash object with all supported fields.
      */
     public void populateDocument (Document doc, String field,
-            Collection<String> fields) {
+            List<String> fields) {
         this.setPrimaryData(doc.get(field));
         this.populateFields(doc, fields);
     };
 
 
     public void populateFields (Document doc) {
-        HashSet<String> fieldList = new HashSet<>(32);
+        ArrayList<String> fieldList = new ArrayList<>(32);
         Iterator<IndexableField> fieldIterator = doc.getFields().iterator();
-        while (fieldIterator.hasNext())
+        while (fieldIterator.hasNext()) {
             fieldList.add(fieldIterator.next().name());
+        };
 
+        // TODO: Sort alphabetically!
+        
         this.populateFields(doc, fieldList);
     };
 
 
-    public void populateFields (Document doc, Collection<String> fields) {
+    public void populateFields (Document doc, List<String> fields) {
         // Remove all fields already set
         Iterator<String> fieldsIter = fields.iterator();
         while (fieldsIter.hasNext()) {
@@ -160,10 +163,13 @@
             };
         };
 
-        if (fields.contains("UID"))
+        
+        if (fields.contains("UID")) {
             this.setUID(doc.get("UID"));
+        };
         
         fieldsIter = fields.iterator();
+        mFields.fieldsOrder = new ArrayList<>(16);
 
         while (fieldsIter.hasNext()) {
             String name = fieldsIter.next();
@@ -172,11 +178,12 @@
             if (name == "tokens" || name == "UID")
                 continue;
 
+            mFields.fieldsOrder.add(name);
+
             IndexableField iField = doc.getField(name);
             
             if (iField == null)
                 continue;
-
             
             MetaField mf = mFields.add(iField);
 
@@ -352,17 +359,21 @@
         HashMap<String, JsonNode> map = new HashMap<>();
 
         while (mfIterator.hasNext()) {
-            String mfs = mfIterator.next().key;
-            if (legacyDateFields.contains(mfs) ||
-                legacyStoredFields.contains(mfs) ||
-                legacyTextFields.contains(mfs) ||
-                legacyStringFields.contains(mfs) ||
-                legacyKeywordsFields.contains(mfs)
+            MetaField mf = mfIterator.next();
+            if (mf == null)
+                continue;
+            String mfs = mf.key;
+            String value = this.getFieldValue(mfs);
+                if (value != null && (
+                        legacyDateFields.contains(mfs) ||
+                        legacyStoredFields.contains(mfs) ||
+                        legacyTextFields.contains(mfs) ||
+                        legacyStringFields.contains(mfs) ||
+                        legacyKeywordsFields.contains(mfs) ||
+                        legacyDateFields.contains(mfs)
+                        )
                 ) {
-                map.put(mfs, new TextNode(this.getFieldValue(mfs)));
-            }
-            else if (legacyDateFields.contains(mfs)) {
-                map.put(mfs, new TextNode(this.getFieldValue(mfs)));
+                map.put(mfs, new TextNode(value));
             }
         };
         
diff --git a/src/main/java/de/ids_mannheim/korap/response/MetaField.java b/src/main/java/de/ids_mannheim/korap/response/MetaField.java
index 94052d7..e6b330e 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaField.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaField.java
@@ -17,11 +17,10 @@
 	// Mapper for JSON serialization
     ObjectMapper mapper = new ObjectMapper();
 
-	public String type = "type:string";
+	public String type;
 	public String key;
 	public List<String> values = new ArrayList<>();
 
-
     public MetaField (String key) {
 		this.key = key;
 	};
@@ -52,9 +51,13 @@
 	public JsonNode toJsonNode () {
         ObjectNode json = mapper.createObjectNode();
 		json.put("@type", "koral:field");
-		json.put("type", this.type);
         json.put("key", this.key);
 
+        if (this.type == null)
+            return json;
+            
+        json.put("type", this.type);
+
 		// Value is numerical
 		if (this.type.equals("type:integer")) {
 
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 ea992b2..c6ba70e 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
@@ -40,6 +40,8 @@
 	// Mapper for JSON serialization
     ObjectMapper mapper = new ObjectMapper();
 
+	public List<String> fieldsOrder;
+
 	private Map<String, MetaField> fieldsMap = new HashMap<>();
 
 
@@ -53,7 +55,7 @@
         return this.add(
             metaFieldFromIndexableField(
                 iField,
-                new MetaField(iField.name())
+                new MetaField(iField.name(), "type:string")
                 )
             );
 	};
@@ -76,7 +78,7 @@
         return mf;
     };
 
-    
+
     // Field type needs to be restored heuristically
     // - though that's not very elegant
     public static MetaField metaFieldFromIndexableField (IndexableField iField, MetaField mf) {
@@ -206,14 +208,20 @@
         return fieldsMap.containsKey(key);
     };
 
+    private Iterator<String> getIterator () {
+        if (this.fieldsOrder == null) {
+            return fieldsMap.keySet().iterator();
+        };
+        return this.fieldsOrder.iterator();
+    };
 
     
     @Override
     public Iterator<MetaField> iterator() {
         return new Iterator<MetaField>() {
 
-            private Iterator it = fieldsMap.keySet().iterator();
-                
+            private Iterator<String> it = getIterator();
+
             private int currentIndex = 0;
 
             @Override
@@ -223,7 +231,11 @@
 
             @Override
             public MetaField next() {
-                return fieldsMap.get(it.next());
+                String key = it.next();
+                MetaField mf = fieldsMap.get(key);
+                if (mf == null)
+                    return new MetaField(key);
+                return mf;
             };
 
             @Override
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
index 141e60b..ea49bb5 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.index;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.*;
@@ -11,6 +12,7 @@
 
 import org.apache.lucene.search.spans.SpanQuery;
 import org.junit.Test;
+import org.junit.Ignore;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
@@ -26,7 +28,6 @@
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.util.QueryException;
-import static de.ids_mannheim.korap.response.MetaFieldsObj.*;
 
 import org.apache.lucene.document.Document;
 
@@ -441,92 +442,10 @@
         };
     };
 
+    
     @Test
     public void indexArbitraryMetaData () throws Exception {
-        String json = new String(
-            "{"
-            + "  \"fields\" : ["
-            + "    { "
-            + "      \"primaryData\" : \"abc\""
-            + "    },"
-            + "    {"
-            + "      \"name\" : \"tokens\","
-            + "      \"data\" : ["
-            + "         [ \"s:a\", \"i:a\", \"_0$<i>0<i>1\", \"-:t$<i>3\"],"
-            + "         [ \"s:b\", \"i:b\", \"_1$<i>1<i>2\" ],"
-            + "         [ \"s:c\", \"i:c\", \"_2$<i>2<i>3\" ]"
-            + "      ]"
-            + "    }"
-            + "  ],"
-            + "  \"metaFields\" : ["
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:string\","
-            + "      \"key\" : \"textSigle\","
-            + "      \"value\" : \"aa/bb/cc\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:integer\","
-            + "      \"key\" : \"alter\","
-            + "      \"value\" : 40"
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:string\","
-            + "      \"key\" : \"name\","
-            + "      \"value\" : \"Frank\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:string\","
-            + "      \"key\" : \"name\","
-            + "      \"value\" : \"Julian\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:string\","
-            + "      \"key\" : \"schluesselwoerter\","
-            + "      \"value\" : [\"musik\",\"unterhaltung\"]"
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:keywords\","
-            + "      \"key\" : \"tags\","
-            + "      \"value\" : \"nachrichten feuilleton\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:keywords\","
-            + "      \"key\" : \"tags\","
-            + "      \"value\" : [\"sport\",\"raetsel\"]"
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:text\","
-            + "      \"key\" : \"titel\","
-            + "      \"value\" : \"Der alte Baum\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:attachement\","
-            + "      \"key\" : \"anhang\","
-            + "      \"value\" : \"data:application/x.korap-link,http://spiegel.de/\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:store\","
-            + "      \"key\" : \"referenz\","
-            + "      \"value\" : \"So war das\""
-            + "    },"
-            + "    {"
-            + "      \"@type\" : \"koral:field\","
-            + "      \"type\" : \"type:date\","
-            + "      \"key\" : \"datum\","
-            + "      \"value\" : \"2018-04-03\""
-            + "    }"
-            + "  ]"
-            + "}");
+        String json = createDocString1();
 
         KrillIndex ki = new KrillIndex();
         FieldDocument fd = ki.addDoc(json);
@@ -623,4 +542,160 @@
             };
         };
     };
+
+    @Test
+    public void indexArbitraryMetaDataPartial () throws Exception {
+        String json = createDocString1();
+
+        KrillIndex ki = new KrillIndex();
+        FieldDocument fd = ki.addDoc(json);
+
+        ki.commit();
+
+        ArrayList hs = new ArrayList<String>();
+        hs.add("datum");
+        hs.add("titel");
+        JsonNode res = ki.getFields("aa/bb/cc", hs).toJsonNode();
+        assertEquals("type:date", res.at("/document/fields/0/type").asText());
+        assertEquals("datum", res.at("/document/fields/0/key").asText());
+        assertEquals("2018-04-03", res.at("/document/fields/0/value").asText());
+        assertEquals("type:text", res.at("/document/fields/1/type").asText());
+        assertEquals("titel", res.at("/document/fields/1/key").asText());
+        assertEquals("Der alte Baum", res.at("/document/fields/1/value").asText());
+        assertTrue(res.at("/document/fields/2").isMissingNode());
+    };
+
+    @Test
+    public void indexArbitraryMetaDataSorted () throws Exception {
+        String json = createDocString1();
+
+        KrillIndex ki = new KrillIndex();
+        FieldDocument fd = ki.addDoc(json);
+
+        ki.commit();
+
+        ArrayList hs = new ArrayList<String>();
+        hs.add("titel");
+        hs.add("datum");
+        JsonNode res = ki.getFields("aa/bb/cc", hs).toJsonNode();
+        assertEquals("type:text", res.at("/document/fields/0/type").asText());
+        assertEquals("titel", res.at("/document/fields/0/key").asText());
+        assertEquals("Der alte Baum", res.at("/document/fields/0/value").asText());
+        assertEquals("type:date", res.at("/document/fields/1/type").asText());
+        assertEquals("datum", res.at("/document/fields/1/key").asText());
+        assertEquals("2018-04-03", res.at("/document/fields/1/value").asText());
+        assertTrue(res.at("/document/fields/2").isMissingNode());
+    };
+    
+    @Test
+    public void indexArbitraryMetaDataEmpty () throws Exception {
+        String json = createDocString1();
+
+        KrillIndex ki = new KrillIndex();
+        FieldDocument fd = ki.addDoc(json);
+
+        ki.commit();
+
+        ArrayList hs = new ArrayList<String>();
+        hs.add("titel");
+        hs.add("frage");
+        hs.add("datum");
+        JsonNode res = ki.getFields("aa/bb/cc", hs).toJsonNode();
+        assertEquals("type:text", res.at("/document/fields/0/type").asText());
+        assertEquals("titel", res.at("/document/fields/0/key").asText());
+        assertEquals("Der alte Baum", res.at("/document/fields/0/value").asText());
+        assertEquals("frage", res.at("/document/fields/1/key").asText());
+        assertTrue(res.at("/document/fields/1/type").isMissingNode());
+        assertEquals("type:date", res.at("/document/fields/2/type").asText());
+        assertEquals("datum", res.at("/document/fields/2/key").asText());
+        assertEquals("2018-04-03", res.at("/document/fields/2/value").asText());
+        assertTrue(res.at("/document/fields/3").isMissingNode());
+    };
+
+    private static String createDocString1 () {
+        return new String(
+            "{"
+            + "  \"fields\" : ["
+            + "    { "
+            + "      \"primaryData\" : \"abc\""
+            + "    },"
+            + "    {"
+            + "      \"name\" : \"tokens\","
+            + "      \"data\" : ["
+            + "         [ \"s:a\", \"i:a\", \"_0$<i>0<i>1\", \"-:t$<i>3\"],"
+            + "         [ \"s:b\", \"i:b\", \"_1$<i>1<i>2\" ],"
+            + "         [ \"s:c\", \"i:c\", \"_2$<i>2<i>3\" ]"
+            + "      ]"
+            + "    }"
+            + "  ],"
+            + "  \"metaFields\" : ["
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:string\","
+            + "      \"key\" : \"textSigle\","
+            + "      \"value\" : \"aa/bb/cc\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:integer\","
+            + "      \"key\" : \"alter\","
+            + "      \"value\" : 40"
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:string\","
+            + "      \"key\" : \"name\","
+            + "      \"value\" : \"Frank\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:string\","
+            + "      \"key\" : \"name\","
+            + "      \"value\" : \"Julian\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:string\","
+            + "      \"key\" : \"schluesselwoerter\","
+            + "      \"value\" : [\"musik\",\"unterhaltung\"]"
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:keywords\","
+            + "      \"key\" : \"tags\","
+            + "      \"value\" : \"nachrichten feuilleton\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:keywords\","
+            + "      \"key\" : \"tags\","
+            + "      \"value\" : [\"sport\",\"raetsel\"]"
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:text\","
+            + "      \"key\" : \"titel\","
+            + "      \"value\" : \"Der alte Baum\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:attachement\","
+            + "      \"key\" : \"anhang\","
+            + "      \"value\" : \"data:application/x.korap-link,http://spiegel.de/\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:store\","
+            + "      \"key\" : \"referenz\","
+            + "      \"value\" : \"So war das\""
+            + "    },"
+            + "    {"
+            + "      \"@type\" : \"koral:field\","
+            + "      \"type\" : \"type:date\","
+            + "      \"key\" : \"datum\","
+            + "      \"value\" : \"2018-04-03\""
+            + "    }"
+            + "  ]"
+            + "}");
+    };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index c61a1f2..3f6ba6d 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -131,6 +131,7 @@
         Result kr = ks.apply(ki);
         ObjectMapper mapper = new ObjectMapper();
         JsonNode res = mapper.readTree(kr.toJsonString());
+        
         assertEquals(0, res.at("/matches/0/UID").asInt());
         assertEquals("GOE_AGX.00002", res.at("/matches/0/textSigle").asText());
         assertEquals("Maximen und Reflexionen",
