diff --git a/src/main/java/de/ids_mannheim/korap/Krill.java b/src/main/java/de/ids_mannheim/korap/Krill.java
index 0531c63..ccea5df 100644
--- a/src/main/java/de/ids_mannheim/korap/Krill.java
+++ b/src/main/java/de/ids_mannheim/korap/Krill.java
@@ -215,7 +215,8 @@
 
                 // TODO: Temporary
                 if (collNode.fieldNames().hasNext()) {
-                    this.setCollection(new KrillCollection().fromKoral(collNode));
+                    this.setCollection(new KrillCollection()
+                            .fromKoral(collNode));
                 };
             }
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index 50f591a..d839422 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -292,6 +292,7 @@
         throw new QueryException(813, "Collection type is not supported");
     };
 
+
     /**
      * Set the collection from a {@link CollectionBuilder} object.
      * 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index bc10a5d..ca9f70b 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -535,7 +535,7 @@
         }
         catch (IOException e) {
             log.error("File json not found or unmappable: {}",
-                      e.getLocalizedMessage());
+                    e.getLocalizedMessage());
         };
         return (FieldDocument) null;
     };
@@ -783,7 +783,8 @@
         // Rewrite parse ID
         uid = new Integer(Integer.parseInt(uid)).toString();
 
-        Filter filter = (Filter) new QueryWrapperFilter(new TermQuery(new Term("UID", uid)));
+        Filter filter = (Filter) new QueryWrapperFilter(new TermQuery(new Term(
+                "UID", uid)));
 
         try {
 
@@ -792,7 +793,7 @@
 
                 // Retrieve the single document of interest
                 DocIdSet filterSet = filter.getDocIdSet(atomic, atomic.reader()
-                                                        .getLiveDocs());
+                        .getLiveDocs());
 
                 // Create a bitset for the correct document
                 Bits bitset = filterSet.bits();
@@ -841,6 +842,7 @@
         return text;
     };
 
+
     public String getMatchIDWithContext (String id) {
         /* No includeHighlights */
         return "";
@@ -1031,7 +1033,7 @@
             if (DEBUG)
                 log.trace("The final regexObj is {}", regexObj.toString());
         };
-	
+
         try {
 
             // Iterate over all atomic indices and find the matching document
@@ -1092,14 +1094,12 @@
                 // Todo:
                 SearchContext context = match.getContext();
 
-		// Override the normal match marking
-		// to have an inner match
-		match.overrideMatchPosition(
-		  match.getStartPos(),
-		  match.getEndPos() - 1
-		);
+                // Override the normal match marking
+                // to have an inner match
+                match.overrideMatchPosition(match.getStartPos(),
+                        match.getEndPos() - 1);
 
-		
+
                 // Search for minimal surrounding sentences
                 if (extendToSentence) {
                     String element = "base/s:s";
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 0bb3e37..538b0ad 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -299,8 +299,8 @@
                 if (DEBUG)
                     log.trace("Wrap class reference {}", number);
 
-                return new SpanFocusQueryWrapper(
-                        this._fromKoral(operands.get(0)), number);
+                return new SpanFocusQueryWrapper(this._fromKoral(operands
+                        .get(0)), number);
 
             case "koral:token":
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillStats.java b/src/main/java/de/ids_mannheim/korap/KrillStats.java
index 898058b..24d3467 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillStats.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillStats.java
@@ -19,31 +19,31 @@
  * Create a Statistics object.
  * 
  * This is early work and highliy experimental!
- *
+ * 
  * <blockquote><pre>
  * KrillStats ks = new KrillStats(json);
  * </pre></blockquote>
- *
+ * 
  * Should serialize to something like
- *
+ * 
  * "stats" : {
- *   "@type" : "koral:stats",
- *   "collection" : [
- *     {
- *       "@type" : "stats:collection",
- *       "foundry" : "base",
- *       "layer" : "s",
- *       "key" : "s",
- *       "value" : 450
- *     },
- *     {
- *       "@type" : "stats:collection",
- *       "key" : "texts",
- *       "value" : 2
- *     }
- *   ]
+ * "@type" : "koral:stats",
+ * "collection" : [
+ * {
+ * "@type" : "stats:collection",
+ * "foundry" : "base",
+ * "layer" : "s",
+ * "key" : "s",
+ * "value" : 450
+ * },
+ * {
+ * "@type" : "stats:collection",
+ * "key" : "texts",
+ * "value" : 2
  * }
- *
+ * ]
+ * }
+ * 
  * 
  * @author diewald
  */
@@ -53,8 +53,7 @@
 public final class KrillStats extends Notifications {
 
     // Logger
-    private final static Logger log = LoggerFactory
-            .getLogger(KrillStats.class);
+    private final static Logger log = LoggerFactory.getLogger(KrillStats.class);
 
     // This advices the java compiler to ignore all loggings
     public static final boolean DEBUG = false;
@@ -66,6 +65,7 @@
      */
     public KrillStats () {};
 
+
     @Override
     public JsonNode toJsonNode () {
         ObjectMapper mapper = new ObjectMapper();
@@ -74,5 +74,5 @@
         json.put("@type", "koral:stats");
 
         return (JsonNode) json;
-    }    
+    }
 };
diff --git a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
index f90945f..b293a47 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -79,6 +79,7 @@
             // Meta information regarding annotations
             tokenSource, layerInfos;
 
+
     /**
      * Populate document meta information with information coming from
      * the index.
@@ -97,6 +98,7 @@
         this.populateDocument(doc, field, fieldList);
     };
 
+
     public void populateFields (Document doc) {
 
         HashSet<String> fieldList = new HashSet<>(32);
@@ -107,6 +109,7 @@
         this.populateFields(doc, fieldList);
     };
 
+
     public void populateFields (Document doc, Collection<String> fields) {
         // Remember - never serialize "tokens"
 
@@ -205,6 +208,7 @@
             this.setFileEditionStatement(doc.get("fileEditionStatement"));
     };
 
+
     /**
      * Populate document meta information with information coming from
      * the index.
@@ -1184,12 +1188,14 @@
         return this.field;
     };
 
+
     @Deprecated
     @JsonProperty("corpusID")
     public String getCorpusID () {
         return this.corpusID;
     };
 
+
     @Deprecated
     public void setCorpusID (String corpusID) {
         this.corpusID = corpusID;
@@ -1208,6 +1214,7 @@
         this.ID = ID;
     };
 
+
     /**
      * Serialize response as a {@link JsonNode}.
      * 
diff --git a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
index 73a7ecf..f1f412d 100644
--- a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
@@ -305,6 +305,7 @@
         this.addString("ID", ID);
     };
 
+
     @Override
     @JsonIgnore
     public void setUID (int ID) {
@@ -314,6 +315,7 @@
         }
     };
 
+
     @Override
     public void setUID (String ID) {
         if (ID != null) {
@@ -322,6 +324,7 @@
         };
     };
 
+
     // No longer supported
     @Override
     public void setLayerInfo (String layerInfo) {
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index 40c7300..965c736 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -788,7 +788,7 @@
     // Start building highlighted snippets
     private boolean _processHighlight () {
 
-      if (processed)
+        if (processed)
             return true;
 
         // Relevant details are missing
@@ -810,10 +810,11 @@
             log.trace("PTO will retrieve {} & {} (Match boundary)",
                     this.getStartPos(), this.getEndPos());
 
-	// Set inner match
-	if (this.innerMatchEndPos != 1)
-	  this.addHighlight(this.innerMatchStartPos, this.innerMatchEndPos, -1);
-	
+        // Set inner match
+        if (this.innerMatchEndPos != 1)
+            this.addHighlight(this.innerMatchStartPos, this.innerMatchEndPos,
+                    -1);
+
         // Add all highlights for character retrieval
         if (this.highlight != null) {
             for (Highlight hl : this.highlight) {
@@ -875,12 +876,12 @@
                 }
                 else if (arg0[1] == arg1[1]) {
 
-		    // Compare class number
-		    if (arg0[2] > arg1[2])
-		      return 1;
-		    else if (arg0[2] < arg1[1])
-		      return -1;
-		    return 0;
+                    // Compare class number
+                    if (arg0[2] > arg1[2])
+                        return 1;
+                    else if (arg0[2] < arg1[1])
+                        return -1;
+                    return 0;
 
                 }
                 return 1;
@@ -901,14 +902,14 @@
             }
             else if (arg0[1] == arg1[1]) {
 
-	      // Check start positions
-	      if (arg0[0] < arg1[0]) {
-		return 1;
-	      }
-	      else if (arg0[0] == arg1[0]) {
-		return 0;
-	      };
-	      return -1;
+                // Check start positions
+                if (arg0[0] < arg1[0]) {
+                    return 1;
+                }
+                else if (arg0[0] == arg1[0]) {
+                    return 0;
+                };
+                return -1;
             };
             return -1;
         };
@@ -1019,11 +1020,11 @@
         rightContext.append("</span>");
 
         // Iterate through all remaining elements
-	sb.append("<span class=\"match\">");
+        sb.append("<span class=\"match\">");
         for (short i = start; i <= end; i++) {
             sb.append(this.snippetArray.get(i).toHTML(this, level, levelCache));
         };
-	sb.append("</span>");
+        sb.append("</span>");
         sb.append(rightContext);
 
         return (this.snippetHTML = sb.toString());
@@ -1043,39 +1044,39 @@
         short start = (short) 0;
         short end = this.snippetArray.size();
         end--;
-	
+
         StringBuilder sb = new StringBuilder();
 
         if (this.startMore)
             sb.append("... ");
 
-	// First element of sorted array
+        // First element of sorted array
         HighlightCombinatorElement elem = this.snippetArray.getFirst();
-	if (elem.type == 0) {
-	  sb.append(elem.toBrackets(this));
-	  start++;
-	};
+        if (elem.type == 0) {
+            sb.append(elem.toBrackets(this));
+            start++;
+        };
 
-	sb.append("[");
-	
-	// Last element of sorted array
+        sb.append("[");
+
+        // Last element of sorted array
         elem = this.snippetArray.getLast();
         StringBuilder rightContext = new StringBuilder();
 
-	// Last element is textual
+        // Last element is textual
         if (elem != null && elem.type == 0) {
             rightContext.append(elem.toBrackets(this));
             // decrement end
             end--;
         };
 
-	for (short i = start; i <= end; i++) {
-	  sb.append(this.snippetArray.get(i).toBrackets(this));
-	};
+        for (short i = start; i <= end; i++) {
+            sb.append(this.snippetArray.get(i).toBrackets(this));
+        };
 
-	sb.append("]");
-	sb.append(rightContext);
-	
+        sb.append("]");
+        sb.append(rightContext);
+
         if (this.endMore)
             sb.append(" ...");
 
@@ -1133,19 +1134,20 @@
         return stack;
     };
 
-  /**
-   * Sometimes the match start and end positions are inside the
-   * matching region, e.g. when the match was expanded.
-   * This will override the original matching positions
-   * And matrk the real matching.
-   */
-  public void overrideMatchPosition (int start, int end) {
-    if (DEBUG)
-      log.trace("--- Override match position");
 
-    this.innerMatchStartPos = start;
-    this.innerMatchEndPos = end;
-  }; 
+    /**
+     * Sometimes the match start and end positions are inside the
+     * matching region, e.g. when the match was expanded.
+     * This will override the original matching positions
+     * And matrk the real matching.
+     */
+    public void overrideMatchPosition (int start, int end) {
+        if (DEBUG)
+            log.trace("--- Override match position");
+
+        this.innerMatchStartPos = start;
+        this.innerMatchEndPos = end;
+    };
 
 
     /**
@@ -1205,8 +1207,8 @@
         int startOffsetChar = startPosChar - intArray[0];
 
         // Add match span, in case no inner match is defined
-	if (this.innerMatchEndPos == -1)
-	  this.span.add(intArray);
+        if (this.innerMatchEndPos == -1)
+            this.span.add(intArray);
 
         // highlights
         // -- I'm not sure about this.
diff --git a/src/main/java/de/ids_mannheim/korap/response/Text.java b/src/main/java/de/ids_mannheim/korap/response/Text.java
index 437f24c..3e6647a 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Text.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Text.java
@@ -33,8 +33,10 @@
     // Mapper for JSON serialization
     ObjectMapper mapper = new ObjectMapper();
 
+
     public Text () {};
 
+
     public String toJsonString () {
         JsonNode json = (JsonNode) this.toJsonNode();
 
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinatorElement.java b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinatorElement.java
index 1190eb4..9762aef 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinatorElement.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinatorElement.java
@@ -53,29 +53,31 @@
         if (this.type == 1) {
             StringBuilder sb = new StringBuilder();
 
-	    // This is the surrounding match mark
+            // This is the surrounding match mark
             if (this.number == -1) {
                 sb.append("<mark>");
             }
 
             else if (this.number < -1) {
                 sb.append("<span xml:id=\"")
-                    .append(escapeHTML(match.getPosID(match.getClassID(this.number))))
-                        .append("\">");
+                        .append(escapeHTML(match.getPosID(match
+                                .getClassID(this.number)))).append("\">");
             }
 
             else if (this.number >= 256) {
                 sb.append("<span ");
                 if (this.number < 2048) {
                     sb.append("title=\"")
-                        .append(escapeHTML(match.getAnnotationID(this.number)))
-                            .append('"');
+                            .append(escapeHTML(match
+                                    .getAnnotationID(this.number))).append('"');
                 }
                 else {
                     Relation rel = match.getRelationID(this.number);
-                    sb.append("xlink:title=\"").append(escapeHTML(rel.annotation))
+                    sb.append("xlink:title=\"")
+                            .append(escapeHTML(rel.annotation))
                             .append("\" xlink:type=\"simple\" xlink:href=\"#")
-                        .append(escapeHTML(match.getPosID(rel.ref))).append('"');
+                            .append(escapeHTML(match.getPosID(rel.ref)))
+                            .append('"');
                 };
                 sb.append('>');
             }
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java b/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
index 10f0303..ff15e13 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
@@ -9,9 +9,8 @@
     private ArrayList<int[]> pos = new ArrayList<>(8);
 
     // Remember: "contains" is necessary for a compatibility bug in Kustvakt
-    Pattern idRegex = Pattern.compile("^(?:match-|contains-)" +
-                                      "(?:([^!]+?)[!\\.])?" +
-                                      "([^!]+)[-/]p([0-9]+)-([0-9]+)"
+    Pattern idRegex = Pattern.compile("^(?:match-|contains-)"
+            + "(?:([^!]+?)[!\\.])?" + "([^!]+)[-/]p([0-9]+)-([0-9]+)"
             + "((?:\\(-?[0-9]+\\)-?[0-9]+--?[0-9]+)*)" + "(?:c.+?)?$");
     Pattern posRegex = Pattern.compile("\\(([0-9]+)\\)([0-9]+)-([0-9]+)");
 
@@ -23,7 +22,8 @@
      * Construct a new MatchIdentifier.
      * Due to lots of internal changes and compatibility reasons,
      * the structure of the identifier has changed a lot.
-     * The constructor supports different legacy structures for test compatibility.
+     * The constructor supports different legacy structures for test
+     * compatibility.
      */
     public MatchIdentifier (String id) {
 
diff --git a/src/main/java/de/ids_mannheim/korap/server/Resource.java b/src/main/java/de/ids_mannheim/korap/server/Resource.java
index 08f5399..e4b94ff 100644
--- a/src/main/java/de/ids_mannheim/korap/server/Resource.java
+++ b/src/main/java/de/ids_mannheim/korap/server/Resource.java
@@ -225,6 +225,7 @@
         return kresp.toJsonString();
     };
 
+
     // PUT: Return corpus info for virtual corpus
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/util/KrillString.java b/src/main/java/de/ids_mannheim/korap/util/KrillString.java
index 8a11d33..602709b 100644
--- a/src/main/java/de/ids_mannheim/korap/util/KrillString.java
+++ b/src/main/java/de/ids_mannheim/korap/util/KrillString.java
@@ -68,6 +68,7 @@
         return text.replaceAll("([\\{\\}\\[\\]\\\\])", "\\\\$1");
     };
 
+
     /**
      * Add surrounding double quotes.
      * 
