diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
index 91b85bf..9dcdbd5 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
@@ -50,6 +50,16 @@
     private int currentDoc, currentPosition;
     private boolean isFinish;
 
+	public static enum PayloadTypeIdentifier {
+		TERM_ATTRIBUTE(16), ELEMENT_ATTRIBUTE(17), RELATION_ATTRIBUTE(18);
+
+		private int value;
+
+		private PayloadTypeIdentifier(int value) {
+			this.value = value;
+		}
+	}
+
     protected Logger logger = LoggerFactory.getLogger(AttributeSpans.class);
 
 
@@ -154,24 +164,25 @@
      */
     private CandidateAttributeSpan createCandidateSpan () throws IOException {
         List<byte[]> payload = (List<byte[]>) firstSpans.getPayload();
-        ByteBuffer wrapper = ByteBuffer.wrap(payload.get(0));
+		ByteBuffer payloadBuffer = ByteBuffer.wrap(payload.get(0));
 
-        short spanId;
-        int start = 0, end;
+		byte payloadTypeIdentifier = payloadBuffer.get(0);
+		short spanId = payloadBuffer.getShort(5);
+		// if (payload.get(0).length == 6) {
+		int end = payloadBuffer.getInt(1);
 
-        if (payload.get(0).length == 6) {
-            end = wrapper.getInt(0);
-            spanId = wrapper.getShort(4);
-            return new CandidateAttributeSpan(firstSpans, spanId, end);
-        }
-        else if (payload.get(0).length == 10) {
-            start = wrapper.getInt(0);
-            end = wrapper.getInt(4);
-            spanId = wrapper.getShort(8);
-            return new CandidateAttributeSpan(firstSpans, spanId, start, end);
-        }
+		return new CandidateAttributeSpan(firstSpans, payloadTypeIdentifier,
+				spanId, end);
 
-        throw new NullPointerException("Missing element end in payloads.");
+		// }
+		// else if (payload.get(0).length == 10) {
+		// start = wrapper.getInt(0);
+		// end = wrapper.getInt(4);
+		// spanId = wrapper.getShort(8);
+		// return new CandidateAttributeSpan(firstSpans, spanId, start, end);
+		// }
+
+		// throw new NullPointerException("Missing element end in payloads.");
     }
 
 
@@ -235,9 +246,6 @@
     class CandidateAttributeSpan extends CandidateSpan implements
             Comparable<CandidateSpan> {
 
-        private short spanId;
-
-
         /**
          * Construct a CandidateAttributeSpan based on the given span,
          * spanId,
@@ -258,32 +266,23 @@
          *            belongs to.
          * @throws IOException
          */
-        public CandidateAttributeSpan (Spans span, short spanId, int elementEnd)
+		public CandidateAttributeSpan(Spans span, byte payloadTypeIdenfitier,
+				short spanId, int elementEnd)
                 throws IOException {
             super(span);
-            setSpanId(spanId);
+			this.spanId = spanId;
             this.end = elementEnd;
+			this.payloadTypeIdentifier = payloadTypeIdenfitier;
         }
 
 
-        public CandidateAttributeSpan (Spans span, short spanId, int start,
-                                       int end) throws IOException {
-            super(span);
-            setSpanId(spanId);
-            this.start = start;
-            this.end = end;
-        }
-
-
-        public void setSpanId (short spanId) {
-            this.spanId = spanId;
-        }
-
-
-        public short getSpanId () {
-            return spanId;
-        }
-
+		// public CandidateAttributeSpan (Spans span, short spanId, int start,
+		// int end) throws IOException {
+		// super(span);
+		// setSpanId(spanId);
+		// this.start = start;
+		// this.end = end;
+		// }
 
         @Override
         public int compareTo (CandidateSpan o) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpan.java b/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpan.java
index 8198195..1411f60 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpan.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpan.java
@@ -28,6 +28,7 @@
     private int leftStart, leftEnd;
     private int rightStart, rightEnd;
 
+	protected byte payloadTypeIdentifier;
 
     /**
      * Constructs a CandidateSpan for the given Span.
@@ -359,7 +360,15 @@
     }
 
 
-    @Override
+	public byte getPayloadTypeIdentifier() {
+		return payloadTypeIdentifier;
+	}
+
+	public void setPayloadTypeIdentifier(byte payloadTypeIdentifier) {
+		this.payloadTypeIdentifier = payloadTypeIdentifier;
+	}
+
+	@Override
     public int compareTo (CandidateSpan o) {
         if (this.doc == o.doc) {
             if (this.getStart() == o.getStart()) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
index 49ac41e..597f322 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
@@ -80,6 +80,9 @@
 
     @Override
     public boolean next () throws IOException {
+        if (!hasMoreSpans || !(hasMoreSpans = termSpans.next()))
+            return false;
+        
 		isStartEnumeration = false;
 		this.matchPayload = null;
 		matchEndPosition = -1;
@@ -87,8 +90,7 @@
 	};
 
 	private boolean advance() throws IOException {
-		if (!hasMoreSpans || !(hasMoreSpans = termSpans.next()))
-			return false;
+		
 
 		this.matchStartPosition = termSpans.start();
 		this.matchDocNumber = termSpans.doc();		
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
index ceee21d..9ec7b4d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -36,33 +36,33 @@
         fd.addTV(
                 "base",
                 "bcbabd",
-				"[(0-1)s:a|_1#0-1|"						
+				"[(0-1)s:a|_1$<i>0<i>1|"
 				+ "<>:div$<b>65<i>0<i>2<i>2<b>0<s>2|"
 				+ "<>:div$<b>65<i>0<i>3<i>3<b>0<s>1|"
 				+ "<>:s$<b>65<i>0<i>5<i>5<b>0<s>3|"
-				+ "@:class=header$<i>3<s>1|@:class=header$<i>2<s>2]"
+						+ "@:class=header$<b>17<i>3<s>1|@:class=header$<b>17<i>2<s>2]"
 
-				+ "[(1-2)s:e|_2#1-2|"
-				+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>1|@:class=header$<i>2<s>1]"
+						+ "[(1-2)s:e|_2$<i>1<i>2|"
+						+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<i>2<s>1]"
   
-				+ "[(2-3)s:e|_3#2-3|"
-				+ "<>:div$<b>65<i>2<i>5<i>5<b>0<s>1|@:class=time$<i>5<s>1]"
+						+ "[(2-3)s:e|_3$<i>2<i>3|"
+						+ "<>:div$<b>65<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<i>5<s>1]"
   
-				+ "[(3-4)s:a|_4#3-4|"
-				+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=header$<i>5<s>1]"
+						+ "[(3-4)s:a|_4$<i>3<i>4|"
+						+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1]"
   
-				+ "[(4-5)s:b|_5#4-5|"
+						+ "[(4-5)s:b|_5$<i>4<i>5|"
 				+ "<>:div$<b>65<i>4<i>5<i>5<b>0<s>1|"
-				+ "<>:a$<b>65<i>4<i>5<i>5<b>0<s>2|@:class=header$<i>5<s>2]"
+						+ "<>:a$<b>65<i>4<i>5<i>5<b>0<s>2|@:class=header$<b>17<i>5<s>2]"
 		  
-				+ "[(5-6)s:d|_6#5-6|"
+						+ "[(5-6)s:d|_6$<i>5<i>6|"
 				+ "<>:s$<b>65<i>5<i>6<i>6<b>0<s>1|"
-				+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>2|@:class=header$<i>6<s>1]"
+						+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>2|@:class=header$<b>17<i>6<s>1]"
   
-				+ "[(6-7)s:d|_7#6-7|"
+						+ "[(6-7)s:d|_7$<i>6<i>7|"
 				+ "<>:div$<b>65<i>6<i>7<i>7<b>0<s>1"
 				+ "<>:s$<b>65<i>6<i>7<i>7<b>0<s>2|"
-				+ "|@:class=header$<i>7<s>1|@:class=header$<i>7<s>2]");
+						+ "|@:class=header$<b>17<i>7<s>1|@:class=header$<b>17<i>7<s>2]");
 
         return fd;
     }
@@ -74,24 +74,27 @@
         fd.addTV(
                 "base",
                 "bcbabd",
-				"[(0-1)s:b|_1#0-1|"
-						+ "<>:div$<b>65<i>0<i>3<i>3<b>0<s>1|@:class=header$<i>3<s>1|@:class=title$<i>3<s>1|@:class=book$<i>3<s>1]"
+				"[(0-1)s:b|_1$<i>0<i>1|"
+						+ "<>:div$<b>65<i>0<i>3<i>3<b>0<s>1|"
 						+ "<>:s<b>65<i>0<i>5<i>5<b>0<s>2|"
-						+ "[(1-2)s:c|_2#1-2|"
-						+ "<>:div$<b>65<i>1<i>2<i>2<b>0<s>1|@:class=header$<i>2<s>1|@:class=title$<i>2<s>1]"
-						+ "[(2-3)s:b|_3#2-3|"
-						+ "<>:div$<b>65<i>2<i>3<i>5<b>0<s>1|@:class=book$<i>5<s>1]"
-						+ "[(3-4)s:a|_4#3-4|"
-						+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=title$<i>5<s>1]"
-						+ "[(4-5)s:b|_5#4-5|"
-						+ "<>:div$<b>65<i>4<i>5<i>5<b>0<s>1|@:class=header$<i>5<s>1|@:class=book$<i>5<s>1|@:class=title$<i>5<s>1]"
-						+ "[(5-6)s:d|_6#5-6|"						
-						+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>1|@:class=header$<i>6<s>1]"
+						+ "@:class=header$<b>17<i>3<s>1|@:class=title$<b>17<i>3<s>1|@:class=book$<b>17<i>3<s>1]"
+						+ "[(1-2)s:c|_2$<i>1<i>2|"
+						+ "<>:div$<b>65<i>1<i>2<i>2<b>0<s>1|"
+						+ "@:class=header$<b>17<i>2<s>1|@:class=title$<b>17<i>2<s>1]"
+						+ "[(2-3)s:b|_3$<i>2<i>3|"
+						+ "<>:div$<b>65<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<i>5<s>1]"
+						+ "[(3-4)s:a|_4$<i>3<i>4|"
+						+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+						+ "[(4-5)s:b|_5$<i>4<i>5|"
+						+ "<>:div$<b>65<i>4<i>5<i>5<b>0<s>1|"
+						+ "@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1|@:class=title$<b>17<i>5<s>1]"
+						+ "[(5-6)s:d|_6$<i>5<i>6|"
+						+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
 						+ "<>:s$<b>65<i>5<i>6<i>6<b>0<s>2|"
-						+ "[(6-7)s:d|_7#6-7|"
+						+ "[(6-7)s:d|_7$<i>6<i>7|"
 						+ "<>:div$<b>65<i>6<i>7<i>7<b>0<s>1|"
 						+ "<>:s$<b>65<i>6<i>7<i>7<b>0<s>2|"
-						+ "@:class=header$<i>7<s>1|@:class=title$<i>7<s>1]");
+						+ "@:class=header$<b>17<i>7<s>1|@:class=title$<b>17<i>7<s>1]");
 
         return fd;
     }
@@ -103,26 +106,27 @@
         fd.addTV(
                 "base",
                 "bcbabd",
-				"[(0-1)s:b|_1#0-1|"
+				"[(0-1)s:b|_1$<i>0<i>1|"
 						+ "<>:s$<b>65<i>0<i>5<i>5<b>0<s>1|"
-						+ "<>:div$<b>65<i>0<i>3<i>3<b>0<s>2|@:class=header$<i>3<s>2|@:class=book$<i>5<s>1|@:class=book$<i>3<s>2]"
-						+ "[(1-2)s:e|_2#1-2|"
+						+ "<>:div$<b>65<i>0<i>3<i>3<b>0<s>2|"
+						+ "@:class=header$<b>17<i>3<s>2|@:class=book$<b>17<i>5<s>1|@:class=book$<b>17<i>3<s>2]"
+						+ "[(1-2)s:e|_2$<i>1<i>2|"
 						+ "<>:div$<b>65<i>1<i>2<i>2<b>0<s>1|"
-						+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>2|@:class=book$<i>2<s>2|@:class=header$<i>2<s>1]"
-						+ "[(2-3)s:b|_3#2-3|"
+						+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>2|@:class=book$<b>17<i>2<s>2|@:class=header$<b>17<i>2<s>1]"
+						+ "[(2-3)s:b|_3$<i>2<i>3|"
 						+ "<>:div$<b>65<i>2<i>3<i>5<b>0<s>1|"
-						+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>2|@:class=header$<i>2<s>2|@:class=book$<i>5<s>1]"
-						+ "[(3-4)s:a|_4#3-4|"
-						+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=title$<i>5<s>1]"
-						+ "[(4-5)s:b|_5#4-5|"
-						+ "<>:div$<b>65<i>4<i>5<i>5<b>0<s>1|@:class=header$<i>5<s>1|@:class=book$<i>5<s>1]"
-						+ "[(5-6)s:d|_6#5-6|"
+						+ "<>:a$<b>65<i>1<i>2<i>2<b>0<s>2|@:class=header$<b>17<i>2<s>2|@:class=book$<b>17<i>5<s>1]"
+						+ "[(3-4)s:a|_4$<i>3<i>4|"
+						+ "<>:div$<b>65<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+						+ "[(4-5)s:b|_5$<i>4<i>5|"
+						+ "<>:div$<b>65<i>4<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1]"
+						+ "[(5-6)s:d|_6$<i>5<i>6|"
 						+ "<>:s$<b>65<i>5<i>6<i>6<b>0<s>1|"
-						+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>1|@:class=header$<i>6<s>1]"
-						+ "[(6-7)s:d|_7#6-7|"
+						+ "<>:div$<b>65<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
+						+ "[(6-7)s:d|_7$<i>6<i>7|"
 						+ "<>:div$<b>65<i>6<i>7<i>7<b>0<s>1|"
 						+ "<>:s$<b>65<i>6<i>7<i>7<b>0<s>2|"
-						+ "@:class=header$<i>7<s>1|@:class=book$<i>7<s>2]");
+						+ "@:class=header$<b>17<i>7<s>1|@:class=book$<b>17<i>7<s>2]");
 
         return fd;
     }
@@ -317,7 +321,13 @@
                 new SpanElementQuery("base", "div"), sql, true);
 
         kr = ki.search(sq, (short) 10);
-        assertEquals((long) 6, kr.getTotalResults());
+
+        // for (int i = 0; i < kr.getTotalResults(); i++) {
+        // System.out.println(kr.getMatch(i).getLocalDocID() + " "
+        // + kr.getMatch(i).startPos + " " + kr.getMatch(i).endPos);
+        // }
+
+		assertEquals((long) 6, kr.getTotalResults());
 
         SpanNextQuery snq = new SpanNextQuery(new SpanTermQuery(new Term(
                 "base", "s:e")), sq);
@@ -383,10 +393,6 @@
         assertEquals(4, kr.getMatch(1).getStartPos());
         assertEquals(5, kr.getMatch(1).getEndPos());
 
-        //		for (int i = 0; i < kr.getTotalResults(); i++) {
-        //			System.out.println(kr.getMatch(i).getLocalDocID() + " "
-        //					+ kr.getMatch(i).startPos + " " + kr.getMatch(i).endPos);
-        //		}
     }
 
 
