diff --git a/src/main/java/de/ids_mannheim/korap/match/HighlightCombinatorElement.java b/src/main/java/de/ids_mannheim/korap/match/HighlightCombinatorElement.java
index 6432c0e..dbd3e0a 100644
--- a/src/main/java/de/ids_mannheim/korap/match/HighlightCombinatorElement.java
+++ b/src/main/java/de/ids_mannheim/korap/match/HighlightCombinatorElement.java
@@ -45,66 +45,68 @@
 
     // Return html fragment for this combinator element
     public String toHTML (KorapMatch match, FixedBitSet level, byte[] levelCache) {	    
-	// Opening
-	if (this.type == 1) {
-	    StringBuilder sb = new StringBuilder();
-	    if (this.number == -1) {
-		sb.append("<span class=\"match\">");
-	    }
+        // Opening
+        if (this.type == 1) {
+            StringBuilder sb = new StringBuilder();
+            if (this.number == -1) {
+                sb.append("<mark>");
+            }
 
-	    else if (this.number < -1) {
-		sb.append("<span xml:id=\"")
-		    .append(match.getPosID(
-					   match.getClassID(this.number)))
-		    .append("\">");
-	    }
+            else if (this.number < -1) {
+                sb.append("<span xml:id=\"")
+                    .append(match.getPosID(match.getClassID(this.number)))
+                    .append("\">");
+            }
 
-	    else if (this.number >= 256) {
-		sb.append("<span ");
-		if (this.number < 2048) {
-		    sb.append("title=\"")
-			.append(match.getAnnotationID(this.number))
-			.append('"');
-		}
-		else {
-		    Relation rel = match.getRelationID(this.number);
-		    sb.append("xlink:title=\"")
-			.append(rel.annotation)
-			.append("\" xlink:type=\"simple\" xlink:href=\"#")
-			.append(match.getPosID(rel.ref))
-			.append('"');
-		};
-		sb.append('>');
-	    }
+            else if (this.number >= 256) {
+                sb.append("<span ");
+                if (this.number < 2048) {
+                    sb.append("title=\"")
+                        .append(match.getAnnotationID(this.number))
+                        .append('"');
+                }
+                else {
+                    Relation rel = match.getRelationID(this.number);
+                    sb.append("xlink:title=\"")
+                        .append(rel.annotation)
+                        .append("\" xlink:type=\"simple\" xlink:href=\"#")
+                        .append(match.getPosID(rel.ref))
+                        .append('"');
+                };
+                sb.append('>');
+            }
 
-	    // Highlight - < 256
-	    else {
-		// Get the first free level slot
-		byte pos;
-		if (levelCache[this.number] != '\0') {
-		    pos = levelCache[this.number];
-		}
-		else {
-		    pos = (byte) level.nextSetBit(0);
-		    level.clear(pos);
-		    levelCache[this.number] = pos;
-		};
-		sb.append("<em class=\"class-")
-		    .append(this.number)
-		    .append(" level-")
-		    .append(pos)
-		    .append("\">");
-	    };
-	    return sb.toString();
-	}
-	// Closing
-	else if (this.type == 2) {
-	    if (this.number <= -1 || this.number >= 256)
-		return "</span>";
-
-	    if (this.terminal)
-		level.set((int) levelCache[this.number]);
-	    return "</em>";
+            // Highlight - < 256
+            else {
+                // Get the first free level slot
+                byte pos;
+                if (levelCache[this.number] != '\0') {
+                    pos = levelCache[this.number];
+                }
+                else {
+                    pos = (byte) level.nextSetBit(0);
+                    level.clear(pos);
+                    levelCache[this.number] = pos;
+                };
+                sb.append("<mark class=\"class-")
+                    .append(this.number)
+                    .append(" level-")
+                    .append(pos)
+                    .append("\">");
+            };
+            return sb.toString();
+        }
+        // Closing
+        else if (this.type == 2) {
+            if (this.number < -1 || this.number >= 256)
+                return "</span>";
+           
+            if (this.number == -1)
+                return "</mark>";
+         
+            if (this.terminal)
+                level.set((int) levelCache[this.number]);
+            return "</mark>";
 	};
 
 	// HTML encode primary data
