Added some JavaDocs to API classes
diff --git a/Changes b/Changes
index bb99706..a2f7ddf 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+0.49.3 2014-01-15
+        - [documentation] Improved documentation for API classes (diewald)
+	- [documentation] Improved documentation for various queries (margaretha)
+
 0.49.2 2014-12-05
 	- [documentation] Improved documentation for various queries (margaretha)
 	- [feature] Added @Experimental support (margaretha)
diff --git a/pom.xml b/pom.xml
index 8bf1d63..bbcfb33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
 
   <groupId>KorAP-modules</groupId>
   <artifactId>KorAP-lucene-index</artifactId>
-  <version>0.49.2</version>
+  <version>0.49.3</version>
   <packaging>jar</packaging>
 
   <name>KorAP-lucene-index</name>
diff --git a/src/main/java/de/ids_mannheim/korap/KorapCollection.java b/src/main/java/de/ids_mannheim/korap/KorapCollection.java
index eca212f..e7b8d02 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapCollection.java
@@ -58,8 +58,8 @@
     public static final boolean DEBUG = false;
 
     public KorapCollection (KorapIndex ki) {
-	this.index = ki;
-	this.filter = new ArrayList<FilterOperation>(5);
+        this.index = ki;
+        this.filter = new ArrayList<FilterOperation>(5);
     };
 
     /**
@@ -68,60 +68,60 @@
      * legacy collections with the key "collections".
      */
     public KorapCollection (String jsonString) {
-	ObjectMapper mapper = new ObjectMapper();
-	this.filter = new ArrayList<FilterOperation>(5);
+        ObjectMapper mapper = new ObjectMapper();
+        this.filter = new ArrayList<FilterOperation>(5);
 
-	try {
-	    JsonNode json = mapper.readTree(jsonString);
+        try {
+            JsonNode json = mapper.readTree(jsonString);
 
-	    if (json.has("collection")) {
-		this.fromJSON(json.get("collection"));
-	    }
+            if (json.has("collection")) {
+                this.fromJSON(json.get("collection"));
+            }
 	    
-	    // Legacy collection serialization
-	    // This will be removed!
-	    else if (json.has("collections")) {
-		this.addMessage(
-		    850,
-		    "Collections are deprecated in favour of a single collection"
+            // Legacy collection serialization
+            // This will be removed!
+            else if (json.has("collections")) {
+                this.addMessage(
+                    850,
+                    "Collections are deprecated in favour of a single collection"
                 );
-		for (JsonNode collection : json.get("collections")) {
-		    this.fromJSONLegacy(collection);
-		};
-	    };
-	}
-	catch (QueryException qe) {
-	    this.addError(qe.getErrorCode(),qe.getMessage());
-	}
-	catch (IOException e) {
-	    this.addError(
-	        621,
-		"Unable to parse JSON",
-		"KorapCollection",
-		e.getLocalizedMessage()
-	    );
-	};
+                for (JsonNode collection : json.get("collections")) {
+                    this.fromJSONLegacy(collection);
+                };
+            };
+        }
+        catch (QueryException qe) {
+            this.addError(qe.getErrorCode(),qe.getMessage());
+        }
+        catch (IOException e) {
+            this.addError(
+                621,
+                "Unable to parse JSON",
+                "KorapCollection",
+                e.getLocalizedMessage()
+            );
+        };
     };
 
 
     public KorapCollection () {
-	this.filter = new ArrayList<FilterOperation>(5);
+        this.filter = new ArrayList<FilterOperation>(5);
     };
 
 
     public void fromJSON (String jsonString) throws QueryException {
-	ObjectMapper mapper = new ObjectMapper();
-	try {
-	    this.fromJSON((JsonNode) mapper.readTree(jsonString));
-	}
-	catch (Exception e) {
-	    this.addError(621, "Unable to parse JSON", "KorapCollection");
-	};
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            this.fromJSON((JsonNode) mapper.readTree(jsonString));
+        }
+        catch (Exception e) {
+            this.addError(621, "Unable to parse JSON", "KorapCollection");
+        };
     };
 
 
     public void fromJSON (JsonNode json) throws QueryException {
-	this.filter(new KorapFilter(json));
+        this.filter(new KorapFilter(json));
     };
 
 
@@ -129,13 +129,13 @@
      * Legacy API for collection filters.
      */
     public void fromJSONLegacy (String jsonString) throws QueryException {
-	ObjectMapper mapper = new ObjectMapper();
-	try {
-	    this.fromJSONLegacy((JsonNode) mapper.readValue(jsonString, JsonNode.class));
-	}
-	catch (Exception e) {
-	    this.addError(621, "Unable to parse JSON", "KorapCollection");
-	};
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            this.fromJSONLegacy((JsonNode) mapper.readValue(jsonString, JsonNode.class));
+        }
+        catch (Exception e) {
+            this.addError(621, "Unable to parse JSON", "KorapCollection");
+        };
     };
 
 
@@ -143,112 +143,110 @@
      * Legacy API for collection filters.
      */
     public void fromJSONLegacy (JsonNode json) throws QueryException {
-	if (!json.has("@type"))
-	    throw new QueryException(701, "JSON-LD group has no @type attribute");
+        if (!json.has("@type"))
+            throw new QueryException(701, "JSON-LD group has no @type attribute");
 
-	if (!json.has("@value"))
-	    throw new QueryException(851, "Legacy filter need @value fields");
+        if (!json.has("@value"))
+            throw new QueryException(851, "Legacy filter need @value fields");
 
-	String type = json.get("@type").asText();
+        String type = json.get("@type").asText();
 
-	KorapFilter kf = new KorapFilter();
-	kf.setBooleanFilter(
-            kf.fromJSONLegacy(json.get("@value"), "tokens")
-	);
-	if (type.equals("korap:meta-filter")) {
-	    if (DEBUG)
-		log.trace("Add Filter LEGACY");
-	    this.filter(kf);
-	}
+        KorapFilter kf = new KorapFilter();
+        kf.setBooleanFilter(kf.fromJSONLegacy(json.get("@value"), "tokens"));
+        if (type.equals("korap:meta-filter")) {
+            if (DEBUG)
+                log.trace("Add Filter LEGACY");
+            this.filter(kf);
+        }
 
-	else if (type.equals("korap:meta-extend")) {
-	    if (DEBUG)
-		log.trace("Add Extend LEGACY");
-	    this.extend(kf);
-	};
+        else if (type.equals("korap:meta-extend")) {
+            if (DEBUG)
+                log.trace("Add Extend LEGACY");
+            this.extend(kf);
+        };
     };
 
     public int getCount() {
-	return this.filterCount;
+        return this.filterCount;
     };
 
     public void setIndex (KorapIndex ki) {
-	this.index = ki;
+        this.index = ki;
     };
 
     // The checks asre not necessary
     public KorapCollection filter (BooleanFilter filter) {
-	if (DEBUG)
-	    log.trace("Added filter: {}", filter.toString());
+        if (DEBUG)
+            log.trace("Added filter: {}", filter.toString());
+        
+        if (filter == null) {
+            this.addWarning(830, "Filter was empty");
+            return this;
+        };
 
-	if (filter == null) {
-	    this.addWarning(830, "Filter was empty");
-	    return this;
-	};
-
-	Filter f = (Filter) new QueryWrapperFilter(filter.toQuery());
-	if (f == null) {
-	    this.addWarning(831, "Filter is not wrappable");
-	    return this;
-	};
-	FilterOperation fo = new FilterOperation(f, false);
-	if (fo == null) {
-	    this.addWarning(832, "Filter operation is invalid");
-	    return this;
-	};
-	this.filter.add(fo);
-	this.filterCount++;
-	return this;
+        Filter f = (Filter) new QueryWrapperFilter(filter.toQuery());
+        if (f == null) {
+            this.addWarning(831, "Filter is not wrappable");
+            return this;
+        };
+        FilterOperation fo = new FilterOperation(f, false);
+        if (fo == null) {
+            this.addWarning(832, "Filter operation is invalid");
+            return this;
+        };
+        this.filter.add(fo);
+        this.filterCount++;
+        return this;
     };
 
     // Filter based on UIDs
     public KorapCollection filterUIDs (String ... uids) {
-	BooleanFilter filter = new BooleanFilter();
-	filter.or("UID", uids);
-	if (DEBUG)
-	    log.debug("UID based filter: {}", filter.toString());
-	return this.filter(filter);
+        BooleanFilter filter = new BooleanFilter();
+        filter.or("UID", uids);
+        if (DEBUG)
+            log.debug("UID based filter: {}", filter.toString());
+        return this.filter(filter);
     };
 
 
     public KorapCollection filter (KorapFilter filter) {
-	return this.filter(filter.getBooleanFilter());
+        return this.filter(filter.getBooleanFilter());
     };
 
 
     public KorapCollection extend (BooleanFilter filter) {
-	if (DEBUG)
-	    log.trace("Added extension: {}", filter.toString());
-	this.filter.add(
-	    new FilterOperation(
-		(Filter) new QueryWrapperFilter(filter.toQuery()),
+        if (DEBUG)
+            log.trace("Added extension: {}", filter.toString());
+        this.filter.add(
+            new FilterOperation(
+                (Filter) new QueryWrapperFilter(filter.toQuery()),
                 true
             )
         );
-	this.filterCount++;
-	return this;
+        this.filterCount++;
+        return this;
     };
 
     public KorapCollection extend (KorapFilter filter) {
-	return this.extend(filter.getBooleanFilter());
+        return this.extend(filter.getBooleanFilter());
     };
 
     
     public ArrayList<FilterOperation> getFilters () {
-	return this.filter;
+        return this.filter;
     };
 
     public FilterOperation getFilter (int i) {
-	return this.filter.get(i);
+        return this.filter.get(i);
     };
 
 
     public String toString () {
-	StringBuilder sb = new StringBuilder();
-	for (FilterOperation fo : this.filter) {
-	    sb.append(fo.toString()).append("; ");
-	};
-	return sb.toString();
+        StringBuilder sb = new StringBuilder();
+        for (FilterOperation fo : this.filter) {
+            sb.append(fo.toString()).append("; ");
+        };
+        return sb.toString();
     };
 
     /**
@@ -256,178 +254,174 @@
      * testing purposes and not recommended for serious usage. 
      */
     public KorapResult search (SpanQuery query) {
-	return this.index.search(
+        return this.index.search(
             this,
-	    query,
-	    0,
-	    (short) 20,
-	    true, (short) 5,
-	    true, (short) 5
-	);
+            query,
+            0,
+            (short) 20,
+            true, (short) 5,
+            true, (short) 5
+        );
     };
 
     public FixedBitSet bits (AtomicReaderContext atomic) throws IOException  {
+        /*
+          Use Bits.MatchAllBits(int len)
+        */
+        boolean noDoc = true;
+        FixedBitSet bitset;
 
-	/*
-	  Use Bits.MatchAllBits(int len)
-	*/
+        if (this.filterCount > 0) {
+            bitset = new FixedBitSet(atomic.reader().maxDoc());
 
-	boolean noDoc = true;
-	FixedBitSet bitset;
+            ArrayList<FilterOperation> filters = (ArrayList<FilterOperation>) this.filter.clone();
 
-	if (this.filterCount > 0) {
-	    bitset = new FixedBitSet(atomic.reader().maxDoc());
+            FilterOperation kcInit = filters.remove(0);
+            if (DEBUG)
+                log.trace("FILTER: {}", kcInit);
 
-	    ArrayList<FilterOperation> filters = (ArrayList<FilterOperation>) this.filter.clone();
+            // Init vector
+            DocIdSet docids = kcInit.filter.getDocIdSet(atomic, null);
 
-	    FilterOperation kcInit = filters.remove(0);
-	    if (DEBUG)
-		log.trace("FILTER: {}", kcInit);
+            DocIdSetIterator filterIter = docids.iterator();
 
-	    // Init vector
-	    DocIdSet docids = kcInit.filter.getDocIdSet(atomic, null);
+            if (filterIter != null) {
+                if (DEBUG)
+                    log.trace("InitFilter has effect");
+                bitset.or(filterIter);
+                noDoc = false;
+            };
 
-	    DocIdSetIterator filterIter = docids.iterator();
+            if (!noDoc) {
+                for (FilterOperation kc : filters) {
+                    if (DEBUG)
+                        log.trace("FILTER: {}", kc);
 
-	    if (filterIter != null) {
-		if (DEBUG)
-		    log.trace("InitFilter has effect");
-		bitset.or(filterIter);
-		noDoc = false;
-	    };
+                    // TODO: BUG!!!!!!!!!!
+                    docids = kc.filter.getDocIdSet(atomic, kc.isExtension() ? null : bitset);
+                    filterIter = docids.iterator();
 
-	    if (!noDoc) {
-		for (FilterOperation kc : filters) {
-		    if (DEBUG)
-			log.trace("FILTER: {}", kc);
+                    if (filterIter == null) {
+                        // There must be a better way ...
+                        if (kc.isFilter()) {
+                            // TODO: Check if this is really correct!
+                            // Maybe here is the bug
+                            bitset.clear(0, bitset.length());
+                            noDoc = true;
+                        }
+                        else {
+                            // System.err.println("No term found");
+                        };
+                        continue;
+                    };
+                    if (kc.isExtension()) {
+                        // System.err.println("Term found!");
+                        // System.err.println("Old Card:" + bitset.cardinality());
+                        bitset.or(filterIter);
+                        // System.err.println("New Card:" + bitset.cardinality());
+                    }
+                    else {
+                        bitset.and(filterIter);
+                    };
+                };
 
-		    // TODO: BUG!!!!!!!!!!
-		    docids = kc.filter.getDocIdSet(atomic, kc.isExtension() ? null : bitset);
-		    filterIter = docids.iterator();
+                if (!noDoc) {
+                    FixedBitSet livedocs = (FixedBitSet) atomic.reader().getLiveDocs();
+                    if (livedocs != null) {
+                        bitset.and(livedocs);
+                    };
+                };
+            }
+            else {
+                return bitset;
+            };
+        }
+        else {
+            bitset = (FixedBitSet) atomic.reader().getLiveDocs();
+        };
 
-		    if (filterIter == null) {
-			// There must be a better way ...
-			if (kc.isFilter()) {
-			    // TODO: Check if this is really correct!
-			    // Maybe here is the bug
-			    bitset.clear(0, bitset.length());
-			    noDoc = true;
-			}
-			else {
-			    // System.err.println("No term found");
-			};
-			continue;
-		    };
-		    if (kc.isExtension()) {
-			// System.err.println("Term found!");
-			// System.err.println("Old Card:" + bitset.cardinality());
-			bitset.or(filterIter);
-			// System.err.println("New Card:" + bitset.cardinality());
-		    }
-		    else {
-			bitset.and(filterIter);
-		    };
-		};
-
-		if (!noDoc) {
-		    FixedBitSet livedocs = (FixedBitSet) atomic.reader().getLiveDocs();
-		    if (livedocs != null) {
-			bitset.and(livedocs);
-		    };
-		};
-	    }
-	    else {
-		return bitset;
-	    };
-	}
-	else {
-	    bitset = (FixedBitSet) atomic.reader().getLiveDocs();
-	};
-
-	return bitset;
+        return bitset;
     };
 
     public long numberOf (String foundry, String type) throws IOException {
-	if (this.index == null)
-	    return (long) -1;
+        if (this.index == null)
+            return (long) -1;
 
-	return this.index.numberOf(this, foundry, type);
+        return this.index.numberOf(this, foundry, type);
     };
 
     public long numberOf (String type) throws IOException {
-	if (this.index == null)
-	    return (long) -1;
-
-	return this.index.numberOf(this, "tokens", type);
+        if (this.index == null)
+            return (long) -1;
+        
+        return this.index.numberOf(this, "tokens", type);
     };
 
     // This is only for testing purposes!
     @Deprecated
     public HashMap getTermRelation(String field) throws Exception {
-	if (this.index == null) {
-	    HashMap<String,Long> map = new HashMap<>(1);
-	    map.put("-docs", (long) 0);
-	    return map;
-	};
+        if (this.index == null) {
+            HashMap<String,Long> map = new HashMap<>(1);
+            map.put("-docs", (long) 0);
+            return map;
+        };
 
-	return this.index.getTermRelation(this, field);
+        return this.index.getTermRelation(this, field);
     };
 
     @Deprecated
     public String getTermRelationJSON(String field) throws IOException {
-	ObjectMapper mapper = new ObjectMapper();
-	StringWriter sw = new StringWriter();
-	sw.append("{\"field\":");
-	mapper.writeValue(sw,field);
-	sw.append(",");
+        ObjectMapper mapper = new ObjectMapper();
+        StringWriter sw = new StringWriter();
+        sw.append("{\"field\":");
+        mapper.writeValue(sw,field);
+        sw.append(",");
 
-	try {
-	    HashMap<String, Long> map = this.getTermRelation(field);
+        try {
+            HashMap<String, Long> map = this.getTermRelation(field);
 
-	    sw.append("\"documents\":");
-	    mapper.writeValue(sw,map.remove("-docs"));
-	    sw.append(",");
+            sw.append("\"documents\":");
+            mapper.writeValue(sw,map.remove("-docs"));
+            sw.append(",");
 
-	    String[] keys = map.keySet().toArray(new String[map.size()]);
+            String[] keys = map.keySet().toArray(new String[map.size()]);
 
-	    HashMap<String,Integer> setHash = new HashMap<>(20);
-	    ArrayList<HashMap<String,Long>> set = new ArrayList<>(20);
-	    ArrayList<Long[]> overlap = new ArrayList<>(100);
+            HashMap<String,Integer> setHash = new HashMap<>(20);
+            ArrayList<HashMap<String,Long>> set = new ArrayList<>(20);
+            ArrayList<Long[]> overlap = new ArrayList<>(100);
 	    
-	    int count = 0;
-	    for (String key : keys) {
-		if (!key.startsWith("#__")) {
-		    HashMap<String,Long> simpleMap = new HashMap<>();
-		    simpleMap.put(key, map.remove(key));
-		    set.add(simpleMap);
-		    setHash.put(key, count++);
-		};
-	    };
+            int count = 0;
+            for (String key : keys) {
+                if (!key.startsWith("#__")) {
+                    HashMap<String,Long> simpleMap = new HashMap<>();
+                    simpleMap.put(key, map.remove(key));
+                    set.add(simpleMap);
+                    setHash.put(key, count++);
+                };
+            };
 
-	    keys = map.keySet().toArray(new String[map.size()]);
-	    for (String key : keys) {
-		String[] comb = key.substring(3).split(":###:");
-		Long[] l = new Long[3];
-		l[0] = (long) setHash.get(comb[0]);
-		l[1] = (long) setHash.get(comb[1]);
-		l[2] = map.remove(key);
-		overlap.add(l);
-	    };
+            keys = map.keySet().toArray(new String[map.size()]);
+            for (String key : keys) {
+                String[] comb = key.substring(3).split(":###:");
+                Long[] l = new Long[3];
+                l[0] = (long) setHash.get(comb[0]);
+                l[1] = (long) setHash.get(comb[1]);
+                l[2] = map.remove(key);
+                overlap.add(l);
+            };
 
-	    
-	    sw.append("\"sets\":");
-	    mapper.writeValue(sw, (Object) set);
-	    sw.append(",\"overlaps\":");
-	    mapper.writeValue(sw, (Object) overlap);
-	    sw.append(",\"error\":null");
+            sw.append("\"sets\":");
+            mapper.writeValue(sw, (Object) set);
+            sw.append(",\"overlaps\":");
+            mapper.writeValue(sw, (Object) overlap);
+            sw.append(",\"error\":null");
+        }
+        catch (Exception e) {
+            sw.append("\"error\":");
+            mapper.writeValue(sw,e.getMessage());
+        };
 
-	}
-	catch (Exception e) {
-	    sw.append("\"error\":");
-	    mapper.writeValue(sw,e.getMessage());
-	};
-
-	sw.append("}");
-	return sw.getBuffer().toString();
+        sw.append("}");
+        return sw.getBuffer().toString();
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/KorapDocument.java b/src/main/java/de/ids_mannheim/korap/KorapDocument.java
index 2602b46..33e3f3b 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapDocument.java
@@ -10,12 +10,20 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.annotation.*;
 
-/* Todo:: Author and textClass may be arrays! */
+/*
+ * Todo:: Author and textClass may be arrays!
+ */
 
 /**
- * Abstract class representing a document in the KorAP index.
+ * Abstract class representing a document in the
+ * KorAP index.
  *
- * @author Nils Diewald
+ * This model is rather specific to DeReKo data and
+ * should be considered experimental. It may be replaced
+ * by a more agnostic model.
+ * string fields, e.g. may be combined with a prefix.
+ *
+ * @author diewald
  */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public abstract class KorapDocument extends KorapResponse {
@@ -23,504 +31,993 @@
 
     @JsonIgnore
     public int
-	internalDocID,
-	localDocID,
-	UID;
+        internalDocID,
+        localDocID,
+        UID;
 
     private KorapDate
-	pubDate,
-    // newly added
-	creationDate
-	;
+        pubDate,
+        // newly added
+        creationDate;
 
 
     private String
-    // No longer supported
-	ID,
-	corpusID,
-	field,
-	layerInfo,
-	tokenization,
 
-    // Still supported
-	foundries,
-	title,
-	subTitle,
-	author,
-	textClass,
-	pubPlace,
+        // No longer supported
+        ID,
+        corpusID,
+        field,
+        layerInfo,
+        tokenization,
 
-    // newly added
-	textSigle,
-	docSigle,
-	corpusSigle,
-	publisher,
-	editor,
-	textType,
-	textTypeArt,
-	textTypeRef,
-	textColumn,
-	textDomain,
-	license,
-	pages,
-	fileEditionStatement,
-	biblEditionStatement,
-	reference,
-	language,
-	corpusTitle,
-	corpusSubTitle,
-	corpusAuthor,
-	corpusEditor,
-	docTitle,
-	docSubTitle,
-	docAuthor,
-	docEditor,
-	keywords,
-	tokenSource,
-	layerInfos
-	;
+        // Still supported
+        foundries,
+        textClass,
+        pubPlace,
+
+        // Newly added for the corpus/doc/text distinction of DeReKo
+        textSigle, docSigle, corpusSigle,
+        title,       subTitle,       author,       editor,
+        docTitle,    docSubTitle,    docAuthor,    docEditor,
+        corpusTitle, corpusSubTitle, corpusAuthor, corpusEditor,
+        textType, textTypeArt, textTypeRef, textColumn, textDomain,
+        fileEditionStatement, biblEditionStatement,
+        publisher,
+        reference,
+        language,
+        license,
+        pages,
+        keywords,
+
+        // Meta information regarding annotations
+        tokenSource,
+        layerInfos;
 
 
     /**
-     * Set the publication date of the document the match occurs in.
+     * Get the publication date of the document
+     * as a KorapDate object.
+     *
+     * @return A KorapDate object for chaining.
+     * @see KorapDate
+     */
+    @JsonIgnore
+    public KorapDate getPubDate () {
+        return this.pubDate;
+    };
+
+
+    /**
+     * Get the publication date of the document
+     * as a string.
+     *
+     * @return A string containing the KorapDate.
+     * @see KorapDate
+     */    
+    @JsonProperty("pubDate")
+    public String getPubDateString () {
+        if (this.pubDate != null)
+            return this.pubDate.toDisplay();
+        return null;
+    };
+
+
+    /**
+     * Set the publication date of the document.
      *
      * @param date The date as a KorapDate compatible string representation.
      * @return A KorapDate object for chaining.
      * @see KorapDate#Constructor(String)
      */
     public KorapDate setPubDate (String date) {
-	this.pubDate = new KorapDate(date);
-	return this.pubDate;
-    };
-
-    /**
-     * Set the creation date of the document the match occurs in.
-     *
-     * @param date The date as a KorapDate compatible string representation.
-     * @return A KorapDate object for chaining.
-     * @see KorapDate#Constructor(String)
-     */
-    public KorapDate setCreationDate (String date) {
-	this.creationDate = new KorapDate(date);
-	return this.creationDate;
+        this.pubDate = new KorapDate(date);
+        return this.pubDate;
     };
 
 
     /**
-     * Set the publication date of the document the match occurs in.
+     * Set the publication date of the document.
      *
      * @param date The date as a KorapDate object.
      * @return A KorapDate object for chaining.
      * @see KorapDate
      */
     public KorapDate setPubDate (KorapDate date) {
-	return (this.pubDate = date);
+        return (this.pubDate = date);
     };
 
 
     /**
-     * Set the creation date of the document the match occurs in.
+     * Get the creation date of the document
+     * as a KorapDate object.
+     *
+     * @return A KorapDate object for chaining.
+     * @see KorapDate
+     */
+    @JsonIgnore
+    public KorapDate getCreationDate () {
+        return this.creationDate;
+    };
+
+
+    /**
+     * Get the creation date of the document
+     * as a string.
+     *
+     * @return A string containing the KorapDate.
+     * @see KorapDate
+     */
+    @JsonProperty("creationDate")
+    public String getCreationDateString () {
+        if (this.creationDate != null)
+            return this.creationDate.toDisplay();
+        return null;
+    };
+
+
+    /**
+     * Set the creation date of the document.
+     *
+     * @param date The date as a KorapDate compatible string representation.
+     * @return A KorapDate object for chaining.
+     * @see KorapDate#Constructor(String)
+     */
+    public KorapDate setCreationDate (String date) {
+        this.creationDate = new KorapDate(date);
+        return this.creationDate;
+    };
+
+
+    /**
+     * Set the creation date of the document.
      *
      * @param date The date as a KorapDate object.
      * @return A KorapDate object for chaining.
      * @see KorapDate
      */
     public KorapDate setCreationDate (KorapDate date) {
-	return (this.creationDate = date);
-    };
+        return (this.creationDate = date);
+    };    
 
 
     /**
-     * Get the publication date of the document the match occurs in as a KorapDate object.
+     * Get the name of the author of the document.
+     *
+     * @return The name of the author as a string.
      */
-    @JsonIgnore
-    public KorapDate getPubDate () {
-	return this.pubDate;
-    };
-
-
-    /**
-     * Get the creation date of the document the match occurs in as a KorapDate object.
-     */
-    @JsonIgnore
-    public KorapDate getCreationDate () {
-	return this.creationDate;
-    };
-
-    @JsonProperty("pubDate")
-    public String getPubDateString () {
-	if (this.pubDate != null)
-	    return this.pubDate.toDisplay();
-	return null;
-    };
-
-    @JsonProperty("creationDate")
-    public String getCreationDateString () {
-	if (this.creationDate != null)
-	    return this.creationDate.toDisplay();
-	return null;
-    };
-
-    public void setAuthor (String author) {
-	this.author = author;
-    };
-
     public String getAuthor () {
-	return this.author;
+        return this.author;
     };
+        
 
-    public void setTextClass (String textClass) {
-	this.textClass = textClass;
+    /**
+     * Set the name of the author of the document.
+     *
+     * @param author The name of the author as a string.
+     */
+    public void setAuthor (String author) {
+        this.author = author;
     };
+    
 
+    /**
+     * Get the text class of the document.
+     *
+     * @return The text class of the document as a string.
+     */
     public String getTextClass () {
-	return this.textClass;
+        return this.textClass;
     };
 
-    public void setPubPlace (String pubPlace) {
-	this.pubPlace = pubPlace;
+
+    /**
+     * Set the text class of the document.
+     *
+     * @param textClass The text class of the document as a string.
+     */
+    public void setTextClass (String textClass) {
+        this.textClass = textClass;
     };
 
+
+    /**
+     * Get the publication place of the document.
+     *
+     * @return The publication place of the document as a string.
+     */
     public String getPubPlace () {
-	return this.pubPlace;
+        return this.pubPlace;
     };
-
-    // No longer supported
-    public void setCorpusID (String corpusID) {
-	this.corpusID = corpusID;
-    };
-
-    // No longer supported
-    @JsonProperty("corpusID")
-    public String getCorpusID () {
-	return this.corpusID;
-    };
-
-    // No longer supported
-    public void setID (String ID) {
-	this.ID = ID;
-    };
-
-    // No longer supported
-    @JsonProperty("ID")
-    public String getID () {
-	return this.ID;
-    };
-
-    public void setUID (int UID) {
-	this.UID = UID;
-    };
-
-    public void setUID (String UID) {
-	if (UID != null)
-	    this.UID = Integer.parseInt(UID);
-    };
+    
+    
+    /**
+     * Set the publication place of the document.
+     *
+     * @param pubPlace The publication place of the document as a string.
+     */
+    public void setPubPlace (String pubPlace) {
+        this.pubPlace = pubPlace;
+    };    
 
 
+    /**
+     * Get the unique identifier of the document.
+     *
+     * @return The unique identifier of the document as an integer.
+     */
     @JsonProperty("UID")
     public int getUID () {
-	return this.UID;
+        return this.UID;
+    };
+    
+
+    /**
+     * Set the unique identifier of the document.
+     *
+     * @param UID The unique identifier of the document as an integer.
+     */
+    public void setUID (int UID) {
+        this.UID = UID;
     };
 
-    public void setTitle (String title) {
-	this.title = title;
+
+    /**
+     * Set the unique identifier of the document.
+     *
+     * @param UID The unique identifier of the document as a
+     *        string representing an integer.
+     * @throws NumberFormatException
+     */
+    public void setUID (String UID) throws NumberFormatException {
+        if (UID != null)
+            this.UID = Integer.parseInt(UID);
     };
 
+
+    /**
+     * Get the title of the document.
+     *
+     * @return The title of the document as a string.
+     */
     public String getTitle () {
-	return this.title;
+        return this.title;
     };
 
-    public void setSubTitle (String subTitle) {
-	this.subTitle = subTitle;
-    };
 
+    /**
+     * Set the title of the document.
+     *
+     * @param title The title of the document as a string.
+     */
+    public void setTitle (String title) {
+        this.title = title;
+    };
+    
+        
+    /**
+     * Get the subtitle of the document.
+     *
+     * @return The subtitle of the document as a string.
+     */
     public String getSubTitle () {
-	return this.subTitle;
+        return this.subTitle;
     };
 
+
+    /**
+     * Set the subtitle of the document.
+     *
+     * @param subTitle The subtitle of the document as a string.
+     */
+    public void setSubTitle (String subTitle) {
+        this.subTitle = subTitle;
+    };
+
+
+    /**
+     * Get the primary data of the document.
+     *
+     * @return The primary data of the document as a string.
+     */
+    public String getPrimaryData () {
+        if (this.primaryData == null)
+            return "";
+        return this.primaryData.toString();
+    };
+
+
+    /**
+     * Get the primary data of the document,
+     * starting with a given character offset.
+     *
+     * @param startOffset The starting character offset.
+     * @return The substring of primary data of the document as a string.
+     */
+    public String getPrimaryData (int startOffset) {
+        return this.primaryData.substring(startOffset);
+    };
+
+
+    /**
+     * Get the primary data of the document,
+     * starting with a given character offset and ending
+     * with a given character offset.
+     *
+     * @param startOffset The starting character offset.
+     * @param endOffset The ending character offset.
+     * @return The substring of the primary data of the document as a string.
+     */
+    public String getPrimaryData (int startOffset, int endOffset) {
+        return this.primaryData.substring(startOffset, endOffset);
+    };
+
+
+    /**
+     * Set the primary data of the document.
+     *
+     * @param primary The primary data of the document as a string.
+     */
     @JsonIgnore
     public void setPrimaryData (String primary) {
-	this.primaryData = new KorapPrimaryData(primary);
+        this.primaryData = new KorapPrimaryData(primary);
     };
+    
 
+    /**
+     * Set the primary data of the document.
+     *
+     * @param primary The primary data of the document
+     *        as a KorapPrimaryData object.
+     * @see KorapPrimaryData
+     */
     public void setPrimaryData (KorapPrimaryData primary) {
-	this.primaryData = primary;
+        this.primaryData = primary;
     };
 
-    public String getPrimaryData () {
-	if (this.primaryData == null)
-	    return "";
-	return this.primaryData.toString();
-    };
 
-    public String getPrimaryData (int startOffset) {
-	return this.primaryData.substring(startOffset);
-    };
-
-    public String getPrimaryData (int startOffset, int endOffset) {
-	return this.primaryData.substring(startOffset, endOffset);
-    };
-
+    /**
+     * Get the length of the primary data of the document
+     * (i.e. the number of characters).
+     *
+     * @return The length of the primary data of the document as an integer.
+     */
     @JsonIgnore
     public int getPrimaryDataLength () {
-	return this.primaryData.length();
+        return this.primaryData.length();
     };
 
-    public void setFoundries (String foundries) {
-	this.foundries = foundries;
-    };
 
+    /**
+     * Get information on the foundries the document
+     * is annotated with as a string. 
+     *
+     * @return The foundry information string.
+     */
     public String getFoundries () {
-	return this.foundries;
+        return this.foundries;
     };
 
-    // No longer supported
-    public void setTokenization (String tokenization) {
-	this.tokenization = tokenization;
+
+    /**
+     * Set information on the foundries the document
+     * is annotated with. 
+     *
+     * @param foundries The foundry information string.
+     */
+    public void setFoundries (String foundries) {
+        this.foundries = foundries;
     };
 
-    // No longer supported
-    public String getTokenization () {
-	return this.tokenization;
-    };
 
-    // No longer supported
-    public void setLayerInfo (String layerInfo) {
-	this.layerInfo = layerInfo;
-    };
-
-    // No longer supported
-    public String getLayerInfo () {
-	return this.layerInfo;
-    };
-
-    public void setLayerInfos (String layerInfos) {
-	this.layerInfos = layerInfos;
-    };
-
+    /**
+     * Get information on the layers the document
+     * is annotated with as a string. 
+     *
+     * @return The layer information string.
+     */
     public String getLayerInfos () {
-	return this.layerInfos;
+        return this.layerInfos;
     };
 
-    // No longer necessary
-    public void setField (String field) {
-	this.field = field;
+
+    /**
+     * Set information on the layers the document
+     * is annotated with as a string. 
+     *
+     * @param layerInfos The layer information string.
+     */
+    public void setLayerInfos (String layerInfos) {
+        this.layerInfos = layerInfos;
     };
 
-    // No longer necessary
-    public String getField () {
-	return this.field;
-    };
 
     // This is the new text id
+    /**
+     * Get the text sigle as a string. 
+     *
+     * @return The text sigle as a string.
+     */
     public String getTextSigle () {
-	return this.textSigle;
+        return this.textSigle;
     };
 
+
     // This is the new text id
+    /**
+     * Set the text sigle as a string. 
+     *
+     * @param textSigle The text sigle as a string.
+     */
     public void setTextSigle (String textSigle) {
-	this.textSigle = textSigle;
+        this.textSigle = textSigle;
     };
 
+
     // This is the new corpus id
+    /**
+     * Get the corpus sigle as a string. 
+     *
+     * @return The corpus sigle as a string.
+     */
     public String getCorpusSigle () {
-	return this.corpusSigle;
+        return this.corpusSigle;
     };
 
+
     // This is the new corpus id
+    /**
+     * Set the corpus sigle as a string. 
+     *
+     * @param corpusSigle The corpus sigle as a string.
+     */
     public void setCorpusSigle (String corpusSigle) {
-	this.corpusSigle = corpusSigle;
+        this.corpusSigle = corpusSigle;
     };
 
+
+    /**
+     * Get the document sigle as a string. 
+     *
+     * @return The document sigle as a string.
+     */
     public String getDocSigle () {
-	return this.docSigle;
+        return this.docSigle;
     };
 
+
+    /**
+     * Set the document sigle as a string. 
+     *
+     * @param docSigle The document sigle as a string.
+     */
     public void setDocSigle (String docSigle) {
-	this.docSigle = docSigle;
+        this.docSigle = docSigle;
     };
 
+
+    /**
+     * Get the name of the publisher as a string. 
+     *
+     * @return The name of the publisher as a string.
+     */
     public String getPublisher () {
-	return this.publisher;
+        return this.publisher;
     };
 
+
+    /**
+     * Set the name of the publisher as a string. 
+     *
+     * @param publisher The name of the publisher as a string.
+     */
     public void setPublisher (String publisher) {
-	this.publisher = publisher;
+        this.publisher = publisher;
     };
 
+
+    /**
+     * Get the name of the editor as a string. 
+     *
+     * @return The name of the editor as a string.
+     */
     public String getEditor () {
-	return this.editor;
+        return this.editor;
     };
 
+
+    /**
+     * Set the name of the editor as a string. 
+     *
+     * @param editor The name of the editor as a string.
+     */
     public void setEditor (String editor) {
-	this.editor = editor;
+        this.editor = editor;
     };
 
+
+    /**
+     * Get the type of the text as a string. 
+     *
+     * @return The type of the text as a string.
+     */
     public String getTextType () {
-	return this.textType;
+        return this.textType;
     };
 
+
+    /**
+     * Set the type of the text as a string. 
+     *
+     * @param textType The type of the text as a string.
+     */
     public void setTextType (String textType) {
-	this.textType = textType;
+        this.textType = textType;
     };
 
+
+    /**
+     * Get the type art of the text as a string. 
+     *
+     * @return The type art of the text as a string.
+     */
     public String getTextTypeArt () {
-	return this.textTypeArt;
+        return this.textTypeArt;
     };
 
+
+    /**
+     * Set the type art of the text as a string. 
+     *
+     * @param textTypeArt The type art of the text as a string.
+     */
     public void setTextTypeArt (String textTypeArt) {
-	this.textTypeArt = textTypeArt;
+        this.textTypeArt = textTypeArt;
     };
 
-    public String getTextTypeRef () {
-	return this.textTypeRef;
-    };
 
+    /**
+     * Set the type reference of the text as a string. 
+     *
+     * @param textTypeRef The type reference of the text as a string.
+     */
     public void setTextTypeRef (String textTypeRef) {
-	this.textTypeRef = textTypeRef;
+        this.textTypeRef = textTypeRef;
     };
 
+
+    /**
+     * Get the type reference of the text as a string. 
+     *
+     * @return The type reference of the text as a string.
+     */
+    public String getTextTypeRef () {
+        return this.textTypeRef;
+    };
+
+
+    /**
+     * Get the column of the text as a string. 
+     *
+     * @return The column of the text as a string.
+     */
     public String getTextColumn () {
-	return this.textColumn;
+        return this.textColumn;
     };
 
+
+    /**
+     * Set the column of the text as a string. 
+     *
+     * @param textColumn The column of the text as a string.
+     */
     public void setTextColumn (String textColumn) {
-	this.textColumn = textColumn;
+        this.textColumn = textColumn;
     };
 
+
+    /**
+     * Get the domain of the text as a string. 
+     *
+     * @return The domain of the text as a string.
+     */
     public String getTextDomain () {
-	return this.textDomain;
+        return this.textDomain;
     };
 
+
+    /**
+     * Set the domain of the text as a string. 
+     *
+     * @param textDomain The domain of the text as a string.
+     */
     public void setTextDomain (String textDomain) {
-	this.textDomain = textDomain;
+        this.textDomain = textDomain;
     };
 
+
+    /**
+     * Get the license of the text as a string. 
+     *
+     * @return The license of the text as a string.
+     */
     public String getLicense () {
-	return this.license;
+        return this.license;
     };
 
+
+    /**
+     * Set the license of the text as a string. 
+     *
+     * @param license The license of the text as a string.
+     */
     public void setLicense (String license) {
-	this.license = license;
+        this.license = license;
     };
 
+
+    /**
+     * Get the page numbers of the text as a string. 
+     *
+     * @return The page numbers of the text as a string.
+     */
     public String getPages () {
-	return this.pages;
+        return this.pages;
     };
 
+
+    /**
+     * Set the page numbers of the text as a string. 
+     *
+     * @param pages The page numbers of the text as a string.
+     */
     public void setPages (String pages) {
-	this.pages = pages;
+        this.pages = pages;
     };
 
+
+    /**
+     * Get the file edition statement of the text as a string. 
+     *
+     * @return The file edition statement of the text as a string.
+     */
     public String getFileEditionStatement () {
-	return this.fileEditionStatement;
+        return this.fileEditionStatement;
     };
 
+
+    /**
+     * Set the file edition statement of the text as a string. 
+     *
+     * @param fileEditionStatement The file edition statement
+     *        of the text as a string.
+     */
     public void setFileEditionStatement (String fileEditionStatement) {
-	this.fileEditionStatement = fileEditionStatement;
+        this.fileEditionStatement = fileEditionStatement;
     };
 
+
+    /**
+     * Get the bibliograhic edition statement of the text as a string. 
+     *
+     * @return The bibliograhic edition statement of the text as a string.
+     */
     public String getBiblEditionStatement () {
-	return this.biblEditionStatement;
+        return this.biblEditionStatement;
     };
 
+
+    /**
+     * Set the bibliograhic edition statement of the text as a string. 
+     *
+     * @param biblEditionStatement The bibliograhic edition statement
+     *        of the text as a string.
+     */
     public void setBiblEditionStatement (String biblEditionStatement) {
-	this.biblEditionStatement = biblEditionStatement;
+        this.biblEditionStatement = biblEditionStatement;
     };
 
+
+    /**
+     * Get the reference of the text as a string. 
+     *
+     * @return The reference of the text as a string.
+     */
     public String getReference () {
-	return this.reference;
+        return this.reference;
     };
 
+
+    /**
+     * Set the reference of the text as a string. 
+     *
+     * @param reference The reference of the text as a string.
+     */
     public void setReference (String reference) {
-	this.reference = reference;
+        this.reference = reference;
     };
 
+
+    /**
+     * Get the language of the text as a string. 
+     *
+     * @return The language of the text as a string.
+     */
     public String getLanguage () {
-	return this.language;
+        return this.language;
     };
 
+
+    /**
+     * Set the language of the text as a string. 
+     *
+     * @param language The language of the text as a string.
+     */
     public void setLanguage (String language) {
-	this.language = language;
+        this.language = language;
     };
 
+
+    /**
+     * Get the corpus title of the text as a string. 
+     *
+     * @return The corpus title of the text as a string.
+     */
     public String getCorpusTitle () {
-	return this.corpusTitle;
+        return this.corpusTitle;
     };
 
+
+    /**
+     * Set the corpus title of the text as a string. 
+     *
+     * @param corpusTitle The corpus title of the text as a string.
+     */
     public void setCorpusTitle (String corpusTitle) {
-	this.corpusTitle = corpusTitle;
+        this.corpusTitle = corpusTitle;
     };
 
+
+    /**
+     * Get the corpus subtitle of the text as a string. 
+     *
+     * @return The corpus subtitle of the text as a string.
+     */
     public String getCorpusSubTitle () {
-	return this.corpusSubTitle;
+        return this.corpusSubTitle;
     };
 
+
+    /**
+     * Set the corpus subtitle of the text as a string. 
+     *
+     * @param corpusSubTitle The corpus subtitle of the
+     *        text as a string.
+     */
     public void setCorpusSubTitle (String corpusSubTitle) {
-	this.corpusSubTitle = corpusSubTitle;
+        this.corpusSubTitle = corpusSubTitle;
     };
 
+
+    /**
+     * Get the corpus author of the text as a string. 
+     *
+     * @return The corpus author of the text as a string.
+     */
     public String getCorpusAuthor () {
-	return this.corpusAuthor;
+        return this.corpusAuthor;
     };
 
+
+    /**
+     * Set the corpus author of the text as a string. 
+     *
+     * @return The corpus author of the text as a string.
+     */
     public void setCorpusAuthor (String corpusAuthor) {
-	this.corpusAuthor = corpusAuthor;
+        this.corpusAuthor = corpusAuthor;
     };
 
+
+    /**
+     * Get the corpus editor of the text as a string. 
+     *
+     * @return The corpus editor of the text as a string.
+     */
     public String getCorpusEditor () {
-	return this.corpusEditor;
+        return this.corpusEditor;
     };
 
+
+    /**
+     * Set the corpus editor of the text as a string. 
+     *
+     * @param corpusEditor The corpus editor of the text as a string.
+     */
     public void setCorpusEditor (String corpusEditor) {
-	this.corpusEditor = corpusEditor;
+        this.corpusEditor = corpusEditor;
     };
 
+
+    /**
+     * Get the document title of the text as a string. 
+     *
+     * @return The document title of the text as a string.
+     */
     public String getDocTitle () {
-	return this.docTitle;
+        return this.docTitle;
     };
 
+    /**
+     * Set the document title of the text as a string. 
+     *
+     * @param docTitle The document title of the text as a string.
+     */
     public void setDocTitle (String docTitle) {
-	this.docTitle = docTitle;
+        this.docTitle = docTitle;
     };
 
+
+    /**
+     * Get the subtitle of the document of the text as a string. 
+     *
+     * @return The subtitle of the document of the text as a string.
+     */
     public String getDocSubTitle () {
-	return this.docSubTitle;
+        return this.docSubTitle;
     };
 
+
+    /**
+     * Set the subtitle of the document of the text as a string. 
+     *
+     * @param docSubTitle The subtitle of the document of the
+     *        text as a string.
+     */
     public void setDocSubTitle (String docSubTitle) {
-	this.docSubTitle = docSubTitle;
+        this.docSubTitle = docSubTitle;
     };
 
+
+    /**
+     * Get the author of the document of the text as a string. 
+     *
+     * @return The author of the document of the text as a string.
+     */
     public String getDocAuthor () {
-	return this.docAuthor;
+        return this.docAuthor;
     };
 
+
+    /**
+     * Set the author of the document of the text as a string. 
+     *
+     * @param docAuthor The author of the document of the text as a string.
+     */
     public void setDocAuthor (String docAuthor) {
-	this.docAuthor = docAuthor;
+        this.docAuthor = docAuthor;
     };
 
+
+    /**
+     * Get the editor of the document of the text as a string. 
+     *
+     * @return The editor of the document of the text as a string.
+     */
     public String getDocEditor () {
-	return this.docEditor;
+        return this.docEditor;
     };
 
+
+    /**
+     * Set the editor of the document of the text as a string. 
+     *
+     * @param docEditor The editor of the document of the text as a string.
+     */
     public void setDocEditor (String docEditor) {
-	this.docEditor = docEditor;
+        this.docEditor = docEditor;
     };
 
+
+    /**
+     * Get the keywords of the text as a string. 
+     *
+     * @return The keywords of the text as a string.
+     */
     public String getKeywords () {
-	return this.keywords;
+        return this.keywords;
     };
 
+
+    /**
+     * Set the keywords of the text as a string. 
+     *
+     * @param keywords The keywords of the text as a string.
+     */
     public void setKeywords (String keywords) {
-	this.keywords = keywords;
+        this.keywords = keywords;
     };
 
+
+    /**
+     * Get information about the source of tokenization
+     * as a string. 
+     *
+     * @return The tokenization information as a string.
+     */
     public String getTokenSource () {
-	return this.tokenSource;
+        return this.tokenSource;
     };
 
+
+    /**
+     * Set information about the source of tokenization
+     * as a string. 
+     *
+     * @param tokenSource The tokenization information as a string.
+     */
     public void setTokenSource (String tokenSource) {
-	this.tokenSource = tokenSource;
+        this.tokenSource = tokenSource;
+    };
+
+
+    @Deprecated
+    public void setTokenization (String tokenization) {
+        this.tokenization = tokenization;
+    };
+
+
+    @Deprecated
+    public String getTokenization () {
+        return this.tokenization;
+    };
+
+
+    @Deprecated
+    public void setLayerInfo (String layerInfo) {
+        this.layerInfo = layerInfo;
+    };
+
+
+    @Deprecated
+    public String getLayerInfo () {
+        return this.layerInfo;
+    };
+
+
+    @Deprecated
+    public void setField (String field) {
+        this.field = field;
+    };
+
+
+    @Deprecated
+    public String getField () {
+        return this.field;
+    };
+
+
+    @Deprecated
+    @JsonProperty("corpusID")
+    public String getCorpusID () {
+        return this.corpusID;
+    };
+
+
+    @Deprecated
+    public void setCorpusID (String corpusID) {
+        this.corpusID = corpusID;
+    };
+
+
+    @Deprecated
+    @JsonProperty("ID")
+    public String getID () {
+        return this.ID;
+    };
+
+
+    @Deprecated
+    public void setID (String ID) {
+        this.ID = ID;
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/KorapFilter.java b/src/main/java/de/ids_mannheim/korap/KorapFilter.java
index 32573f9..539c061 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapFilter.java
@@ -36,115 +36,117 @@
     public static final boolean DEBUG = false;
     
     public KorapFilter () {
-	filter = new BooleanFilter();
+        filter = new BooleanFilter();
     };
 
     public KorapFilter (JsonNode json) throws QueryException {
-	filter = this.fromJSON(json, "tokens");
+        filter = this.fromJSON(json, "tokens");
     };
 
     protected BooleanFilter fromJSON (JsonNode json, String field) throws QueryException {
-	BooleanFilter bfilter = new BooleanFilter();
+        BooleanFilter bfilter = new BooleanFilter();
 
-	// TODO: THIS UNFORTUNATELY BREAKS TESTS
-	if (!json.has("@type"))
-	    throw new QueryException(701, "JSON-LD group has no @type attribute");
+        // TODO: THIS UNFORTUNATELY BREAKS TESTS
+        if (!json.has("@type"))
+            throw new QueryException(701, "JSON-LD group has no @type attribute");
 
-	String type = json.get("@type").asText();
+        String type = json.get("@type").asText();
+        
+        // Single filter
+        if (type.equals("korap:doc")) {
 
-	// Single filter
-	if (type.equals("korap:doc")) {
+            String key     = "tokens";
+            String valtype = "type:string";
+            String match   = "match:eq";
 
-	    String key     = "tokens";
-	    String valtype = "type:string";
-	    String match   = "match:eq";
+            if (json.has("key"))
+                key = json.get("key").asText();
+            
+            if (json.has("type"))
+                valtype = json.get("type").asText();
 
-	    if (json.has("key"))
-		key = json.get("key").asText();
+            // Filter based on date
+            if (valtype.equals("type:date")) {
 
-	    if (json.has("type"))
-		valtype = json.get("type").asText();
+                if (!json.has("value"))
+                    throw new QueryException(612, "Dates require value fields");
+//-
+                String dateStr = json.get("value").asText();
+                if (json.has("match"))
+                    match = json.get("match").asText();
 
-	    // Filter based on date
-	    if (valtype.equals("type:date")) {
+                // TODO: This isn't stable yet
+                switch (match) {
+                case "match:eq":
+                    bfilter.date(dateStr);
+                    break;
+                case "match:geq":
+                    bfilter.since(dateStr);
+                    break;
+                case "match:leq":
+                    bfilter.till(dateStr);
+                    break;
+                };
+                /*
+                  No good reason for gt or lt
+                */
+                return bfilter;
+            }
+            else if (valtype.equals("type:string")) {
+                if (json.has("match"))
+                    match = json.get("match").asText();
 
-		if (!json.has("value"))
-		    throw new QueryException(612, "Dates require value fields");
+                if (match.equals("match:eq")) {
+                    bfilter.and(key, json.get("value").asText());
+                };
+                return bfilter;
+            };
+        }
 
-		String dateStr = json.get("value").asText();
-		if (json.has("match"))
-		    match = json.get("match").asText();
+        // nested group
+        else if (type.equals("korap:docGroup")) {
+            if (!json.has("operands") || !json.get("operands").isArray())
+//-
+                throw new QueryException(612, "Groups need operands");
 
-		// TODO: This isn't stable yet
-		switch (match) {
-		case "match:eq":
-		    bfilter.date(dateStr);
-		    break;
-		case "match:geq":
-		    bfilter.since(dateStr);
-		    break;
-		case "match:leq":
-		    bfilter.till(dateStr);
-		    break;
-		};
-		/*
-		  No good reason for gt or lt
-		*/
-		return bfilter;
-	    }
-	    else if (valtype.equals("type:string")) {
-		if (json.has("match"))
-		    match = json.get("match").asText();
+            String operation = "operation:and";
+            if (json.has("operation"))
+                operation = json.get("operation").asText();
 
-		if (match.equals("match:eq")) {
-		    bfilter.and(key, json.get("value").asText());
-		};
-		return bfilter;
-	    };
-	}
+            BooleanFilter group = new BooleanFilter();
 
-	// nested group
-	else if (type.equals("korap:docGroup")) {
-	    if (!json.has("operands") || !json.get("operands").isArray())
-		throw new QueryException(612, "Groups need operands");
+            for (JsonNode operand : json.get("operands")) {
+                if (operation.equals("operation:and")) {
+                    group.and(this.fromJSON(operand, field));
+                }
+                else if (operation.equals("operation:or")) {
+                    group.or(this.fromJSON(operand, field));
+                }
+                else {
+                    throw new QueryException(613, "Unknown document group operation");
+                };
+            };
+            bfilter.and(group);
+            return bfilter;
+        }
 
-	    String operation = "operation:and";
-	    if (json.has("operation"))
-		operation = json.get("operation").asText();
+        // Unknown type
+        else {
+// -
+            throw new QueryException(613, "Collection query type has to be doc or docGroup");
+        };
 
-	    BooleanFilter group = new BooleanFilter();
-
-	    for (JsonNode operand : json.get("operands")) {
-		if (operation.equals("operation:and")) {
-		    group.and(this.fromJSON(operand, field));
-		}
-		else if (operation.equals("operation:or")) {
-		    group.or(this.fromJSON(operand, field));
-		}
-		else {
-		    throw new QueryException(613, "Unknown document group operation");
-		};
-	    };
-	    bfilter.and(group);
-	    return bfilter;
-	}
-
-	// UNknown type
-	else {
-	    throw new QueryException(613, "Collection query type has to be doc or docGroup");
-	};
-
-	return new BooleanFilter();
+        return new BooleanFilter();
     };
 
 	/*
-	String type = json.get("@type").asText();
-	String field = _getField(json);
+      String type = json.get("@type").asText();
+      String field = _getField(json);
 
-	if (type.equals("korap:term")) {
-	    this.fromJSON(json, field);
-	}
-	else if (type.equals("korap:group")) {
+      if (type.equals("korap:term")) {
+      this.fromJSON(json, field);
+      }
+      else if (type.equals("korap:group")) {
 	    // TODO: relation
 	    for (JsonNode operand : json.get("operands")) {
 		this.fromJSON(operand, field);
@@ -153,198 +155,206 @@
 	*/
     //    };
     
-    protected BooleanFilter fromJSONLegacy (JsonNode json, String field) throws QueryException {
-	BooleanFilter bfilter = new BooleanFilter();
+    protected BooleanFilter fromJSONLegacy (JsonNode json, String field)
+        throws QueryException {
+        BooleanFilter bfilter = new BooleanFilter();
 
-	if (!json.has("@type"))
-	    throw new QueryException(612, "JSON-LD group has no @type attribute");
+//-
+        if (!json.has("@type"))
+            throw new QueryException(612, "JSON-LD group has no @type attribute");
 	
-	String type = json.get("@type").asText();
+        String type = json.get("@type").asText();
 
-	if (DEBUG)
-	    log.trace("@type: " + type);
+        if (DEBUG)
+            log.trace("@type: " + type);
 
-	if (json.has("@field"))
-	    field = _getFieldLegacy(json);
+        if (json.has("@field"))
+            field = _getFieldLegacy(json);
 
-	if (type.equals("korap:term")) {
-	    if (field != null && json.has("@value"))
-		bfilter.and(field, json.get("@value").asText());
-	    return bfilter;
-	}
-	else if (type.equals("korap:group")) {
-	    if (!json.has("relation"))
-		throw new QueryException(612, "Group needs relation");
+        if (type.equals("korap:term")) {
+            if (field != null && json.has("@value"))
+                bfilter.and(field, json.get("@value").asText());
+            return bfilter;
+        }
+        else if (type.equals("korap:group")) {
+//-
+            if (!json.has("relation"))
+                throw new QueryException(612, "Group needs relation");
 
-	    if (!json.has("operands"))
-		throw new QueryException(612, "Group needs operand list");
+            if (!json.has("operands"))
+//-
+                throw new QueryException(612, "Group needs operand list");
 
 		//return bfilter;
 
-	    String dateStr, till;
-	    JsonNode operands = json.get("operands");
+            String dateStr, till;
+            JsonNode operands = json.get("operands");
 
-	    if (!operands.isArray())
-		throw new QueryException(612, "Group needs operand list");
+            if (!operands.isArray())
+//-
+                throw new QueryException(612, "Group needs operand list");
 
-	    if (DEBUG)
-		log.trace("relation found {}",  json.get("relation").asText());
+            if (DEBUG)
+                log.trace("relation found {}",  json.get("relation").asText());
 
-	    BooleanFilter group = new BooleanFilter();
+            BooleanFilter group = new BooleanFilter();
 	    
-	    switch (json.get("relation").asText())  {
-	    case "between":
-		dateStr = _getDateLegacy(json, 0);
-		till = _getDateLegacy(json, 1);
-		if (dateStr != null && till != null)
-		    bfilter.between(dateStr, till);
-		break;
+            switch (json.get("relation").asText())  {
+            case "between":
+                dateStr = _getDateLegacy(json, 0);
+                till = _getDateLegacy(json, 1);
+                if (dateStr != null && till != null)
+                    bfilter.between(dateStr, till);
+                break;
 
-	    case "until":
-		dateStr = _getDateLegacy(json, 0);
-		if (dateStr != null)
-		    bfilter.till(dateStr);
-		break;
+            case "until":
+                dateStr = _getDateLegacy(json, 0);
+                if (dateStr != null)
+                    bfilter.till(dateStr);
+                break;
 
-	    case "since":
-		dateStr = _getDateLegacy(json, 0);
-		if (dateStr != null)
-		    bfilter.since(dateStr);
-		break;
+            case "since":
+                dateStr = _getDateLegacy(json, 0);
+                if (dateStr != null)
+                    bfilter.since(dateStr);
+                break;
 
-	    case "equals":
-		dateStr = _getDateLegacy(json, 0);
-		if (dateStr != null)
-		    bfilter.date(dateStr);
-		break;
+            case "equals":
+                dateStr = _getDateLegacy(json, 0);
+                if (dateStr != null)
+                    bfilter.date(dateStr);
+                break;
 
-	    case "and":
-		if (operands.size() < 1)
-		    throw new QueryException(612, "Operation needs at least two operands");
+            case "and":
+//-
+                if (operands.size() < 1)
+                    throw new QueryException(612, "Operation needs at least two operands");
 
-		for (JsonNode operand : operands) {
-		    group.and(this.fromJSONLegacy(operand, field));
-		};
-		bfilter.and(group);
-		break;
+                for (JsonNode operand : operands) {
+                    group.and(this.fromJSONLegacy(operand, field));
+                };
+                bfilter.and(group);
+                break;
 
-	    case "or":
-		if (operands.size() < 1)
-		    throw new QueryException(612, "Operation needs at least two operands");
+            case "or":
+//-
+                if (operands.size() < 1)
+                    throw new QueryException(612, "Operation needs at least two operands");
 
-		for (JsonNode operand : operands) {
-		    group.or(this.fromJSONLegacy(operand, field));
-		};
-		bfilter.and(group);
-		break;
+                for (JsonNode operand : operands) {
+                    group.or(this.fromJSONLegacy(operand, field));
+                };
+                bfilter.and(group);
+                break;
 
-	    default:
-		throw new QueryException(613, "Relation is not supported");
-	    };
-	}
-	else {
-	    throw new QueryException(613, "Filter type is not a supported group");
-	};
-	return bfilter;
+//-
+            default:
+                throw new QueryException(613, "Relation is not supported");
+            };
+        }
+        else {
+            throw new QueryException(613, "Filter type is not a supported group");
+        };
+        return bfilter;
     };
 
     private static String  _getFieldLegacy (JsonNode json)  {
-	if (!json.has("@field"))
-	    return (String) null;
+        if (!json.has("@field"))
+            return (String) null;
 
-	String field = json.get("@field").asText();
-	return field.replaceFirst("korap:field#", "");
+        String field = json.get("@field").asText();
+        return field.replaceFirst("korap:field#", "");
     };
 
     private static String _getDateLegacy (JsonNode json, int index) {
-	if (!json.has("operands"))
-	    return (String) null;
+        if (!json.has("operands"))
+            return (String) null;
 
-	if (!json.get("operands").has(index))
-	    return (String) null;
+        if (!json.get("operands").has(index))
+            return (String) null;
 
-	JsonNode date = json.get("operands").get(index);
+        JsonNode date = json.get("operands").get(index);
 
-	if (!date.has("@type"))
-	    return (String) null;
+        if (!date.has("@type"))
+            return (String) null;
 
-	if (!date.get("@type").asText().equals("korap:date"))
-	    return (String) null;
+        if (!date.get("@type").asText().equals("korap:date"))
+            return (String) null;
+        
+        if (!date.has("@value"))
+            return (String) null;
 
-	if (!date.has("@value"))
-	    return (String) null;
-
-	return date.get("@value").asText();
+        return date.get("@value").asText();
     };
 
     
     public BooleanFilter and (String type, String ... terms) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.and(type, terms);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.and(type, terms);
+        return bf;
     };
 
     public BooleanFilter or (String type, String ... terms) {
-	if (DEBUG)
-	    log.debug("Got some terms here");
-	BooleanFilter bf = new BooleanFilter();
-	bf.or(type, terms);
-	return bf;
+        if (DEBUG)
+            log.debug("Got some terms here");
+        BooleanFilter bf = new BooleanFilter();
+        bf.or(type, terms);
+        return bf;
     };
 
     public BooleanFilter and (String type, RegexFilter re) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.and(type, re);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.and(type, re);
+        return bf;
     };
 
     public BooleanFilter or (String type, RegexFilter re) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.or(type, re);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.or(type, re);
+        return bf;
     };
 
     public BooleanFilter since (String date) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.since(date);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.since(date);
+        return bf;
     };
 
     public BooleanFilter till (String date) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.till(date);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.till(date);
+        return bf;
     };
 
     public BooleanFilter date (String date) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.date(date);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.date(date);
+        return bf;
     };
 
     public BooleanFilter between (String date1, String date2) {
-	BooleanFilter bf = new BooleanFilter();
-	bf.between(date1, date2);
-	return bf;
+        BooleanFilter bf = new BooleanFilter();
+        bf.between(date1, date2);
+        return bf;
     };
 
     public RegexFilter re (String regex) {
-	return new RegexFilter(regex);
+        return new RegexFilter(regex);
     };
 
     public BooleanFilter getBooleanFilter()  {
-	return this.filter;
+        return this.filter;
     };
 
     public void setBooleanFilter (BooleanFilter bf) {
-	this.filter = bf;
+        this.filter = bf;
     };
 
     public Query toQuery () {
-	return this.filter.toQuery();
+        return this.filter.toQuery();
     };
 
     public String toString () {
-	return this.filter.toQuery().toString();
+        return this.filter.toQuery().toString();
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
index 28df548..78309e2 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
@@ -41,7 +41,7 @@
  * 
  * </ul>
  * 
- * @author Nils Diewald
+ * @author diewald
  * @author margaretha
  */
 public class SpanElementQuery extends SpanWithIdQuery {
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
index d77a4bb..dbef6db 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
@@ -1,11 +1,5 @@
 package de.ids_mannheim.korap.query;
 
-// Based on SpanNearQuery
-
-/*
- * Todo: Make one Spanarray and switch between the results of A and B.
- */
-
 import java.io.IOException;
 import java.util.Map;
 
@@ -22,6 +16,11 @@
 
 import de.ids_mannheim.korap.query.spans.NextSpans;
 
+/*
+ * Based on SpanNearQuery
+ * Todo: Make one Spanarray and switch between the results of A and B.
+ */
+
 /**
  * SpanNextQuery matches two spans which are directly next to each other. It is
  * identical to a phrase query with exactly two clauses.
@@ -37,7 +36,8 @@
  *      new SpanTermQuery(new Term(&quot;tokens&quot;, &quot;s:off&quot;)));
  * </pre>
  * 
- * @author diewald, margaretha
+ * @author diewald
+ * @author margaretha
  * 
  */
 public class SpanNextQuery extends SimpleSpanQuery implements Cloneable {
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
index f01bd1f..a4d7159 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
@@ -22,7 +22,7 @@
  * paragraphs.
  * 
  * @author margaretha
- * @author Nils Diewald
+ * @author diewald
  */
 public class ElementSpans extends SpansWithId {
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
index 2d79132..44045ef 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
@@ -22,7 +22,7 @@
  * The implementation allows multiple matches at the same firstspan position.
  * 
  * @author margaretha, diewald
- * */
+ */
 public class NextSpans extends SimpleSpans {
 
     private List<CandidateSpan> matchList;
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
index 609dcdc..3d88522 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
@@ -25,7 +25,7 @@
 /**
  * Compare two spans and check how they relate positionally.
  *
- * @author Nils Diewald
+ * @author diewald
  */
 public class WithinSpans extends Spans {
 
diff --git a/src/main/java/de/ids_mannheim/korap/response/KorapResponse.java b/src/main/java/de/ids_mannheim/korap/response/KorapResponse.java
index c826f71..d8bfe38 100644
--- a/src/main/java/de/ids_mannheim/korap/response/KorapResponse.java
+++ b/src/main/java/de/ids_mannheim/korap/response/KorapResponse.java
@@ -25,6 +25,7 @@
  *
  * @author Nils Diewald
  * @see de.ids_mannheim.korap.response.Notifications
+ * @see de.ids_mannheim.korap.response.serialize.KorapResponseDeserializer
  */
 @JsonDeserialize(using = KorapResponseDeserializer.class)
 public class KorapResponse extends Notifications {
@@ -34,6 +35,7 @@
     private String benchmark;
     private boolean timeExceeded = false;
 
+
     /**
      * Construct a new KorapResponse object.
      *
@@ -43,6 +45,17 @@
 
 
     /**
+     * Get string representation of the backend's version.
+     *
+     * @return String representation of the backend's version
+     */
+    @JsonIgnore
+    public String getVersion () {
+        return this.version;
+    };
+
+
+    /**
      * Set the string representation of the backend's version.
      *
      * @param version The string representation of the backend's version
@@ -56,13 +69,14 @@
 
 
     /**
-     * Get string representation of the backend's version.
+     * Get string representation of the backend's name.
+     * All nodes in a cluster should have the same backend name.
      *
-     * @return String representation of the backend's version
+     * @return String representation of the backend's name
      */
     @JsonIgnore
-    public String getVersion () {
-        return this.version;
+    public String getName () {
+        return this.name;
     };
 
 
@@ -81,14 +95,14 @@
 
 
     /**
-     * Get string representation of the backend's name.
-     * All nodes in a cluster should have the same backend name.
+     * Get string representation of the node's name.
+     * Each node in a cluster has a unique name.
      *
-     * @return String representation of the backend's name
+     * @return String representation of the node's name
      */
     @JsonIgnore
-    public String getName () {
-        return this.name;
+    public String getNode () {
+        return this.node;
     };
 
 
@@ -107,14 +121,14 @@
 
 
     /**
-     * Get string representation of the node's name.
-     * Each node in a cluster has a unique name.
+     * Check if the response time was exceeded.
      *
-     * @return String representation of the node's name
+     * @return <tt>true</tt> in case the response had a timeout,
+     *         otherwise <tt>false</tt>
      */
     @JsonIgnore
-    public String getNode () {
-        return this.node;
+    public boolean hasTimeExceeded () {
+        return this.timeExceeded;
     };
     
 
@@ -139,16 +153,16 @@
 
 
     /**
-     * Check if the response time was exceeded.
+     * Get the benchmark time as a string.
      *
-     * @return <tt>true</tt> in case the response had a timeout,
-     *         otherwise <tt>false</tt>
+     * @return String representation of the benchmark
+     *         (including trailing time unit)
      */
     @JsonIgnore
-    public boolean hasTimeExceeded () {
-        return this.timeExceeded;
+    public String getBenchmark () {
+        return this.benchmark;
     };
-
+    
 
     /**
      * Set the benchmark as timestamp differences.
@@ -181,19 +195,18 @@
         this.benchmark = bm;
         return this;
     };
-
+    
 
     /**
-     * Get the benchmark time as a string.
+     * Get the listener URI as a string.
      *
-     * @return String representation of the benchmark
-     *         (including trailing time unit)
+     * @return The listener URI as a string representation
      */
     @JsonIgnore
-    public String getBenchmark () {
-        return this.benchmark;
+    public String getListener () {
+        return this.listener;
     };
-    
+
 
     /**
      * Set the listener URI as a String. This is probably the localhost
@@ -212,17 +225,6 @@
         this.listener = listener;
         return this;
     };
-    
-
-    /**
-     * Get the listener URI as a string.
-     *
-     * @return The listener URI as a string representation
-     */
-    @JsonIgnore
-    public String getListener () {
-        return this.listener;
-    };
 
 
     /**
@@ -266,6 +268,7 @@
         return (JsonNode) json;
     };
 
+
     /**
      * Serialize response as a JSON string.
      * <p>
diff --git a/src/main/java/de/ids_mannheim/korap/response/Message.java b/src/main/java/de/ids_mannheim/korap/response/Message.java
index 9a0c91b..c121c9d 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Message.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Message.java
@@ -29,6 +29,7 @@
     private int code = 0;
     private LinkedList<String> parameters;
 
+
     /**
      * Construct a new message object.
      *
@@ -37,8 +38,8 @@
      * @return The new message object
      */
     public Message (int code, String msg) {
-	this.code = code;
-	this.msg  = msg;
+        this.code = code;
+        this.msg  = msg;
     };
 
     /**
@@ -48,17 +49,6 @@
      */
     public Message () {};
 
-    /**
-     * Set the string representation of the message.
-     *
-     * @param msg String representation of the message
-     * @return Message object for chaining
-     */
-    @JsonIgnore
-    public Message setMessage (String msg) {
-	this.msg = msg;
-	return this;
-    };
 
     /**
      * Return the string representation of the message.
@@ -67,9 +57,35 @@
      */
     @JsonIgnore
     public String getMessage () {
-	return this.msg;
+        return this.msg;
     };
 
+
+    /**
+     * Set the string representation of the message.
+     *
+     * @param msg String representation of the message
+     * @return Message object for chaining
+     */
+    @JsonIgnore
+    public Message setMessage (String msg) {
+        this.msg = msg;
+        return this;
+    };
+
+
+    /**
+     * Return the integer code representation of the message.
+     *
+     * @return Integer code representation of the message
+     */
+    @JsonIgnore
+    public int getCode () {
+        return this.code;
+    };
+
+
+
     /**
      * Set the integer representation of the message.
      *
@@ -78,18 +94,8 @@
      */
     @JsonIgnore
     public Message setCode (int code) {
-	this.code = code;
-	return this;
-    };
-
-    /**
-     * Return the integer code representation of the message.
-     *
-     * @return Integer code representation of the message
-     */
-    @JsonIgnore
-    public int getCode () {
-	return this.code;
+        this.code = code;
+        return this;
     };
 
 
@@ -99,12 +105,13 @@
      * @return Message object for chaining
      */
     public Message addParameter (String param) {
-	if (this.parameters == null)
-	    this.parameters = new LinkedList<String>();
-	this.parameters.add(param);
-	return this;
+        if (this.parameters == null)
+            this.parameters = new LinkedList<String>();
+        this.parameters.add(param);
+        return this;
     };
 
+
     /**
      * Create a clone of the Message.
      *
@@ -112,23 +119,23 @@
      * @throws CloneNotSupportedException if message can't be cloned
      */
     public Object clone () throws CloneNotSupportedException {
-	Message clone = new Message();
+        Message clone = new Message();
 
-	// Copy message string
-	if (this.msg != null)
-	    clone.msg = this.msg;
+        // Copy message string
+        if (this.msg != null)
+            clone.msg = this.msg;
 
-	// Copy message code
-	clone.code = this.code;
+        // Copy message code
+        clone.code = this.code;
+        
+        // Copy parameters
+        if (this.parameters != null) {
+            for (String p : this.parameters) {
+                clone.addParameter(p);
+            };
+        };
 
-	// Copy parameters
-	if (this.parameters != null) {
-	    for (String p : this.parameters) {
-		clone.addParameter(p);
-	    };
-	};
-
-	return clone;
+        return clone;
     };
 
     /**
@@ -137,16 +144,16 @@
      * @return JsonNode representation of the message
      */
     public JsonNode toJsonNode () {
-	ArrayNode message = mapper.createArrayNode();
+        ArrayNode message = mapper.createArrayNode();
 
-	if (this.code != 0)
-	    message.add(this.getCode());
-
-	message.add(this.getMessage());
-	if (parameters != null)
-	    for (String p : parameters)
-		message.add(p);
-	return (JsonNode) message;
+        if (this.code != 0)
+            message.add(this.getCode());
+        
+        message.add(this.getMessage());
+        if (parameters != null)
+            for (String p : parameters)
+                message.add(p);
+        return (JsonNode) message;
     };
 
 
@@ -160,16 +167,16 @@
      * @return String representation of the message
      */
     public String toJsonString () {
-	String msg = "";
-	try {
-	    return mapper.writeValueAsString(this.toJsonNode());
-	}
-	catch (Exception e) {
-	    // Bad in case the message contains quotes!
-	    msg = ", \"" + e.getLocalizedMessage() + "\"";
-	};
-	return
-	    "[620, " +
-	    "\"Unable to generate JSON\"" + msg + "]";
+        String msg = "";
+        try {
+            return mapper.writeValueAsString(this.toJsonNode());
+        }
+        catch (Exception e) {
+            // Bad in case the message contains quotes!
+            msg = ", \"" + e.getLocalizedMessage() + "\"";
+        };
+        return
+            "[620, " +
+            "\"Unable to generate JSON\"" + msg + "]";
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/response/Messages.java b/src/main/java/de/ids_mannheim/korap/response/Messages.java
index c78e6aa..cc7b723 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Messages.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Messages.java
@@ -34,36 +34,38 @@
 
     // Private class for iterator implementation
     private class MessageIterator implements Iterator<Message> {
-	int index;
+        int index;
 
-	// Constructor
+        // Constructor
         public MessageIterator () {
             this.index = 0;
         };
 
         @Override
-	public boolean hasNext () {
+        public boolean hasNext () {
             return this.index < messages.size();
         };
 
         @Override
-	public Message next () {
+        public Message next () {
             return messages.get(this.index++);
         };
 
         @Override
         public void remove () {
-	    messages.remove(this.index);
+            messages.remove(this.index);
         };
     };
 
+
     /**
      * Construct a new Messages object.
      */
     public Messages () {
-	this.messages = new ArrayList<Message>(3);
+        this.messages = new ArrayList<Message>(3);
     };
 
+
     /**
      * Get the iterator object.
      *
@@ -73,6 +75,7 @@
         return new MessageIterator();
     };
 
+
     /**
      * Append a new message.
      *
@@ -82,16 +85,17 @@
      * @return New Message object
      */
     public Message add (int code,
-			String message,
-			String ... terms) {
-	Message newMsg = new Message(code, message);
-	messages.add(newMsg);
-	if (terms != null)
-	    for (String t : terms)
-		newMsg.addParameter(t);
-	return newMsg;
+                        String message,
+                        String ... terms) {
+        Message newMsg = new Message(code, message);
+        messages.add(newMsg);
+        if (terms != null)
+            for (String t : terms)
+                newMsg.addParameter(t);
+        return newMsg;
     };
 
+
     /**
      * Append an existing message.
      *
@@ -99,14 +103,14 @@
      * @return Cloned Message object
      */
     public Message add (Message msg) {
-	try {
-	    Message msgClone = (Message) msg.clone();
-	    messages.add(msgClone);
-	    return msgClone;
-	}
-	catch (CloneNotSupportedException e) {
-	};
-	return (Message) null;
+        try {
+            Message msgClone = (Message) msg.clone();
+            messages.add(msgClone);
+            return msgClone;
+        }
+        catch (CloneNotSupportedException e) {
+        };
+        return (Message) null;
     };
 
     /**
@@ -117,34 +121,34 @@
      * @throws QueryException if notification is not well formed (Error 750)
      */
     public Message add (JsonNode msg) throws QueryException {
-	if (!msg.isArray() || !msg.has(0))
-	    throw new QueryException(
-	        750, "Passed notifications are not well formed"
-	    );
+        if (!msg.isArray() || !msg.has(0))
+            throw new QueryException(
+                750, "Passed notifications are not well formed"
+            );
 
-	// Valid message
-	Message newMsg = new Message();
-	short i = 1;
-	if (msg.get(0).isNumber()) {
-	    newMsg.setCode(msg.get(0).asInt());
-	    if (!msg.has(1))
-		throw new QueryException(
-	            750, "Passed notifications are not well formed"
-	        );
-	    newMsg.setMessage(msg.get(1).asText());
-	    i++;
-	}
-	else {
-	    newMsg.setMessage(msg.get(0).asText());
-	};
+        // Valid message
+        Message newMsg = new Message();
+        short i = 1;
+        if (msg.get(0).isNumber()) {
+            newMsg.setCode(msg.get(0).asInt());
+            if (!msg.has(1))
+                throw new QueryException(
+                    750, "Passed notifications are not well formed"
+	            );
+            newMsg.setMessage(msg.get(1).asText());
+            i++;
+        }
+        else {
+            newMsg.setMessage(msg.get(0).asText());
+        };
 
-	// Add parameters
-	while (msg.has(i))
-	    newMsg.addParameter(msg.get(i++).asText());
-
-	// Add messages to list
-	this.add(newMsg);
-	return newMsg;
+        // Add parameters
+        while (msg.has(i))
+            newMsg.addParameter(msg.get(i++).asText());
+        
+        // Add messages to list
+        this.add(newMsg);
+        return newMsg;
     };
 
 
@@ -155,32 +159,34 @@
      * @return Messages object for chaining.
      */
     public Messages add (Messages msgs) {
-	try {
-	    for (Message msg : msgs.getMessages())
-		this.add((Message) msg.clone());
-	}
-	catch (CloneNotSupportedException e) {
-	};
-	return this;
+        try {
+            for (Message msg : msgs.getMessages())
+                this.add((Message) msg.clone());
+        }
+        catch (CloneNotSupportedException e) {
+        };
+        return this;
     };
 
+
     /**
      * Clear all messages.
      *
      * @return Messages object for chaining
      */
     public Messages clear () {
-	this.messages.clear();
-	return this;
+        this.messages.clear();
+        return this;
     };
 
+
     /**
      * Get the number of the messages.
      *
      * @param Integer representing the number of messages in the list.
      */
     public int size () {
-	return this.messages.size();
+        return this.messages.size();
     };
 
 
@@ -192,11 +198,12 @@
      */
     @JsonIgnore
     public Message get (int index) {
-	if (index >= this.size())
-	    return (Message) null;
-	return this.messages.get(index);
+        if (index >= this.size())
+            return (Message) null;
+        return this.messages.get(index);
     };
 
+
     /**
      * Return all messages.
      *
@@ -204,7 +211,7 @@
      */
     @JsonIgnore
     public List<Message> getMessages () {
-	return this.messages;
+        return this.messages;
     };
 
 
@@ -215,24 +222,25 @@
      * @throws CloneNotSupportedException if messages can't be cloned
      */
     public Object clone () throws CloneNotSupportedException {
-	Messages clone = new Messages();
-	for (Message m : this.messages) {
-	    clone.add((Message) m.clone());
-	};
+        Messages clone = new Messages();
+        for (Message m : this.messages) {
+            clone.add((Message) m.clone());
+        };
 
-	return clone;
+        return clone;
     };
 
+
     /**
      * Serialize Messages as a JsonNode.
      *
      * @return JsonNode representation of all messages
      */
     public JsonNode toJsonNode () {
-	ArrayNode messageArray = mapper.createArrayNode();
-	for (Message msg : this.messages)
-	    messageArray.add(msg.toJsonNode());
-	return (JsonNode) messageArray;
+        ArrayNode messageArray = mapper.createArrayNode();
+        for (Message msg : this.messages)
+            messageArray.add(msg.toJsonNode());
+        return (JsonNode) messageArray;
     };
 
 
@@ -249,17 +257,17 @@
      * @return String representation of all messages
      */
     public String toJsonString () {
-	String msg = "";
-	try {
-	    return mapper.writeValueAsString(this.toJsonNode());
-	}
-	catch (Exception e) {
-	    // Bad in case the message contains quotes!
-	    msg = ", \"" + e.getLocalizedMessage() + "\"";
-	};
+        String msg = "";
+        try {
+            return mapper.writeValueAsString(this.toJsonNode());
+        }
+        catch (Exception e) {
+            // Bad in case the message contains quotes!
+            msg = ", \"" + e.getLocalizedMessage() + "\"";
+        };
 
-	return
-	    "[620, " +
-	    "\"Unable to generate JSON\"" + msg + "]";
+        return
+            "[620, " +
+            "\"Unable to generate JSON\"" + msg + "]";
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/response/Notifications.java b/src/main/java/de/ids_mannheim/korap/response/Notifications.java
index 9074828..ad65024 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Notifications.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Notifications.java
@@ -45,9 +45,43 @@
     // Create object mapper for JSON generation
     ObjectMapper mapper = new ObjectMapper();
 
-    private Messages warnings,
-	             errors,
-	             messages;
+    private Messages warnings, errors, messages;
+
+
+    /**
+     * Check for warnings.
+     *
+     * @return <tt>true</tt> in case there are warnings, otherwise <tt>false</tt>
+     */
+    public boolean hasWarnings () {
+        if (this.warnings == null || this.warnings.size() == 0)
+            return false;
+        return true;
+    };
+
+
+    /**
+     * Return all warnings.
+     *
+     * @return The <code>Messages</code> object representing all warnings
+     */
+    public Messages getWarnings () {
+        return this.warnings;
+    };
+
+
+    /**
+     * Return a specific warning based on an index.
+     *
+     * @param index The index of the warning in the list of warnings.
+     * @return The message in case it exists, otherwise <code>null</code>
+     */
+    public Message getWarning (int index) {
+        if (this.warnings != null)
+            return this.warnings.get(index);
+        return (Message) null;
+    };
+
 
     /**
      * Appends a new warning.
@@ -58,12 +92,13 @@
      * @return Notification object for chaining
      */
     public Notifications addWarning (int code, String msg, String ... terms) {
-	if (this.warnings == null)
-	    this.warnings = new Messages();
-	this.warnings.add(code, msg, terms);
-	return this;
+        if (this.warnings == null)
+            this.warnings = new Messages();
+        this.warnings.add(code, msg, terms);
+        return this;
     };
 
+    
     /**
      * Appends a new warning.
      *
@@ -71,19 +106,20 @@
      * @return Notification object for chaining
      */
     public Notifications addWarning (JsonNode node) {
-	if (this.warnings == null)
-	    this.warnings = new Messages();
-
-	try {
-	    this.warnings.add(node);
-	}
-	catch (QueryException qe) {
-	    this.warnings.add(qe.getErrorCode(), qe.getMessage());
-	};
-
-	return this;
+        if (this.warnings == null)
+            this.warnings = new Messages();
+    
+        try {
+            this.warnings.add(node);
+        }
+        catch (QueryException qe) {
+            this.warnings.add(qe.getErrorCode(), qe.getMessage());
+        };
+        
+        return this;
     };
 
+
     /**
      * Appends new warnings.
      *
@@ -91,105 +127,21 @@
      * @return Notification object for chaining
      */
     public Notifications addWarnings (Messages msgs) {
-	if (this.warnings == null)
-	    this.warnings = msgs;
-	else
-	    this.warnings.add(msgs);
-	return this;
+        if (this.warnings == null)
+            this.warnings = msgs;
+        else
+            this.warnings.add(msgs);
+        return this;
     };
 
 
     /**
-     * Return all warnings.
-     *
-     * @return The <code>Messages</code> object representing all warnings
-     */
-    public Messages getWarnings () {
-	return this.warnings;
-    };
-
-    /**
-     * Return a specific warning based on an index.
-     *
-     * @param index The index of the warning in the list of warnings.
-     * @return The message in case it exists, otherwise <code>null</code>
-     */
-    public Message getWarning (int index) {
-	if (this.warnings != null)
-	    return this.warnings.get(index);
-	return (Message) null;
-    };
-
-
-    /**
-     * Check for warnings.
-     *
-     * @return <tt>true</tt> in case there are warnings, otherwise <tt>false</tt>
-     */
-    public boolean hasWarnings () {
-	if (this.warnings == null || this.warnings.size() == 0)
-	    return false;
-	return true;
-    };
-
-    /**
-     * Appends a new error.
-     *
-     * @param code  Integer code representation of the error
-     * @param msg   String representation of the error
-     * @param terms Optional strings of additional information
-     * @return Notification object for chaining
-     */
-    public Notifications addError (int code, String msg, String ... terms) {
-	if (this.errors == null)
-	    this.errors = new Messages();
-	this.errors.add(code, msg, terms);
-	return this;
-    };
-
-    /**
-     * Appends a new error.
-     *
-     * @param node  <code>JsonNode</code> representing an error message
-     * @return Notification object for chaining
-     */
-    public Notifications addError (JsonNode msg) {
-	if (this.errors == null)
-	    this.errors = new Messages();
-	try {
-	    this.errors.add(msg);
-	}
-	catch (QueryException qe) {
-	    this.errors.add(qe.getErrorCode(), qe.getMessage());
-	};
-
-	return this;
-    };
-
-
-    /**
-     * Appends new errors.
-     *
-     * @param msgs  <code>Messages</code> representing multiple errors
-     * @return Notification object for chaining
-     */
-    public Notifications addErrors (Messages msgs) {
-	if (this.errors == null)
-	    this.errors = msgs;
-	else
-	    this.errors.add(msgs);
-	return this;
-    };
-
-
-
-    /**
      * Return all errors.
      *
      * @return The <code>Messages</code> object representing all errors
      */
     public Messages getErrors () {
-	return this.errors;
+        return this.errors;
     };
 
 
@@ -200,9 +152,9 @@
      * @return The message in case it exists, otherwise <code>null</code>
      */
     public Message getError (int index) {
-	if (this.errors != null)
-	    return this.errors.get(index);
-	return (Message) null;
+        if (this.errors != null)
+            return this.errors.get(index);
+        return (Message) null;
     };
 
 
@@ -212,9 +164,94 @@
      * @return <tt>true</tt> in case there are errors, otherwise <tt>false</tt>
      */
     public boolean hasErrors () {
-	if (this.errors == null || this.errors.size() == 0)
-	    return false;
-	return true;
+        if (this.errors == null || this.errors.size() == 0)
+            return false;
+        return true;
+    };
+
+
+    /**
+     * Appends a new error.
+     *
+     * @param code  Integer code representation of the error
+     * @param msg   String representation of the error
+     * @param terms Optional strings of additional information
+     * @return Notification object for chaining
+     */
+    public Notifications addError (int code, String msg, String ... terms) {
+        if (this.errors == null)
+            this.errors = new Messages();
+        this.errors.add(code, msg, terms);
+        return this;
+    };
+
+
+    /**
+     * Appends a new error.
+     *
+     * @param node  <code>JsonNode</code> representing an error message
+     * @return Notification object for chaining
+     */
+    public Notifications addError (JsonNode msg) {
+        if (this.errors == null)
+            this.errors = new Messages();
+        try {
+            this.errors.add(msg);
+        }
+        catch (QueryException qe) {
+            this.errors.add(qe.getErrorCode(), qe.getMessage());
+        };
+        
+        return this;
+    };
+
+
+    /**
+     * Appends new errors.
+     *
+     * @param msgs  <code>Messages</code> representing multiple errors
+     * @return Notification object for chaining
+     */
+    public Notifications addErrors (Messages msgs) {
+        if (this.errors == null)
+            this.errors = msgs;
+        else
+            this.errors.add(msgs);
+        return this;
+    };
+
+
+    /**
+     * Return all messages.
+     *
+     * @return The <code>Messages</code> object representing all messages
+     */
+    public Messages getMessages () {
+        return this.messages;
+    };
+
+    /**
+     * Return a specific message based on an index.
+     *
+     * @param index The index of the message in the list of messages.
+     * @return The message in case it exists, otherwise <code>null</code>
+     */
+    public Message getMessage (int index) {
+        if (this.messages != null)
+            return this.messages.get(index);
+        return (Message) null;
+    };
+
+
+    /**
+     * Check for messages.
+     *
+     * @return <tt>true</tt> in case there are messages, otherwise <tt>false</tt>
+     */
+    public boolean hasMessages () {
+        if (this.messages == null || this.messages.size() == 0)
+            return false;
+        return true;
     };
 
 
@@ -227,12 +264,13 @@
      * @return Notification object for chaining
      */
     public Notifications addMessage (int code, String msg, String ... terms) {
-	if (this.messages == null)
-	    this.messages = new Messages();
-	this.messages.add(code, msg, terms);
-	return this;
+        if (this.messages == null)
+            this.messages = new Messages();
+        this.messages.add(code, msg, terms);
+        return this;
     };
 
+
     /**
      * Appends a new message.
      *
@@ -240,15 +278,15 @@
      * @return Notification object for chaining
      */
     public Notifications addMessage (JsonNode msg) {
-	if (this.messages == null)
-	    this.messages = new Messages();
-	try {
-	    this.messages.add(msg);
-	}
-	catch (QueryException qe) {
-	    this.messages.add(qe.getErrorCode(), qe.getMessage());
-	};
-	return this;
+        if (this.messages == null)
+            this.messages = new Messages();
+        try {
+            this.messages.add(msg);
+        }
+        catch (QueryException qe) {
+            this.messages.add(qe.getErrorCode(), qe.getMessage());
+        };
+        return this;
     };
 
 
@@ -259,45 +297,11 @@
      * @return Notification object for chaining
      */
     public Notifications addMessages (Messages msgs) {
-	if (this.messages == null)
-	    this.messages = msgs;
-	else
-	    this.messages.add(msgs);
-	return this;
-    };
-
-
-    /**
-     * Return all messages.
-     *
-     * @return The <code>Messages</code> object representing all messages
-     */
-    public Messages getMessages () {
-	return this.messages;
-    };
-
-    /**
-     * Return a specific message based on an index.
-     *
-     * @param index The index of the message in the list of messages.
-     * @return The message in case it exists, otherwise <code>null</code>
-     */
-    public Message getMessage (int index) {
-	if (this.messages != null)
-	    return this.messages.get(index);
-	return (Message) null;
-    };
-
-
-    /**
-     * Check for messages.
-     *
-     * @return <tt>true</tt> in case there are messages, otherwise <tt>false</tt>
-     */
-    public boolean hasMessages () {
-	if (this.messages == null || this.messages.size() == 0)
-	    return false;
-	return true;
+        if (this.messages == null)
+            this.messages = msgs;
+        else
+            this.messages.add(msgs);
+        return this;
     };
 
 
@@ -308,17 +312,17 @@
      * @return Notification object for chaining
      */
     public Notifications copyNotificationsFrom (Notifications notes) {
-	try {
-	    if (notes.hasErrors())
-		this.addErrors((Messages) notes.getErrors().clone());
-	    if (notes.hasWarnings())
-		this.addWarnings((Messages) notes.getWarnings().clone());
-	    if (notes.hasMessages())
-		this.addMessages((Messages) notes.getMessages().clone());
-	}
-	catch (CloneNotSupportedException cnse) {
-	};
-	return this;
+        try {
+            if (notes.hasErrors())
+                this.addErrors((Messages) notes.getErrors().clone());
+            if (notes.hasWarnings())
+                this.addWarnings((Messages) notes.getWarnings().clone());
+            if (notes.hasMessages())
+                this.addMessages((Messages) notes.getMessages().clone());
+        }
+        catch (CloneNotSupportedException cnse) {
+        };
+        return this;
     };
 
 
@@ -330,33 +334,33 @@
      */
     public Notifications copyNotificationsFrom (JsonNode request) {
 
-	// Add warnings from JSON
-	if (request.has("warnings") &&
-	    request.get("warnings").isArray()) {
-	    JsonNode msgs = request.get("warnings");
-	    for (JsonNode msg : msgs)
-		this.addWarning(msg);
-	};
+        // Add warnings from JSON
+        if (request.has("warnings") &&
+            request.get("warnings").isArray()) {
+            JsonNode msgs = request.get("warnings");
+            for (JsonNode msg : msgs)
+                this.addWarning(msg);
+        };
 
-	// Add messages from JSON
-	if (request.has("messages") &&
-	    request.get("messages").isArray()) {
-	    JsonNode msgs = request.get("messages");
-	    if (msgs.isArray())
-		for (JsonNode msg : msgs)
-		    this.addMessage(msg);
-	};
+        // Add messages from JSON
+        if (request.has("messages") &&
+            request.get("messages").isArray()) {
+            JsonNode msgs = request.get("messages");
+            if (msgs.isArray())
+                for (JsonNode msg : msgs)
+                    this.addMessage(msg);
+        };
 
-	// Add errors from JSON
-	if (request.has("errors") &&
-	    request.get("errors").isArray()) {
-	    JsonNode msgs = request.get("errors");
-	    if (msgs.isArray())
-		for (JsonNode msg : msgs)
-		    this.addError(msg);
-	};
-
-	return this;
+        // Add errors from JSON
+        if (request.has("errors") &&
+            request.get("errors").isArray()) {
+            JsonNode msgs = request.get("errors");
+            if (msgs.isArray())
+                for (JsonNode msg : msgs)
+                    this.addError(msg);
+        };
+        
+        return this;
     };
 
 
@@ -366,13 +370,13 @@
      * @return Notification object for chaining
      */
     public Notifications clearNotifications () {
-	if (this.warnings != null)
-	    this.warnings.clear();
-	if (this.messages != null)
-	    this.messages.clear();
-	if (this.errors != null)
-	    this.errors.clear();
-	return this;
+        if (this.warnings != null)
+            this.warnings.clear();
+        if (this.messages != null)
+            this.messages.clear();
+        if (this.errors != null)
+            this.errors.clear();
+        return this;
     };
 
 
@@ -382,19 +386,20 @@
      * @return JsonNode representation of all warnings, errors, and messages
      */
     public JsonNode toJsonNode () {
-	ObjectNode json =  mapper.createObjectNode();
+        ObjectNode json =  mapper.createObjectNode();
 
-	// Add messages
-	if (this.hasWarnings())
-	    json.put("warnings", this.getWarnings().toJsonNode());
-	if (this.hasErrors())
-	    json.put("errors", this.getErrors().toJsonNode());
-	if (this.hasMessages())
-	    json.put("messages", this.getMessages().toJsonNode());
-
-	return (JsonNode) json;
+        // Add messages
+        if (this.hasWarnings())
+            json.put("warnings", this.getWarnings().toJsonNode());
+        if (this.hasErrors())
+            json.put("errors", this.getErrors().toJsonNode());
+        if (this.hasMessages())
+            json.put("messages", this.getMessages().toJsonNode());
+        
+        return (JsonNode) json;
     };
 
+
     /**
      * Serialize Notifications as a JSON string.
      * <p>
@@ -413,22 +418,22 @@
      * @return String representation of all warnings, errors, and messages
      */
     public String toJsonString () {
-	String msg = "";
-	try {
-	    JsonNode node = this.toJsonNode();
-	    if (node == null)
-		return "{}";
-	    return mapper.writeValueAsString(node);
-	}
-	catch (Exception e) {
-	    // Bad in case the message contains quotes!
-	    msg = ", \"" + e.getLocalizedMessage() + "\"";
-	};
+        String msg = "";
+        try {
+            JsonNode node = this.toJsonNode();
+            if (node == null)
+                return "{}";
+            return mapper.writeValueAsString(node);
+        }
+        catch (Exception e) {
+            // Bad in case the message contains quotes!
+            msg = ", \"" + e.getLocalizedMessage() + "\"";
+        };
 
-	return
-	    "{\"errors\" : [" +
-	    "[620, " +
-	    "\"Unable to generate JSON\"" + msg + "]" +
-	    "]}";
+        return
+            "{\"errors\" : [" +
+            "[620, " +
+            "\"Unable to generate JSON\"" + msg + "]" +
+            "]}";
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/response/serialize/KorapResponseDeserializer.java b/src/main/java/de/ids_mannheim/korap/response/serialize/KorapResponseDeserializer.java
index 3e009bd..23525ff 100644
--- a/src/main/java/de/ids_mannheim/korap/response/serialize/KorapResponseDeserializer.java
+++ b/src/main/java/de/ids_mannheim/korap/response/serialize/KorapResponseDeserializer.java
@@ -4,15 +4,30 @@
 import java.io.*;
 
 import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.DeserializationContext;
 
 import de.ids_mannheim.korap.response.KorapResponse;
 
+/**
+ * JSON Deserialization class for Jackson, used by KorapResponse.
+ * No direct usage intended.
+ *
+ * @author Nils Diewald
+ * @see de.ids_mannheim.korap.KorapResponse
+ */
 public class KorapResponseDeserializer extends JsonDeserializer<KorapResponse> {
- 
+
+    /**
+     * Deserialization of JSON format.
+     *
+     * @param parser A parser instance for consuming JSON.
+     * @param ctxt A deserialization context.
+     * @return The deserialized KorapResponse object.
+     */ 
+
     @Override
     public KorapResponse deserialize (JsonParser parser, DeserializationContext ctxt)
         throws IOException, JsonProcessingException {
@@ -27,7 +42,7 @@
             // Is combined name and version
             if (found > 0 && (found + 1 < fullVersion.length())) {
                 kresp.setName(fullVersion.substring(0, found))
-                     .setVersion(fullVersion.substring(found + 1));
+                    .setVersion(fullVersion.substring(found + 1));
             }
             // Is only version number
             else {
@@ -36,9 +51,8 @@
         };
 
         // Deserialize timeout information
-        if (node.has("timeExceeded") && node.get("timeExceeded").asBoolean()) {
+        if (node.has("timeExceeded") && node.get("timeExceeded").asBoolean())
             kresp.setTimeExceeded(true);
-        };
 
         // Deserialize benchmark information
         if (node.has("benchmark"))
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestKorapDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestKorapDocument.java
new file mode 100644
index 0000000..ed38e70
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/index/TestKorapDocument.java
@@ -0,0 +1,141 @@
+package de.ids_mannheim.korap.index;
+
+import java.util.*;
+import java.io.*;
+
+// This may be better in a model subdirectory
+
+import org.apache.lucene.util.Version;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.Bits;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.junit.Ignore;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import de.ids_mannheim.korap.KorapDocument;
+
+@RunWith(JUnit4.class)
+public class TestKorapDocument {
+
+    private class KorapRealDocument extends KorapDocument {};
+
+    @Test
+    public void createDocument () throws IOException {
+        KorapRealDocument krd = new KorapRealDocument();
+        krd.setPubDate("2014-10-12");
+        assertEquals("20141012", krd.getPubDate().toString());
+        assertEquals("2014-10-12", krd.getPubDateString());
+
+        krd.setCreationDate("2012-09-05");
+        assertEquals("20120905", krd.getCreationDate().toString());
+        assertEquals("2012-09-05", krd.getCreationDateString());
+
+        krd.setAuthor("Stephen King");
+        assertEquals("Stephen King", krd.getAuthor());
+
+        krd.setPubPlace("Düsseldorf");
+        assertEquals("Düsseldorf", krd.getPubPlace());
+
+        krd.setUID(415);
+        assertEquals(415, krd.getUID());
+
+        krd.setUID("561");
+        assertEquals(561, krd.getUID());
+
+        try {
+            krd.setUID("zzz");
+        }
+        catch (NumberFormatException e) {
+        };
+        assertEquals(561, krd.getUID());
+
+        krd.setTitle("An Example");
+        assertEquals("An Example", krd.getTitle());
+
+        krd.setSubTitle("An Example");
+        assertEquals("An Example", krd.getSubTitle());
+
+        krd.setPrimaryData("We don't need no education");
+        assertEquals("We don't need no education", krd.getPrimaryData());
+        assertEquals("don't need no education", krd.getPrimaryData(3));
+        assertEquals("do", krd.getPrimaryData(3,5));
+        assertEquals(26, krd.getPrimaryDataLength());
+
+        krd.setPrimaryData("abc");
+        assertEquals(3, krd.getPrimaryDataLength());
+        krd.setPrimaryData("öäüß");
+        assertEquals(4, krd.getPrimaryDataLength());
+
+        krd.setTextSigle("U-abc-001");
+        assertEquals("U-abc-001", krd.getTextSigle());
+
+        krd.setDocSigle("U-abc");
+        assertEquals("U-abc", krd.getDocSigle());
+
+        krd.setCorpusSigle("U");
+        assertEquals("U", krd.getCorpusSigle());
+
+        krd.setPublisher("Pope Francis");
+        assertEquals("Pope Francis", krd.getPublisher());
+
+        krd.setEditor("Michael Knight");
+        assertEquals("Michael Knight", krd.getEditor());
+
+        krd.setTextType("shortstory");
+        assertEquals("shortstory", krd.getTextType());
+
+        krd.setTextTypeArt("Reportage");
+        assertEquals("Reportage", krd.getTextTypeArt());
+
+        krd.setTextTypeRef("Hm");
+        assertEquals("Hm", krd.getTextTypeRef());
+
+        krd.setTextColumn("Feuilleton");
+        assertEquals("Feuilleton", krd.getTextColumn());
+
+        krd.setTextDomain("Comment");
+        assertEquals("Comment", krd.getTextDomain());
+
+        krd.setLicense("cc");
+        assertEquals("cc", krd.getLicense());
+
+        krd.setPages("56-78");
+        assertEquals("56-78", krd.getPages());
+
+        krd.setFileEditionStatement("no problemo 1");
+        assertEquals("no problemo 1", krd.getFileEditionStatement());
+
+        krd.setBiblEditionStatement("no problemo 2");
+        assertEquals("no problemo 2", krd.getBiblEditionStatement());
+
+        krd.setLanguage("de");
+        assertEquals("de", krd.getLanguage());
+
+        krd.setCorpusTitle("Mannheimer Morgen");
+        assertEquals("Mannheimer Morgen", krd.getCorpusTitle());
+
+        krd.setCorpusSubTitle("Zeitung für Mannheim");
+        assertEquals("Zeitung für Mannheim", krd.getCorpusSubTitle());
+
+        krd.setCorpusAuthor("Peter Gabriel");
+        assertEquals("Peter Gabriel", krd.getCorpusAuthor());
+
+        krd.setCorpusEditor("Phil Collins");
+        assertEquals("Phil Collins", krd.getCorpusEditor());
+
+        krd.setDocTitle("New York Times");
+        assertEquals("New York Times", krd.getDocTitle());
+
+        krd.setDocSubTitle("Newspaper for New York");
+        assertEquals("Newspaper for New York", krd.getDocSubTitle());
+
+        krd.setDocAuthor("Dean Baquet");
+        assertEquals("Dean Baquet", krd.getDocAuthor());
+
+        krd.setDocEditor("Arthur Ochs Sulzberger Jr.");
+        assertEquals("Arthur Ochs Sulzberger Jr.", krd.getDocEditor());
+    };
+};
diff --git a/src/test/java/de/ids_mannheim/korap/response/TestResponse.java b/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
index 43686f0..2ec3345 100644
--- a/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
+++ b/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
@@ -131,18 +131,25 @@
         assertTrue(kresp.hasTimeExceeded());
         assertTrue(kresp.hasWarnings());
 
-
         jsonResponse = "{\"warnings\":[[123,\"This is a warning\"]," +
             "[124,\"This is a second warning\"]],"+
-            "\"error\":[[125,\"This is a single error\"]], "+
+            "\"errors\":[[125,\"This is a single error\"]], "+
             " \"node\":\"tanja\", \"version\":\"seaweed-0.49\", " +
             " \"benchmark\":\"40.5s\",  \"listener\":\"10.0.10.14:678\"," +
             "\"timeExceeded\":true }";
         kresp = mapper.readValue(jsonResponse, KorapResponse.class);
-
-        /*
-{,"version":"seaweed-0.49","timeExceeded":true,"node":"tanja","listener":"10.0.10.14:678","benchmark":"40.5s"}
-        */
-        // System.err.println(kresp.toJsonString());
+        assertTrue(kresp.hasWarnings());
+        assertTrue(kresp.hasErrors());
+        assertFalse(kresp.hasMessages());
+        assertEquals(kresp.getError(0).getMessage(), "This is a single error");
+        assertEquals(kresp.getWarning(0).getMessage(), "Response time exceeded");
+        assertEquals(kresp.getWarning(1).getMessage(), "This is a warning");
+        assertEquals(kresp.getWarning(2).getMessage(), "This is a second warning");
+        assertEquals("0.49", kresp.getVersion());
+        assertEquals("seaweed", kresp.getName());
+        assertEquals("40.5s", kresp.getBenchmark());
+        assertEquals("10.0.10.14:678", kresp.getListener());
+        assertEquals("tanja", kresp.getNode());
+        assertTrue(kresp.hasTimeExceeded());
     };
 };