diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 5fb8c0e..4f5901f 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -32,6 +32,7 @@
 import de.ids_mannheim.korap.query.wrap.SpanWithinQueryWrapper;
 import de.ids_mannheim.korap.response.Notifications;
 import de.ids_mannheim.korap.util.QueryException;
+import de.ids_mannheim.korap.util.StatusCodes;
 
 /**
  * <p>
@@ -570,15 +571,17 @@
             direction = "<:";
         }
 
-        if (!relation.has("@type"))
+        if (!relation.has("@type")){
             throw new QueryException(701,
                     "JSON-LD group has no @type attribute");
-
+        }
+        
+        SpanRelationWrapper spanRelationWrapper;
         if (relation.get("@type").asText().equals("koral:relation")) {
             if (!relation.has("wrap")) {
                 throw new QueryException(718, "Missing relation term");
             }
-            // fix me: termgroup relation
+            
             SpanQueryWrapper relationWrapper =
                     _termFromJson(relation.get("wrap"), direction);
             return new SpanRelationWrapper(relationWrapper, operand1, operand2);
@@ -586,6 +589,13 @@
         else {
             throw new QueryException(713, "Query type is not supported");
         }
+        
+//        if (relation.has("boundary")){
+//            _operationRepetitionFromJson(relation, operands);
+//        }
+//        else{
+//            
+//        }
     }
 
 
@@ -634,6 +644,11 @@
         byte flag = WITHIN;
         switch (frame) {
             case "isAround":
+                JsonNode operand = operands.get(0);
+                if (operand.get("@type").asText().equals("koral:token")){
+                    throw new QueryException(StatusCodes.INVALID_QUERY, 
+                            "Token cannot contain another token or element.");
+                }
                 break;
             case "strictlyContains":
                 flag = REAL_WITHIN;
@@ -676,7 +691,7 @@
                 throw new QueryException(706, "Frame type is unknown");
         };
 
-        // The exclusion operator is no longer relevant
+        
         // <legacyCode>
         Boolean exclude;
         if (json.has("exclude") && json.get("exclude").asBoolean()) {
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanWithinQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithinQueryJSON.java
new file mode 100644
index 0000000..3b135be
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithinQueryJSON.java
@@ -0,0 +1,30 @@
+package de.ids_mannheim.korap.query;
+
+import static de.ids_mannheim.korap.TestSimple.getJSONQuery;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.lucene.search.spans.SpanQuery;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+import de.ids_mannheim.korap.util.QueryException;
+
+public class TestSpanWithinQueryJSON {
+    
+    @Rule
+    public ExpectedException exception = ExpectedException.none();
+    
+    @Test
+    public void testTokenContainSentence () throws QueryException {
+        exception.expectMessage("Token cannot contain another token or element.");
+        
+        String filepath = getClass()
+                .getResource(
+                        "/queries/position/token-contain-sentence.json")
+                .getFile();
+        SpanQueryWrapper sqwi = getJSONQuery(filepath);
+        SpanQuery sq = sqwi.toQuery();
+    }
+}
diff --git a/src/test/resources/queries/position/token-contain-sentence.json b/src/test/resources/queries/position/token-contain-sentence.json
new file mode 100644
index 0000000..02ce5f0
--- /dev/null
+++ b/src/test/resources/queries/position/token-contain-sentence.json
@@ -0,0 +1,29 @@
+{
+    "query": {
+        "operands": [
+            {
+                "@type": "koral:token",
+                "wrap": {
+                    "foundry": "sgbr",
+                    "@type": "koral:term",
+                    "match": "match:eq",
+                    "key": "ADJA",
+                    "layer": "p"
+                }
+            },
+            {
+                "@type": "koral:span",
+                "wrap": {
+                    "foundry": "base",
+                    "@type": "koral:term",
+                    "layer": "s",
+                    "key": "s"
+                }
+            }
+        ],
+        "frames": ["frames:isAround"],
+        "@type": "koral:group",
+        "operation": "operation:position"
+    },
+    "@context": "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld"
+}
