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 ef4bf06..ba506dd 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -115,7 +115,7 @@
 
     private HashMap<Integer, String> annotationNumber = new HashMap<>(16);
     private HashMap<Integer, Relation> relationNumber = new HashMap<>(16);
-    private HashMap<Integer, Integer> identifierNumber = new HashMap<>(16);
+    private HashMap<Integer, String> identifierNumber = new HashMap<>(16);
 
     // -1 is match highlight
     int annotationNumberCounter = 256;
@@ -209,7 +209,7 @@
     /**
      * Private class of highlights.
 	 * TODO: This should probably be renamed, as it not only contains highlights
-	 * but also annotations and pagebreaks
+	 * but also annotations, pagebreaks and relations
      */
     private class Highlight {
         public int start, end;
@@ -221,6 +221,12 @@
             this.end = end;
             // TODO: This can overflow!
             this.number = relationNumberCounter++;
+
+			if (DEBUG) {
+				log.trace("Add relation (2) '{}': source={}-{} >> target={}-{}",
+						  annotation, start, end, refStart, refEnd);
+			};
+			
             relationNumber.put(this.number, new Relation(annotation, refStart, refEnd));
         };
 
@@ -433,7 +439,7 @@
 							 String annotation) {
 
 		if (DEBUG)
-			log.trace("Add relation '{}': source={}-{} >> target={}-{}",
+			log.trace("Add relation (1) '{}': source={}-{} >> target={}-{}",
 					  annotation, srcStart, srcEnd, targetStart, targetEnd);
 
 		// Add source token
@@ -450,16 +456,24 @@
 		};
 
         int id = identifierNumberCounter--;
-        identifierNumber.put(id, targetStart);
+
+		// Here is probably the problem: the identifier-number
+		// needs to incorporate targetEnd as well
 
 		// Add target token
-		if (targetEnd == -1) { // || targetStart == targetEnd) {
+		// (The last part was previously commented
+		// out for unknown reason)
+		if (targetEnd == -1 || targetStart == targetEnd) {
 			this.addHighlight(new Highlight(targetStart, targetStart, id));
+
+			identifierNumber.put(id, String.valueOf(targetStart));
 		}
 
 		// Add target span
 		else {
 			this.addHighlight(new Highlight(targetStart, targetEnd, id));
+			identifierNumber.put(id, targetStart + "-" + targetEnd);
+
 		};
     };
 
@@ -703,6 +717,29 @@
 		return this.getPosID(pos, -1);
 	};
 
+
+	/**
+     * Get identifier for a specific position.
+     * 
+     * @param String
+     *            Start and optional end position to get
+	 *            identifier on, separated by a dash.
+     */
+	@JsonIgnore
+    public String getPosID (String pos) {
+
+		String[] startEnd = pos.split("-");
+		if (startEnd.length == 2) {
+			return this.getPosID(
+				Integer.parseInt(startEnd[0]),
+				Integer.parseInt(startEnd[1])
+				);
+		}
+		return this.getPosID(Integer.parseInt(startEnd[0]), -1);
+	};
+
+	
+
     /**
      * Get identifier for a specific position.
      * 
@@ -712,10 +749,10 @@
      *            End position to get identifier on.
      */
     @JsonIgnore
-		public String getPosID (int start, int end) {
+	public String getPosID (int start, int end) {
 
 		if (DEBUG)
-			log.trace("Retrieve the identifier for pos");
+			log.trace("Retrieve identifier for position {}-{}", start, end);
 
         // Identifier already given
         if (this.identifier != null)
@@ -738,7 +775,7 @@
 
 		if (DEBUG)
 			log.trace(
-				"The identifier is {} in {} ({}-{}) {}",
+				"Identifier is {} in {} ({}-{}) {}",
 				id.toString(),
 				this.getTextSigle(),
 				this.getCorpusID(),
@@ -1262,6 +1299,7 @@
                 snippetArray.addClose(element[2]);
             }
 
+			// empty tag
 			else if (element[3] == 2) {
 
 				// Add Empty (pagebreak)
@@ -1349,10 +1387,16 @@
         // Iterate through all remaining elements
         sb.append("<span class=\"match\">");
         for (short i = start; i <= end; i++) {
+
 			elem = this.snippetArray.get(i);
 			// UNTESTED
-			if (elem != null)
-				sb.append(elem.toHTML(this, level, levelCache));
+			if (elem != null) {
+				String elemString = elem.toHTML(this, level, levelCache);
+				if (DEBUG) {
+					log.trace("Add node {}", elemString);
+				};
+				sb.append(elemString);
+			}
         };
         sb.append("</span>");
         sb.append(rightContext);
@@ -1493,23 +1537,44 @@
 			else if (openList.peekFirst()[0] < closeList.peekFirst()[1]) {
 
 				if (DEBUG)
-					log.debug("Open starts before close ends");
+					log.debug("Open tag starts before close tag ends");
 
                 int[] e = openList.removeFirst().clone();
 
 				// Mark as opener
                 e[3] = 1;
 
+				if (DEBUG) {
+
+					//      -1: match
+					//    < -1: relation target
+					// >= 2048: relation source
+					// >=  256: annotation
+					
+					log.trace(
+						"Add open with number {} to stack at {}-{}",
+						e[2], e[0], e[1]
+						);
+				};
+
 				// Add opener to stack
                 stack.add(e);
             }
 
 			else {
-				if (DEBUG)
+				int[] e = closeList.removeFirst();
+				
+				if (DEBUG) {
 					log.debug("Close ends before open");
 
+					log.trace(
+						"Add close with number {} to stack at {}-{}",
+						e[2], e[0], e[1]
+						);
+				};
+
 				// Add closener to stack
-                stack.add(closeList.removeFirst());
+                stack.add(e);
             };
         };
         return stack;
@@ -1854,7 +1919,7 @@
     // Yeah ... I mean ... why not?
     private void _filterMultipleIdentifiers () {
         ArrayList<Integer> removeDuplicate = new ArrayList<>(10);
-        HashSet<Integer> identifiers = new HashSet<>(20);
+        HashSet<String> identifiers = new HashSet<>(20);
         for (int i = 0; i < this.span.size(); i++) {
 
             // span is an int array: [Start, End, Number, Dummy]
@@ -1864,7 +1929,8 @@
             if (highlightNumber < -1) {
 
                 // Get the real identifier
-                int idNumber = identifierNumber.get(highlightNumber);
+                String idNumber =
+					identifierNumber.get(highlightNumber);
                 if (identifiers.contains(idNumber)) {
                     removeDuplicate.add(i);
                 }
@@ -1889,7 +1955,7 @@
      * Get identifier based on class number
      */
     @JsonIgnore
-    public int getClassID (int nr) {
+    public String getClassID (int nr) {
         return this.identifierNumber.get(nr);
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
index 296fc33..0d22c0c 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
@@ -17,7 +17,7 @@
     private final static Logger log = LoggerFactory.getLogger(Match.class);
 
     // This advices the java compiler to ignore all loggings
-    public static final boolean DEBUG = false;
+    public static final boolean DEBUG = true;
 
     private LinkedList<HighlightCombinatorElement> combine;
     private Stack<Integer> balanceStack = new Stack<>();
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 93e4ff2..a74ba24 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
@@ -69,6 +69,7 @@
                 sb.append("<mark>");
             }
 
+			// This is a relation target
             else if (this.number < -1) {
                 sb.append("<span xml:id=\"")
                         .append(escapeHTML(
@@ -76,6 +77,7 @@
                         .append("\">");
             }
 
+			// This is an annotation
             else if (this.number >= 256) {
                 sb.append("<span ");
                 if (this.number < 2048) {
@@ -84,6 +86,8 @@
                                     match.getAnnotationID(this.number)))
                             .append('"');
                 }
+
+				// This is a relation source
                 else {
                     Relation rel = match.getRelationID(this.number);
 
@@ -101,7 +105,8 @@
                 sb.append('>');
             }
 
-            // Highlight - < 256
+            // This is a highlight
+			// < 256
             else {
                 // Get the first free level slot
                 byte pos;
@@ -119,7 +124,7 @@
             return sb.toString();
         }
 
-        // Closing
+        // This is a Closing tag
         else if (this.type == 2) {
             if (this.number < -1 || this.number >= 256)
                 return "</span>";
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 2528735..bca8731 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -15,6 +15,7 @@
       <AppenderRef ref="Console"/>
     </Logger>
     <Logger name="de.ids_mannheim.korap.KrillIndex"
+            additivity="false"
             level="trace">
       <AppenderRef ref="Console"/>
     </Logger>
