diff --git a/src/main/java/de/ids_mannheim/korap/index/TermInfo.java b/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
index 3f132c2..eb8472e 100644
--- a/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
+++ b/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
@@ -183,6 +183,8 @@
 				this.targetStartPos = this.payload.getInt();
 				this.targetEndPos   = this.payload.getInt();
 			}
+
+			// Span to token
 			else if (pti == 34) {
                 /*
 				 * 1 byte for PTI (34), 
@@ -192,6 +194,11 @@
 				 * 1 integer for end position of the right part, and 
 				 * and 0-3 TUIs as above.
 				 */
+
+				// Ignore offsets
+				this.payload.getInt();
+				this.endPos = this.payload.getInt();
+				this.targetStartPos = this.payload.getInt();
 			}
 			else if (pti == 35) {
 				/*
@@ -205,6 +212,16 @@
 				 * 1 integer for end position of the right part, 
 				 * and 0-3 TUIs as above.
 				 */
+
+				// Ignore offsets
+				this.payload.getInt();
+				this.payload.getInt();
+				this.payload.getInt();
+				this.payload.getInt();
+
+				this.endPos = this.payload.getInt();
+				this.targetStartPos = this.payload.getInt();
+				this.targetEndPos = this.payload.getInt();
 			}
             else {
                 this.endPos = this.payload.getInt() - 1;
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 7b9e09d..7d6670e 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -216,12 +216,12 @@
         public int number = -1;
 
         // Relational highlight
-        public Highlight (int start, int end, String annotation, int ref) {
+        public Highlight (int start, int end, String annotation, int refStart, int refEnd) {
             this.start = start;
             this.end = end;
             // TODO: This can overflow!
             this.number = relationNumberCounter++;
-            relationNumber.put(this.number, new Relation(annotation, ref));
+            relationNumber.put(this.number, new Relation(annotation, refStart, refEnd));
         };
 
 
@@ -438,10 +438,10 @@
 
 		if (srcEnd == -1) {
 			// Add source token
-			this.addHighlight(new Highlight(srcStart, srcStart, annotation, targetStart));
+			this.addHighlight(new Highlight(srcStart, srcStart, annotation, targetStart, targetEnd));
 		}
 		else {
-			this.addHighlight(new Highlight(srcStart, srcEnd, annotation, targetStart));
+			this.addHighlight(new Highlight(srcStart, srcEnd, annotation, targetStart, targetEnd));
 		};
 
         int id = identifierNumberCounter--;
@@ -684,15 +684,27 @@
         return id;
     };
 
-
     /**
      * Get identifier for a specific position.
      * 
      * @param int
      *            Position to get identifier on.
      */
-    @JsonIgnore
+	@JsonIgnore
     public String getPosID (int pos) {
+		return this.getPosID(pos, -1);
+	};
+
+    /**
+     * Get identifier for a specific position.
+     * 
+     * @param int
+     *            Start position to get identifier on.
+     * @param int
+     *            End position to get identifier on.
+     */
+    @JsonIgnore
+		public String getPosID (int start, int end) {
 
 		if (DEBUG)
 			log.trace("Retrieve the identifier for pos");
@@ -713,7 +725,8 @@
         id.setDocID(this.getDocID());
 		// </legacy>
         id.setTextSigle(this.getTextSigle());
-        id.setPos(pos);
+        id.setStart(start);
+        id.setEnd(end);
 
 		if (DEBUG)
 			log.trace(
@@ -722,7 +735,7 @@
 				this.getTextSigle(),
 				this.getCorpusID(),
 				this.getDocID(),
-				pos
+				start
 				);
 
         return id.toString();
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 9270847..93e4ff2 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
@@ -89,14 +89,14 @@
 
 					if (DEBUG) {
 						log.trace("Annotation is a relation with id {}", this.number);
-						log.trace("Resulting in relation {}: {}", rel.annotation, rel.ref);
+						log.trace("Resulting in relation {}: {}-{}", rel.annotation, rel.refStart, rel.refEnd);
 					};
 
                     sb.append("xlink:title=\"")
-                            .append(escapeHTML(rel.annotation))
-                            .append("\" xlink:type=\"simple\" xlink:href=\"#")
-                            .append(escapeHTML(match.getPosID(rel.ref)))
-                            .append('"');
+						.append(escapeHTML(rel.annotation))
+						.append("\" xlink:type=\"simple\" xlink:href=\"#")
+						.append(escapeHTML(match.getPosID(rel.refStart, rel.refEnd)))
+						.append('"');
                 };
                 sb.append('>');
             }
@@ -168,7 +168,10 @@
                     else {
                         Relation rel = match.getRelationID(this.number);
                         sb.append(rel.annotation);
-                        sb.append('>').append(rel.ref);
+                        sb.append('>').append(rel.refStart);
+
+						if (rel.refEnd != -1)
+							sb.append('-').append(rel.refEnd);
                     };
                     sb.append(':');
                 }
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/PosIdentifier.java b/src/main/java/de/ids_mannheim/korap/response/match/PosIdentifier.java
index a7f7729..f854b0d 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/PosIdentifier.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/PosIdentifier.java
@@ -3,21 +3,29 @@
 import java.util.*;
 
 public class PosIdentifier extends DocIdentifier {
-    private int pos;
+    private int start = -1;
+	private int end = -1;
 
     public PosIdentifier () {};
 
 
-    public void setPos (int pos) {
+    public void setStart (int pos) {
         if (pos >= 0)
-            this.pos = pos;
+            this.start = pos;
     };
 
-
-    public int getPos () {
-        return this.pos;
+    public int getStart () {
+        return this.start;
     };
 
+	public void setEnd (int pos) {
+        if (pos >= 0)
+            this.end = pos;
+    };
+
+	public int getEnd () {
+        return this.end;
+    };
 
     public String toString () {
         if (this.textSigle == null && this.docID == null)
@@ -40,7 +48,9 @@
 		};
 
         sb.append("-p");
-        sb.append(this.pos);
+        sb.append(this.getStart());
+		if (this.getEnd() != -1)
+			sb.append("-").append(this.end);
 
         return sb.toString();
     };
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/Relation.java b/src/main/java/de/ids_mannheim/korap/response/match/Relation.java
index fc34b23..c54a3d8 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/Relation.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/Relation.java
@@ -4,12 +4,13 @@
  * Class for relational highlights.
  */
 public class Relation {
-    public int ref;
+    public int refStart;
+	public int refEnd;
     public String annotation;
 
-
-    public Relation (String annotation, int ref) {
+    public Relation (String annotation, int refStart, int refEnd) {
         this.annotation = annotation;
-        this.ref = ref;
+        this.refStart = refStart;
+        this.refEnd = refEnd;
     };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
index f6c6bf5..20c680d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -103,13 +103,27 @@
         PosIdentifier id = new PosIdentifier();
         id.setCorpusID("c1");
         id.setDocID("d1");
-        id.setPos(8);
+        id.setStart(8);
         assertEquals(id.getCorpusID(), "c1");
         assertEquals(id.getDocID(), "d1");
-        assertEquals(id.getPos(), 8);
+        assertEquals(id.getStart(), 8);
         assertEquals(id.toString(), "token-c1!d1-p8");
     };
 
+	@Test
+    public void posIdentifierExample2 () throws IOException {
+        PosIdentifier id = new PosIdentifier();
+        id.setCorpusID("c1");
+        id.setDocID("d1");
+        id.setStart(8);
+        id.setEnd(12);
+        assertEquals(id.getCorpusID(), "c1");
+        assertEquals(id.getDocID(), "d1");
+        assertEquals(id.getStart(), 8);
+        assertEquals(id.getEnd(), 12);
+        assertEquals(id.toString(), "token-c1!d1-p8-12");
+    };
+
 
     @Test
     public void indexExample1 () throws IOException {
