diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index e47589e..7829387 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -1632,17 +1632,7 @@
                     continue;
 
                 Document doc = atomic.reader().document(localDocID);
-
-				Iterator<IndexableField> fieldIterator = doc.getFields().iterator();
-				while (fieldIterator.hasNext()) {
-					IndexableField iField = fieldIterator.next();
-
-					if (iField.name().equals("tokens"))
-						continue;
-
-					// Add field
-					metaFields.add(iField);
-				};
+                metaFields.populateFields(doc);
 
 				return metaFields;
 			};
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 9b8f395..e579a16 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -6,7 +6,7 @@
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.response.Response;
 import de.ids_mannheim.korap.response.MetaField;
-import de.ids_mannheim.korap.response.MetaFieldsExt;
+import de.ids_mannheim.korap.response.MetaFieldsObj;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexableField;
@@ -103,7 +103,7 @@
     public int internalDocID, localDocID, UID;
 
     @JsonIgnore
-    public MetaFieldsExt mFields = new MetaFieldsExt();
+    public MetaFieldsObj mFields = new MetaFieldsObj();
 
     /**
      * Populate document meta information with information coming from
@@ -123,6 +123,23 @@
         this.populateDocument(doc, field, fieldList);
     };
 
+    /**
+     * Populate document meta information with information coming from
+     * the index.
+     * 
+     * @param doc
+     *            Document object.
+     * @param field
+     *            Primary data field.
+     * @param fields
+     *            Hash object with all supported fields.
+     */
+    public void populateDocument (Document doc, String field,
+            Collection<String> fields) {
+        this.setPrimaryData(doc.get(field));
+        this.populateFields(doc, fields);
+    };
+
 
     public void populateFields (Document doc) {
 
@@ -162,24 +179,6 @@
 
         };
     };
-    
-
-    /**
-     * Populate document meta information with information coming from
-     * the index.
-     * 
-     * @param doc
-     *            Document object.
-     * @param field
-     *            Primary data field.
-     * @param fields
-     *            Hash object with all supported fields.
-     */
-    public void populateDocument (Document doc, String field,
-            Collection<String> fields) {
-        this.setPrimaryData(doc.get(field));
-        this.populateFields(doc, fields);
-    };
 
 
     /**
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 941a137..e083769 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
@@ -3,6 +3,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.StringReader;
+import java.util.*;
+
 import com.fasterxml.jackson.annotation.*;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -11,183 +14,21 @@
 import com.fasterxml.jackson.databind.node.ArrayNode;
 
 import de.ids_mannheim.korap.index.AbstractDocument;
-import de.ids_mannheim.korap.util.KrillDate;
-
-import java.io.IOException;
-
-import de.ids_mannheim.korap.index.KeywordAnalyzer;
-import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
-
-import java.io.StringReader;
-
-import java.util.*;
-import java.util.regex.*;
 
 import org.apache.lucene.index.*;
+import org.apache.lucene.document.Document;
 
-@JsonInclude(Include.NON_NULL)
 public class MetaFields extends AbstractDocument {
 
-	// Logger
-	private final static Logger log = LoggerFactory.getLogger(MetaFields.class);
-
-	// This advices the java compiler to ignore all loggings
-    public static final boolean DEBUG = false;
-
-	// TODO:
-	//   This is a temporary indicator to check
-	//   whether a date field is a date
-	private static final Pattern dateKeyPattern = Pattern.compile(".*Date$");
-
-	// Mapper for JSON serialization
+    // Mapper for JSON serialization
     ObjectMapper mapper = new ObjectMapper();
 
-	private Map<String, MetaField> fieldsMap = new HashMap<>();
-
-
-	public MetaFields () {};
-
-    
-	public MetaFields (String id) {
-		this.addMessage(0, "Response format is temporary");		
-	};
-
-
-	/**
-	 * Add field to collection
-	 */
-	public void add (IndexableField iField) {
-					
-		IndexableFieldType iFieldType = iField.fieldType();
-
-		// Field type needs to be restored heuristically
-		// - though that's not very elegant
-
-		// Ignore non-stored fields
-		if (!iFieldType.stored())
-			return;
-
-		MetaField mf = new MetaField(iField.name());
-
-		// Reuse existing metafield
-		if (fieldsMap.containsKey(mf.key)) {
-			mf = fieldsMap.get(mf.key);
-		}
-
-		// Add new field
-		else {
-			fieldsMap.put(mf.key, mf);
-		};
-		
-		// TODO: Check if metaField exists for that field
-
-		Number n = iField.numericValue();
-		String s = iField.stringValue();
-
-		// Field has numeric value (possibly a date)
-		if (n != null) {
-
-			// Check if key indicates a date
-			Matcher dateMatcher = dateKeyPattern.matcher(mf.key);
-			if (dateMatcher.matches()) {
-				mf.type = "type:date";
-
-				// Check structure with KrillDate
-				KrillDate date = new KrillDate(n.toString());
-				if (date != null) {
-
-					// Serialize withz dash separation
-					mf.values.add(date.toDisplay());
-				};
-			}
-
-			// Field is a number
-			else {
-				mf.type = "type:integer";
-				mf.values.add(n.toString());
-			};
-		}
-		
-		// Field has a textual value
-		else if (s != null) {
-
-			// Stored
-			if (iFieldType.indexOptions() == IndexOptions.NONE) {
-                String value = s.toString();
-                if (value.startsWith("data:")) {
-                    mf.type = "type:attachement";
-                }
-                else {
-                    mf.type = "type:store";
-                };
-				mf.values.add(value);
-			}
-
-			// Keywords
-			else if (iFieldType.indexOptions() == IndexOptions.DOCS_AND_FREQS) {
-				mf.type = "type:keywords";
-
-				// Analyze keywords
-				try {
-					StringReader reader = new StringReader(s.toString());
-					KeywordAnalyzer kwa = new KeywordAnalyzer();
-					TokenStream ts = kwa.tokenStream("-", reader);
-					CharTermAttribute term;
-					ts.reset();
-					while (ts.incrementToken()) {
-						term = ts.getAttribute(CharTermAttribute.class);
-						mf.values.add(term.toString());
-					};
-					ts.close();
-					reader.close();
-				}
-				catch (IOException e) {
-					log.error("Unable to split {}={}", iField.name(), s.toString());
-				}
-			}
-
-			// Text
-			else if (iFieldType.indexOptions() != IndexOptions.DOCS) {
-				mf.type = "type:text";
-				mf.values.add(s.toString());
-			}
-
-            // Special treatment for legacy indices
-            else if (mf.key.equals("UID")) {
-				mf.type = "type:integer";
-				mf.values.add(s.toString());
-            }
-
-			// String
-			else {
-				mf.values.add(s.toString());
-			};
-		}
-		
-		else {
-			log.error("Unknown field type {}", iField.name());
-		};
-	};
-
-
-    /**
-	 * Add field to collection
-     */
-    public void add (String key, MetaField mf) {
-        fieldsMap.put(key, mf);
+    public MetaFields (String id) {
+		this.addMessage(0, "Response format is temporary");
     };
 
 
     /**
-	 * Get field from collection
-     */
-    public MetaField get (String key) {
-        return fieldsMap.get(key);
-    };
-    
-
-	/**
      * Serialize response as a {@link JsonNode}.
      * 
      * @return {@link JsonNode} representation of the response
@@ -201,12 +42,11 @@
 		doc.put("@type", "koral:document");
 		
 		ArrayNode fields = doc.putArray("fields");
-
        
 		// Iterate over all fields
-		Iterator fIter = fieldsMap.keySet().iterator();
+		Iterator<MetaField> fIter = mFields.iterator();
 		while (fIter.hasNext()) {
-            MetaField mf = fieldsMap.get(fIter.next());
+            MetaField mf = fIter.next();
             fields.add(mf.toJsonNode());
 		};
 
diff --git a/src/main/java/de/ids_mannheim/korap/response/MetaFieldsExt.java b/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
similarity index 97%
rename from src/main/java/de/ids_mannheim/korap/response/MetaFieldsExt.java
rename to src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
index 460ae15..82534ba 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFieldsExt.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFieldsObj.java
@@ -26,7 +26,7 @@
 
 import org.apache.lucene.index.*;
 
-public class MetaFieldsExt implements Iterable<MetaField> {
+public class MetaFieldsObj implements Iterable<MetaField> {
 
 	// Logger
 	private final static Logger log = LoggerFactory.getLogger(MetaFields.class);
@@ -45,7 +45,7 @@
 	private Map<String, MetaField> fieldsMap = new HashMap<>();
 
 
-	public MetaFieldsExt () {};
+	public MetaFieldsObj () {};
 
     
 	/**
@@ -112,6 +112,7 @@
 
 			// Field is a number
 			else {
+                mf.type = "type:integer";
                 mf.values.add(n.toString());
 			};
 		}
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
index 01f3c86..8518f90 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
@@ -198,8 +198,11 @@
 		fd.addStored("ref", "My reference");
 		fd.addAttachement("ref2", "data:text/plain;charset=UTF-8,My reference2");
 
+/*
 		fd.addKeywords("keyword", "baum");
 		fd.addKeywords("keyword", "wald");
+*/
+		fd.addKeywords("keyword", "baum wald");
 
 		fd.addText("title", "Der Name der Rose");
 
