diff --git a/pom.xml b/pom.xml
index 63257bc..184ab1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>de.ids_mannheim.korap</groupId>
     <artifactId>Kustvakt-core</artifactId>
-    <version>0.59.6</version>
+    <version>0.59.7</version>
     <packaging>jar</packaging>
     <name>Kustvakt core</name>
     <description>Kustvakt core, basic rest api for testing purposes and default
@@ -356,7 +356,7 @@
         <dependency>
             <groupId>de.ids_mannheim.korap</groupId>
             <artifactId>Krill</artifactId>
-            <version>0.55.5</version>
+            <version>0.55.7</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.xerial</groupId>
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)
