diff --git a/lite/Changes b/lite/Changes
index 97bd277..3d27a08 100644
--- a/lite/Changes
+++ b/lite/Changes
@@ -1,8 +1,9 @@
 version 0.60
-15/03/2018	
+23/03/2018	
     - updated field type:date in the metadata test (margaretha)
     - removed loading application context via BeanFactory (margaretha)
-    - fixed missing kustvakt-lite.conf (margaretha))
+    - fixed missing kustvakt-lite.conf (margaretha)
+    - added support for highlights in matchinfo (diewald)
 
 version 0.59.9 
 01/02/2018
diff --git a/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java b/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
index cc37c2b..7eb5c2c 100644
--- a/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
+++ b/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
@@ -334,6 +334,8 @@
             @QueryParam("foundry") Set<String> foundries,
             @QueryParam("layer") Set<String> layers,
             @QueryParam("spans") Boolean spans,
+			// Highlights may also be a list of valid highlight classes
+			@QueryParam("hls") Boolean highlights,
             @Context HttpServletRequest request) throws KustvaktException {
 
         String matchid =
@@ -349,6 +351,7 @@
             f_list = new ArrayList<>(foundries);
 
         spans = spans != null ? spans : false;
+        highlights = highlights != null ? highlights : false;
 
         boolean match_only = foundries == null || foundries.isEmpty();
         String results;
@@ -356,7 +359,7 @@
             results = searchKrill.getMatch(matchid, null);
         else
             results = searchKrill.getMatch(matchid, f_list, l_list, spans,
-                    false, true, null);
+                    highlights, true, null);
 
         return Response.ok(results).build();
     }
diff --git a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
index 79b1786..618bb04 100644
--- a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
+++ b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
@@ -195,8 +195,7 @@
 	@Test
 	public void testMatchInfoGetWithoutSpans () throws KustvaktException{
         ClientResponse response = resource()
-			
-			.path("corpus/GOE/AGA/01784/p36-46/matchInfo")
+			.path("corpus/GOE/AGA/01784/p36-46(5)37-45(2)38-42/matchInfo")
 			.queryParam("foundry", "*")
 			.queryParam("spans", "false")
 			.get(ClientResponse.class);
@@ -206,10 +205,55 @@
         JsonNode node = JsonUtils.readTree(ent);
         assertNotNull(node);
         assertEquals("GOE/AGA/01784", node.at("/textSigle").asText());
+        assertEquals("match-GOE/AGA/01784-p36-46(5)37-45(2)38-42",
+					 node.at("/matchID").asText());
         assertEquals("Belagerung von Mainz", node.at("/title").asText());
 	};
 
 	@Test
+	public void testMatchInfoGetWithoutHighlights () throws KustvaktException{
+        ClientResponse response = resource()
+			.path("corpus/GOE/AGA/01784/p36-46(5)37-45(2)38-42/matchInfo")
+			.queryParam("foundry", "xy")
+			.queryParam("spans", "false")
+			.get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+					 response.getStatus());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertEquals("<span class=\"context-left\"></span><span class=\"match\">der alte freie Weg nach Mainz war gesperrt, ich mußte über die Schiffbrücke bei Rüsselsheim; in Ginsheim ward <mark>gefüttert; der Ort ist sehr zerschossen; dann über die Schiffbrücke</mark> auf die Nonnenaue, wo viele Bäume niedergehauen lagen, sofort auf dem zweiten Teil der Schiffbrücke über den größern Arm des Rheins.</span><span class=\"context-right\"></span>",
+					 node.at("/snippet").asText());
+        assertEquals("GOE/AGA/01784", node.at("/textSigle").asText());
+        assertEquals("match-GOE/AGA/01784-p36-46(5)37-45(2)38-42",
+					 node.at("/matchID").asText());
+        assertEquals("Belagerung von Mainz", node.at("/title").asText());
+	};
+
+	
+	@Test
+	public void testMatchInfoGetWithHighlights () throws KustvaktException{
+        ClientResponse response = resource()			
+			.path("corpus/GOE/AGA/01784/p36-46(5)37-45(2)38-42/matchInfo")
+			.queryParam("foundry", "xy")
+			.queryParam("spans", "false")
+			.queryParam("hls", "true")
+			.get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+					 response.getStatus());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertEquals("GOE/AGA/01784", node.at("/textSigle").asText());
+        assertEquals("<span class=\"context-left\"></span><span class=\"match\">der alte freie Weg nach Mainz war gesperrt, ich mußte über die Schiffbrücke bei Rüsselsheim; in Ginsheim ward <mark>gefüttert; <mark class=\"class-5 level-0\">der <mark class=\"class-2 level-1\">Ort ist sehr zerschossen; dann</mark> über die Schiffbrücke</mark></mark> auf die Nonnenaue, wo viele Bäume niedergehauen lagen, sofort auf dem zweiten Teil der Schiffbrücke über den größern Arm des Rheins.</span><span class=\"context-right\"></span>",
+					 node.at("/snippet").asText());
+		assertEquals("match-GOE/AGA/01784-p36-46(5)37-45(2)38-42",
+					 node.at("/matchID").asText());
+        assertEquals("Belagerung von Mainz", node.at("/title").asText());
+	};
+
+	
+	@Test
 	public void testMatchInfoGet2 () throws KustvaktException{
         ClientResponse response = resource()
 			
