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 1411f60..7490dec 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
@@ -23,7 +23,9 @@
     private int position;
     private CandidateSpan childSpan; // used for example for multiple distance
                                      // with unordered constraint
-    protected short spanId;
+	protected short spanId;
+	protected boolean hasSpanId;
+
     private short leftId, rightId;
     private int leftStart, leftEnd;
     private int rightStart, rightEnd;
@@ -50,9 +52,11 @@
         if (span instanceof SimpleSpans) {
             SimpleSpans temp = (SimpleSpans) span;
             this.spanId = temp.getSpanId();
+			this.hasSpanId = temp.hasSpanId;
         }
         else if (span instanceof ClassSpans) {
             this.spanId = ((ClassSpans) span).getNumber();
+			this.hasSpanId = true;
         }
     }
 
@@ -297,6 +301,8 @@
      */
     public void setSpanId (short spanId) {
         this.spanId = spanId;
+		if (spanId > 0)
+			this.hasSpanId = true;
     }
 
 
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 6ec374e..b73f186 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
@@ -121,6 +121,7 @@
 			// silently setting empty element and payload
             this.matchEndPosition = this.matchStartPosition;
             this.setSpanId((short) -1);
+			this.hasSpanId = false;
             this.matchPayload = null;
             return;
 		}
@@ -141,6 +142,7 @@
 			}
             else {
                 this.setSpanId((short) -1);
+				this.hasSpanId = false;
             }
 
 			// FIX ME
@@ -152,6 +154,7 @@
 
         this.matchEndPosition = this.matchStartPosition;
         this.setSpanId((short) -1);
+		this.hasSpanId = false;
         this.matchPayload = null;
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/RelationSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/RelationSpans.java
index 02d9656..72cfc82 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/RelationSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/RelationSpans.java
@@ -127,8 +127,8 @@
                 this.matchEndPosition = cs.getEnd();
                 this.matchPayload = cs.getPayloads();
                 this.setRightStart(cs.getRightStart());
-                this.setRightEnd(cs.getRightEnd());
-                this.spanId = cs.getSpanId(); // relation id
+				this.setRightEnd(cs.getRightEnd());
+				this.spanId = cs.getSpanId(); // relation id
                 this.leftId = cs.getLeftId();
                 this.rightId = cs.getRightId();
                 candidateList.remove(0);
@@ -193,12 +193,22 @@
             cs.setLeftEnd(cs.start + 1);
             cs.setRightStart(i);
             cs.setRightEnd(i + 1);
+			cs.setLeftId(bb.getShort(5)); // left id
+			cs.setRightId(bb.getShort(7)); // right id
+			if (length > 9) {
+				cs.setSpanId(bb.getShort(9)); // relation id
+			}
         }
         else if (payloadTypeIdentifier == PayloadTypeIdentifier.TERM_TO_ELEMENT.value) { // length
             // 15
             cs.setLeftEnd(cs.start + 1);
             cs.setRightStart(bb.getInt(1));
             cs.setRightEnd(bb.getInt(5));
+			cs.setLeftId(bb.getShort(9)); // left id
+			cs.setRightId(bb.getShort(11)); // right id
+			if (length > 13) {
+				cs.setSpanId(bb.getShort(13)); // relation id
+			}
         }
         else if (payloadTypeIdentifier == PayloadTypeIdentifier.ELEMENT_TO_TERM.value) { // length
             // 15
@@ -207,17 +217,26 @@
             i = bb.getInt(5);
             cs.setRightStart(i);
             cs.setRightEnd(i + 1);
+			cs.setLeftId(bb.getShort(9)); // left id
+			cs.setRightId(bb.getShort(11)); // right id
+			if (length > 13) {
+				cs.setSpanId(bb.getShort(13)); // relation id
+			}
         }
         else if (payloadTypeIdentifier == PayloadTypeIdentifier.ELEMENT_TO_ELEMENT.value) {
+			// length 19
             cs.setEnd(bb.getInt(1));
             cs.setLeftEnd(cs.end);
             cs.setRightStart(bb.getInt(5));
             cs.setRightEnd(bb.getInt(9));
-        }
+			cs.setLeftId(bb.getShort(13)); // left id
+			cs.setRightId(bb.getShort(15)); // right id
+			if (length > 17) {
+				cs.setSpanId(bb.getShort(17)); // relation id
+			}
+		}
 
-        cs.setRightId(bb.getShort(length - 2)); //right id
-        cs.setLeftId(bb.getShort(length - 4)); //left id
-        cs.setSpanId(bb.getShort(length - 6)); //relation id
+
         // Payload is cleared.
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/SpansWithAttribute.java b/src/main/java/de/ids_mannheim/korap/query/spans/SpansWithAttribute.java
index c38b332..e58f59d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/SpansWithAttribute.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/SpansWithAttribute.java
@@ -238,8 +238,12 @@
      */
     private boolean searchSpanPosition () throws IOException {
         while (hasMoreSpans) {
-            if (referentSpans.getSpanId() < 1) { // the element does not have an attribute
-                hasMoreSpans = referentSpans.next();
+			// the element does not have an attribute
+			if (referentSpans.getSpanId() < 1) {
+				if (attributeList.size() == 0 || notAttributeList.size() > 0) {
+					return true;
+				}
+				hasMoreSpans = referentSpans.next();
                 continue;
             }
             if (checkAttributeListPosition()) {
