diff --git a/Changes b/Changes
index 1b8d321..60ba114 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,5 @@
-0.59.1 2019-01-20
+0.59.1 2020-01-28
+    - [bugfix] Fix bug in classed group queries (diewald)
 
 0.59.0 2019-11-28
     - [bugfix] Fix offset retrieval in concurrent searches
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ElementDistanceExclusionSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ElementDistanceExclusionSpans.java
index 1c5ebdc..a5adc05 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ElementDistanceExclusionSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ElementDistanceExclusionSpans.java
@@ -10,8 +10,10 @@
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermContext;
 import org.apache.lucene.search.spans.Spans;
+import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.util.Bits;
 
+
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 
 /**
@@ -68,7 +70,7 @@
                                           Map<Term, TermContext> termContexts)
             throws IOException {
         super(query, context, acceptDocs, termContexts);
-
+        
         elements = query.getElementQuery().getSpans(context, acceptDocs,
                 termContexts);
         hasMoreElements = elements.next();
@@ -79,7 +81,11 @@
         this.isOrdered = query.isOrdered();
         candidateList = new ArrayList<CandidateSpan>();
         targetList = new ArrayList<CandidateSpan>();
-        currentDocNum = firstSpans.doc();
+        
+        if (hasMoreSpans)
+            currentDocNum = firstSpans.doc();
+        else
+            currentDocNum = DocIdSetIterator.NO_MORE_DOCS;
 
         minDistance = query.getMinDistance();
         maxDistance = query.getMaxDistance();
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
index ceed514..62b5f7e 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
@@ -419,7 +419,7 @@
         SpanQuery sq = sqwi.toQuery();
 
         // (Pop-up OR Pop-ups) %s0 (Internet OR  Programm)
-        assertEquals(sq.toString(),"spanElementDistance({129: spanOr([tokens:s:Pop-up, tokens:s:Pop-ups])}, {129: spanOr([tokens:s:Internet, tokens:s:Programm])}, [(base/s:s[0:0], notOrdered, excluded)])");
+        assertEquals(sq.toString(),"spanElementDistance({129: spanOr([tokens:s:Blatt, tokens:s:Augen])}, {129: spanOr([tokens:s:Wald, tokens:s:Baum])}, [(base/s:s[0:0], notOrdered, excluded)])");
     };
 	
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index c407cce..32b665c 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -1230,6 +1230,36 @@
     };
 
 
+    @Test
+    public void queryJSONcosmasSentenceNegationBug () throws IOException {
+        KrillIndex ki = new KrillIndex();
+
+        // Indexing test files
+        for (String i : new String[] {
+                "00001",
+                "00002",
+                "00003",
+                "00004",
+                "00005",
+                "00006",
+                "02439"
+            }) {
+            ki.addDoc(getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
+                      true);
+        };
+
+        ki.commit();
+
+        String json = getJsonString(getClass()
+                .getResource("/queries/bugs/cosmas-exclude.jsonld")
+                .getFile());
+       
+        Result kr = new Krill(json).apply(ki);
+
+        assertEquals(0, kr.getTotalResults());
+    };
+   
+
     /**
      * This is a Schreibgebrauch ressource that didn't work for
      * element queries.
diff --git a/src/test/resources/queries/bugs/cosmas-exclude.jsonld b/src/test/resources/queries/bugs/cosmas-exclude.jsonld
index 57f50bc..67c53f2 100644
--- a/src/test/resources/queries/bugs/cosmas-exclude.jsonld
+++ b/src/test/resources/queries/bugs/cosmas-exclude.jsonld
@@ -7,7 +7,7 @@
           "wrap":{
             "@type":"koral:term",
             "match":"match:eq",
-            "key":"Pop-up",
+            "key":"Blatt",
             "layer":"orth"
           }
         },{
@@ -15,7 +15,7 @@
           "wrap":{
             "@type":"koral:term",
             "match":"match:eq",
-            "key":"Pop-ups",
+            "key":"Augen",
             "layer":"orth"
           }
         }],
@@ -33,7 +33,7 @@
           "wrap":{
             "@type":"koral:term",
             "match":"match:eq",
-            "key":"Internet",
+            "key":"Wald",
             "layer":"orth"
           }
         },{
@@ -41,7 +41,7 @@
           "wrap":{
             "@type":"koral:term",
             "match":"match:eq",
-            "key":"Programm",
+            "key":"Baum",
             "layer":"orth"
           }
         }],
