diff --git a/Changes b/Changes
index cdf8c49..5407915 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,10 @@
-0.59.2 2020-06-17
+0.59.2 2020-06-18
     - [feature] Add fingerprint method to index (diewald)
     - [bugfix] Fix deserialization of spans with attributes (diewald)
+    - [bugfix] Change order of attribute payloads in attribute queries
+      (diewald)
+      Warning: This may break compatibility for attribute queries
+               in indices not created using KorAP::XML::Krill.
 
 0.59.1 2020-04-08
     - [bugfix] Fix bug in classed group queries (diewald)
diff --git a/misc/payloads.md b/misc/payloads.md
index 1839543..234a97b 100644
--- a/misc/payloads.md
+++ b/misc/payloads.md
@@ -194,7 +194,7 @@
 
 For example:
 
-    @:class=header$<b>17<i>6<s>1
+    @:dereko/s:mode:direct$<b>17<s>1<i>6
 
 means the attribute belongs to the span in the
 same token position whose TUI is 1 and end position is 6.
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 8853064..0bcde58 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -319,11 +319,19 @@
 
                 // Term has attribute
                 if (json.has("attr")) {
+
+                    JsonNode wrap = json.get("wrap");
                     JsonNode attrNode = json.get("attr");
+                    if (wrap.has("foundry")) {
+                        ((ObjectNode)attrNode).put("foundry", wrap.get("foundry"));
+                    };
+                    if (wrap.has("layer")) {
+                        ((ObjectNode)attrNode).put("layer", wrap.get("layer"));
+                    };
                     ((ObjectNode)json.get("wrap")).put("attr",attrNode);
                 };
                 
-                // Get wrapped token
+// Get wrapped token
                 return this._segFromJson(json.get("wrap"));
 
             case "koral:span":                
@@ -340,7 +348,15 @@
 
                 // Term has attribute
                 if (json.has("attr")) {
+
+                    JsonNode wrap = json.get("wrap");
                     JsonNode attrNode = json.get("attr");
+                    if (wrap.has("foundry")) {
+                        ((ObjectNode)attrNode).put("foundry", wrap.get("foundry"));
+                    };
+                    if (wrap.has("layer")) {
+                        ((ObjectNode)attrNode).put("layer", wrap.get("layer"));
+                    };
                     ((ObjectNode)json.get("wrap")).put("attr",attrNode);
                 };
                 
@@ -609,7 +625,7 @@
             }
             else{
                 relationTermWrapper =
-                        _termFromJson(relation.get("wrap"), false, direction);
+                    _termFromJson(relation.get("wrap"), false, false, direction);
                 spanRelationWrapper = new SpanRelationWrapper(relationTermWrapper, operand1, operand2);
             }
             
@@ -1121,16 +1137,22 @@
 
     private SpanQueryWrapper _termFromJson (JsonNode json)
             throws QueryException {
-        return this._termFromJson(json, false, null);
+        return this._termFromJson(json, false, false, null);
     }
     private SpanQueryWrapper _termFromJson (JsonNode json, boolean isSpan)
             throws QueryException {
-        return this._termFromJson(json, isSpan, null);
+        return this._termFromJson(json, isSpan, false, null);
     }
 
+    // Attribute term
+    private SpanQueryWrapper _termFromJson (JsonNode json, boolean isSpan, boolean isAttr)
+            throws QueryException {
+        return this._termFromJson(json, isSpan, true, null);
+    }
+    
     // Deserialize koral:term
     // TODO: Not optimal as it does not respect non-term
-    private SpanQueryWrapper _termFromJson (JsonNode json, boolean isSpan, RelationDirection direction)
+    private SpanQueryWrapper _termFromJson (JsonNode json, boolean isSpan, boolean isAttr, RelationDirection direction)
             throws QueryException {
 
         if (!json.has("@type")) {
@@ -1204,7 +1226,9 @@
 
         if (direction != null)
             value.append(direction.value());
-            
+        else if (isAttr)
+            value.append("@:");
+        
         if (json.has("foundry") &&
             json.get("foundry").asText().length() > 0) {
             value.append(json.get("foundry").asText()).append('/');
@@ -1467,7 +1491,7 @@
         if ("relation:and".equals(relation)) {
             List<SpanQueryWrapper> wrapperList = new ArrayList<SpanQueryWrapper>();
             for (JsonNode operand : operands) {
-                attrWrapper = _termFromJson(operand);
+                attrWrapper = _termFromJson(operand, false, true);
                 if (attrWrapper == null) {
                     throw new QueryException(747, "Attribute is null");
                 }
@@ -1486,7 +1510,7 @@
             SpanAlterQueryWrapper saq = new SpanAlterQueryWrapper(field);
             SpanWithAttributeQueryWrapper saqw;
             for (JsonNode operand : operands) {
-                attrWrapper = _termFromJson(operand);
+                attrWrapper = _termFromJson(operand, false, true);
                 if (attrWrapper == null) {
                     throw new QueryException(747, "Attribute is null");
                 }
@@ -1512,7 +1536,7 @@
             throws QueryException {
 
         if (attrNode.has("key")) {
-            return _termFromJson(attrNode);
+            return _termFromJson(attrNode, false, true);
         }
         else if (attrNode.has("tokenarity") || attrNode.has("arity")) {
             this.addWarning(770, "Arity attributes are currently not supported"
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 60b177d..efb5535 100644
--- a/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
+++ b/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
@@ -94,7 +94,7 @@
                 // pos
                 this.type = "attr";
                 ttype = 4;
-                tterm = tterm.substring(1);
+                tterm = tterm.substring(2);
                 break;
 
             default:
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 5ee5e75..0e96652 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
@@ -164,8 +164,10 @@
         ByteBuffer payloadBuffer = ByteBuffer.wrap(payload.get(0));
 
         byte payloadTypeIdentifier = payloadBuffer.get(0);
-        short spanId = payloadBuffer.getShort(5);
-        int end = payloadBuffer.getInt(1);
+        // short spanId = payloadBuffer.getShort(5);
+        // int end = payloadBuffer.getInt(1);
+        short spanId = payloadBuffer.getShort(1);
+        int end = payloadBuffer.getInt(3);
 
         return new CandidateAttributeSpan(firstSpans, payloadTypeIdentifier,
                 spanId, end);
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 3fc9ea5..b69bc75 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -2,6 +2,8 @@
 
 import static org.junit.Assert.assertEquals;
 
+import static de.ids_mannheim.korap.TestSimple.*;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -11,13 +13,17 @@
 import org.apache.lucene.search.spans.SpanTermQuery;
 import org.junit.Test;
 
+import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.query.SpanAttributeQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.response.Result;
 
+import de.ids_mannheim.korap.util.QueryException;
+
 public class TestAttributeIndex {
 
     private KrillIndex ki = new KrillIndex();
@@ -37,28 +43,28 @@
                 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>3|"
                 + "<>:div$<b>64<i>0<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>1|"
-                + "@:class=header$<b>17<i>3<s>1|@:class=header$<b>17<i>2<s>2]"
+                + "@:class=header$<b>17<s>1<i>3|@:class=header$<b>17<s>2<i>2]"
 
                 + "[(1-2)s:e|_2$<i>1<i>2|"
-                + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<i>2<s>1]"
+                + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:e|_3$<i>2<i>3|"
-                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:a$<b>64<i>4<i>5<i>5<b>0<s>2|"
                 + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>5<s>2]"
+                + "@:class=header$<b>17<s>2<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>2|"
                 + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
-                + "@:class=header$<b>17<i>6<s>1]"
+                + "@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1"
-                + "|@:class=header$<b>17<i>7<s>1|@:class=header$<b>17<i>7<s>2]");
+                + "|@:class=header$<b>17<s>1<i>7|@:class=header$<b>17<s>2<i>7]");
 
         return fd;
     }
@@ -70,26 +76,26 @@
         fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
                 + "<>:s<b>64<i>0<i>5<i>5<b>0<s>2|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<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]"
+                + "@:class=header$<b>17<s>1<i>3|@:class=title$<b>17<s>1<i>3|@:class=book$<b>17<s>1<i>3]"
 
                 + "[(1-2)s:c|_2$<i>1<i>2|" + "<>:div$<b>64<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]"
+                + "@:class=header$<b>17<s>1<i>2|@:class=title$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:b|_3$<i>2<i>3|"
-                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:div$<b>64<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]"
+                + "@:class=header$<b>17<s>1<i>5|@:class=book$<b>17<s>1<i>5|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>2|"
-                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
+                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
-                + "@:class=header$<b>17<i>7<s>1|@:class=title$<b>17<i>7<s>1]");
+                + "@:class=header$<b>17<s>1<i>7|@:class=title$<b>17<s>1<i>7]");
 
         return fd;
     }
@@ -101,28 +107,28 @@
         fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>2|"
                 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>3<s>2|@:class=book$<b>17<i>5<s>1|@:class=book$<b>17<i>3<s>2]"
+                + "@:class=header$<b>17<s>2<i>3|@:class=book$<b>17<s>1<i>5|@:class=book$<b>17<s>2<i>3]"
 
                 + "[(1-2)s:e|_2$<i>1<i>2|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>1<i>2<i>2<b>0<s>1|"
-                + "@:class=book$<b>17<i>2<s>2|@:class=header$<b>17<i>2<s>1]"
+                + "@:class=book$<b>17<s>2<i>2|@:class=header$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:b|_3$<i>2<i>3|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>2<i>3<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>2<s>2|@:class=book$<b>17<i>5<s>1]"
+                + "@:class=header$<b>17<s>2<i>2|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|"
-                + "<>:div$<b>64<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]"
+                + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|@:class=header$<b>17<s>1<i>5|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
-                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
+                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
-                + "@:class=header$<b>17<i>7<s>1|@:class=book$<b>17<i>7<s>2]");
+                + "@:class=header$<b>17<s>1<i>7|@:class=book$<b>17<s>2<i>7]");
 
         return fd;
     }
@@ -223,6 +229,11 @@
         sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
                 sql, true);
 
+        assertEquals("spanElementWithAttribute(<base:div />, "+
+                     "[spanAttribute(base:@:class=header), "+
+                     "spanAttribute(!base:@:class=book), "+
+                     "spanAttribute(!base:@:class=title)])", sq.toString());
+        
         kr = ki.search(sq, (short) 10);
         assertEquals((long) 1, kr.getTotalResults());
         assertEquals(5, kr.getMatch(0).getStartPos());
@@ -452,4 +463,45 @@
         kr = ki.search(swaq, (short) 10);
     }
 
+
+    @Test
+    public void testAttributeRealIndex () throws QueryException, IOException {
+        // Construct index
+        KrillIndex ki = new KrillIndex();
+        // Indexing test files
+        ki.addDoc(getClass().getResourceAsStream("/others/REDEW-DOC1-00001.json.gz"),
+                    true);
+        ki.commit();
+
+        SpanTermQuery stq = new SpanTermQuery(new Term("tokens", "@:dereko/s:mode:direct"));
+        kr = ki.search(stq, (short) 10);
+        assertEquals((long) 4, kr.getTotalResults());
+        
+
+        SpanAttributeQuery saq = new SpanAttributeQuery(
+            new SpanTermQuery(new Term("tokens", "@:dereko/s:mode:direct")), true);
+
+        SpanElementQuery seq = new SpanElementQuery("tokens", "dereko/s:said");
+
+        // div with @class=header
+        SpanQuery sq = new SpanWithAttributeQuery(seq, saq, true);
+        assertEquals("spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                     "spanAttribute(tokens:@:dereko/s:mode:direct))", sq.toString());
+
+        kr = ki.search(sq, (short) 10);
+        assertEquals((long) 4, kr.getTotalResults());
+
+
+        String filepath = getClass()
+                .getResource(
+                        "/queries/attribute/element-single-attribute-2.jsonld")
+                .getFile();
+
+        SpanQueryWrapper sqw = getJsonQuery(filepath);        
+        Krill krill = new Krill(sqw);
+        assertEquals("spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                     "spanAttribute(tokens:@:dereko/s:mode:direct))", krill.getSpanQuery().toString());
+        Result kr = krill.apply(ki);
+        assertEquals(kr.getTotalResults(), 4);
+    }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
index 8f50f41..e232499 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -161,8 +161,8 @@
                         + "<:child-of$<b>35<i>0<i>38<i>0<i>3<i>7<i>0<i>1<s>2<s>3<s>0|"
                         + "<:child-of$<b>35<i>0<i>38<i>4<i>9<i>7<i>1<i>7<s>2<s>2<s>0|"
                         + "<:dep$<b>32<i>0<s>1<s>1<s>0|"
-                        + "@:func=sbj$<b>18<i>7<s>4|" // attribute belongs to a relation
-                        + "@:case=nominative$<b>18<i>1<s>3]" // attribute belongs to a relation node
+                        + "@:func=sbj$<b>18<s>4<i>7|" // attribute belongs to a relation
+                        + "@:case=nominative$<b>18<s>3<i>1]" // attribute belongs to a relation node
 
                         + "[(1-2)s:kaufe|_1$<i>4<i>9|pos:V$<s>1|<>:vp$<b>64<i>4<i>38<i>7<b>0<s>2|"
                         + ">:child-of$<b>35<i>4<i>38<i>0<i>38<i>7<i>0<i>7<s>2<s>2<s>0|"
@@ -185,16 +185,16 @@
                         + "<:child-of$<b>35<i>10<i>38<i>21<i>38<i>7<i>4<i>7<s>4<s>2<s>0|"
                         + ">:parent-of$<b>35<i>10<i>38<i>21<i>38<i>7<i>4<i>7<s>4<s>2<s>0|"
                         + "<:dep$<b>32<i>3<s>1<s>1<s>3|"
-                        + "@:func=head$<b>18<i>4<s>3|"
-                        + "@:case=accusative$<b>18<i>4<s>3|" // attribute belongs to a relation node
-                        + "@:case=accusative$<b>18<i>7<s>2]" // attribute belongs to a relation node
+                        + "@:func=head$<b>18<s>3<i>4|"
+                        + "@:case=accusative$<b>18<s>3<i>4|" // attribute belongs to a relation node
+                        + "@:case=accusative$<b>18<s>2<i>7]" // attribute belongs to a relation node
 
                         + "[(3-4)s:Blümen|_3$<i>14<i>20|pos:NN$<s>1|"
                         + ">:child-of$<b>33<i>10<i>24<i>2<i>4<s>1<s>3<s>0|"
                         + "<:dep$<b>32<i>1<s>1<s>1<s>0|"
                         + ">:dep$<b>32<i>2<s>1<s>1<s>2|"
                         + ">:dep$<b>32<i>4<s>1<s>1<s>0|"
-                        + "@:func=obj$<b>18<i>4<s>2]"
+                        + "@:func=obj$<b>18<s>2<i>4]"
 
                         + "[(4-5)s:für|_4$<i>21<i>24|pos:PREP$<s>1|<>:pp$<b>64<i>21<i>38<i>7<b>0<s>2|"
                         + ">:child-of$<b>33<i>21<i>38<i>4<i>7<s>1<s>2<s>0|"
@@ -212,8 +212,8 @@
                         + "<:child-of$<b>34<i>25<i>38<i>7<i>5<s>2<s>1<s>0|"
                         + "<:child-of$<b>34<i>25<i>38<i>7<i>6<s>2<s>1<s>0|"
                         + "<:dep$<b>32<i>6<s>1<s>1<s>3<s>0|"
-                        + "@:func=head$<b>18<i>7<s>3|"
-                        + "@:case=accusative$<b>18<i>7<s>2]" // attribute belongs to a relation node
+                        + "@:func=head$<b>18<s>3<i>7|"
+                        + "@:case=accusative$<b>18<s>2<i>7]" // attribute belongs to a relation node
 
                         + "[(6-7)s:Mutter.|_6$<i>31<i>38|pos:NN$<s>1|"
                         + ">:child-of$<b>33<i>25<i>38<i>5<i>7<s>1<s>2<s>0|"
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java b/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
index 1458000..a0080ab 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
@@ -124,5 +124,20 @@
         assertEquals("startChar", term.getStartChar(), 20);
         assertEquals("endChar", term.getEndChar(), 25);
         assertEquals("depth", term.getDepth(), 0);
+
+        bb.clear();
+        bb.put((byte) 17);   // att PTI
+        bb.putShort((short)1);
+        bb.putInt(25);
+        term = new TermInfo("@:dereko/s:mode:direct", 20, bb).analyze();
+        assertEquals("type", term.getType(), "attr");
+        assertEquals("value", term.getValue(), "mode:direct");
+        assertEquals("foundry", term.getFoundry(), "dereko");
+        assertEquals("layer", term.getLayer(), "s");
+        assertEquals("startPos", term.getStartPos(), 20);
+        assertEquals("endPos", term.getEndPos(), 20);
+        assertEquals("startChar", term.getStartChar(), -1);
+        assertEquals("endChar", term.getEndChar(), -1);
+        assertEquals("depth", term.getDepth(), 0);
     };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
index 3a55968..99b2e54 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
@@ -29,7 +29,7 @@
         assertEquals(
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
-                        + "spanWithAttribute(spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanWithAttribute(spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -47,7 +47,7 @@
                 // +
                 // "<tokens:c:vp />)), spanWithAttribute(spanAttribute(tokens:type:case:accusative))))",
                 //
-                "focus(#[1,2]spanSegment(spanWithAttribute(spanAttribute(tokens:type:case:accusative)), "
+                "focus(#[1,2]spanSegment(spanWithAttribute(spanAttribute(tokens:@:type:case:accusative)), "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "<tokens:c:vp />),sorting)),sorting)",
                 sq.toString());
@@ -70,7 +70,7 @@
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "spanElementWithAttribute(<tokens:c:np />, "
-                        + "spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -86,10 +86,10 @@
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
                 "focus(#[1,2]spanSegment(spanElementWithAttribute(<tokens:c: />, "
-                        + "spanAttribute(tokens:type:case:accusative)), "
+                        + "spanAttribute(tokens:@:type:case:accusative)), "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "spanElementWithAttribute(<tokens:c: />, "
-                        + "spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -173,7 +173,7 @@
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
-                        + "spanElementWithAttribute(<tokens:c:s />, spanAttribute(tokens:type:top))),sorting)),sorting)",
+                        + "spanElementWithAttribute(<tokens:c:s />, spanAttribute(tokens:@:type:top))),sorting)),sorting)",
                 sq.toString());
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
index 23a1beb..481949d 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
@@ -25,7 +25,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -38,7 +38,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:dereko/s:said />, spanAttribute(tokens:mode:indirects))",
+                "spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                "spanAttribute(tokens:@:dereko/s:mode:direct))",
                 sq.toString());
     }
 
@@ -51,7 +52,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -64,7 +65,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:@:type:top))",
                 sq.toString());
     }
     
@@ -78,8 +79,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
 
@@ -92,8 +93,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
     
@@ -107,9 +108,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:complete:Y)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:n:0))])",
+                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:complete:Y)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
 
@@ -123,9 +124,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:complete:Y)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:n:0))])",
+                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:complete:Y)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
     
@@ -138,7 +139,7 @@
                 .getFile();
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
-        assertEquals("spanWithAttribute(spanAttribute(tokens:type:top))",
+        assertEquals("spanWithAttribute(spanAttribute(tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -152,9 +153,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanWithAttribute(spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanWithAttribute(spanAttribute(tokens:complete:Y)), "
-                        + "spanWithAttribute(spanAttribute(tokens:n:0))])",
+                "spanOr([spanWithAttribute(spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanWithAttribute(spanAttribute(tokens:@:complete:Y)), "
+                        + "spanWithAttribute(spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
 
@@ -169,8 +170,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanWithAttribute([spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanWithAttribute([spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
 
@@ -187,5 +188,4 @@
         SpanQuery sq = sqwi.toQuery();
         //        assertEquals("tokens:???", sq.toString());
     }
-
 }
diff --git a/src/test/resources/others/REDEW-DOC1-00001.json.gz b/src/test/resources/others/REDEW-DOC1-00001.json.gz
new file mode 100644
index 0000000..d551bfb
--- /dev/null
+++ b/src/test/resources/others/REDEW-DOC1-00001.json.gz
Binary files differ
diff --git a/src/test/resources/queries/attribute/element-single-attribute-2.jsonld b/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
index 59d0c74..79d682a 100644
--- a/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
+++ b/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
@@ -10,7 +10,7 @@
       "@type": "koral:term",
       "key": "mode",
       "match": "match:eq",
-      "value": "indirects"
+      "value": "direct"
     },
     "wrap": {
       "@type": "koral:term",
