diff --git a/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java b/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
index 95d63f7..aac0f2f 100644
--- a/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
+++ b/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
@@ -27,7 +27,8 @@
     private final static Logger qlog = KustvaktLogger.getLogger("queryLogger");
     private final static Logger jlog = LoggerFactory
             .getLogger(SearchKrill.class);
-    // Temporary
+
+    // Temporary - shouldn't be here.
     String indexDir = "/data/prep_corpus/index/";
     String i = "/Users/hanl/Projects/prep_corpus";
     String klinux10 = "/vol/work/hanl/indices";
@@ -56,14 +57,12 @@
         catch (IOException e) {
             jlog.error("Unable to loadSubTypes index: {}", e.getMessage());
         };
-    }
+    };
 
 
     public KrillIndex getIndex () {
         return this.index;
-    }
-
-    ;
+    };
 
 
     /**
@@ -80,9 +79,7 @@
         Result kr = new Result();
         kr.addError(601, "Unable to find index");
         return kr.toJsonString();
-    }
-
-    ;
+    };
 
 
     /**
@@ -100,9 +97,7 @@
         Result kr = new Result();
         kr.addError(601, "Unable to find index");
         return kr.toJsonString();
-    }
-
-    ;
+    };
 
 
     /**
@@ -126,9 +121,7 @@
         Match km = new Match();
         km.addError(601, "Unable to find index");
         return km.toJsonString();
-    }
-
-    ;
+    };
 
 
     public String getMatch (String id, List<String> foundries,
@@ -151,9 +144,7 @@
         Match km = new Match();
         km.addError(601, "Unable to find index");
         return km.toJsonString();
-    }
-
-    ;
+    };
 
 
     /**
@@ -201,9 +192,7 @@
         Match km = new Match();
         km.addError(601, "Unable to find index");
         return km.toJsonString();
-    }
-
-    ;
+    };
 
 
     /**
@@ -239,16 +228,26 @@
                 .append(tokens).append(",\"sentences\":").append(sentences)
                 .append(",\"paragraphs\":").append(paragraphs).append("}");
         return sb.toString();
-    }
+    };
 
-    ;
+    /**
+	 * Return the match identifier as a string.
+	 * This is a convenient method to deal with legacy instantiation of the
+	 * code.
+	 */
+    public String getMatchId (String corpusID, String docID, String matchID) {
+		String docIDtextID [] = docID.split("\\.", 2);
 
+		// Create a string representation of the match 
+		StringBuilder sb = new StringBuilder()
+			.append("match-")
+			.append(corpusID).append('/')
+			.append(docIDtextID[0]);
 
-    public String getMatchId (String type, String docid, String tofrom) {
-        return new StringBuilder().append("match-").append(type).append("!")
-                .append(type).append("_").append(docid).append("-")
-                .append(tofrom).toString();
-    }
+		// The docID was split
+		if (docIDtextID.length == 2)
+			sb.append('/').append(docIDtextID[1]);
 
-    ;
-};
\ No newline at end of file
+		return sb.append('-').append(matchID).toString();
+    };
+};
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java b/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
index 3ede08c..e28b85b 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
@@ -290,10 +290,16 @@
     }
 
 
+	/*
+	 * TODO: The problem here is, that the matchinfo path makes no
+	 * distinction between docs and texts - unlike DeReKo, the backend
+	 * and the frontend. Luckily there is a convenient method
+	 * "getMatchID()" for a workaround, but this should be fixed.
+	 */
     @GET
     @Path("/corpus/{id}/{docid}/{rest}/matchInfo")
     public Response getMatchInfo (@PathParam("id") String id,
-            @PathParam("docid") String docid, @PathParam("rest") String rest,
+								  @PathParam("docid") String docid, @PathParam("rest") String rest,
             @QueryParam("foundry") Set<String> foundries,
             @QueryParam("layer") Set<String> layers,
             @QueryParam("spans") Boolean spans) {
diff --git a/src/main/resources/changelog b/src/main/resources/changelog
index 50f47a7..58275c3 100644
--- a/src/main/resources/changelog
+++ b/src/main/resources/changelog
@@ -1,6 +1,9 @@
 === CHANGELOG FILE ===
 
+13/10/2016
+    - MOD: updated search to use new siglen (diewald)
+
 05/05/2015
-    - ADD: rest test suite for user service
-    - MOD: setup parameter modification
-    - ADD: oauth2 client unique constraint
+    - ADD: rest test suite for user service (hanl)
+    - MOD: setup parameter modification (hanl)
+    - ADD: oauth2 client unique constraint (hanl)
