diff --git a/Changes b/Changes
index ebc3112..f2e7488 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,8 @@
 0.59.6 2021-10-26
     - [bugfix] Fixed skipping of focus spans (fixed #78; margaretha,
       diewald)
+    - [bugfix] Clear matchlist if skip fails in NextSpans
+      (margaretha, diewald)
 
 0.59.5 2021-10-26
     - [bugfix] Fixed candidate settings in token distance spans
diff --git a/pom.xml b/pom.xml
index d0f48e1..de649e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -237,6 +237,12 @@
       <artifactId>cobertura-maven-plugin</artifactId>
       <version>${cobertura.version}</version>
       <scope>test</scope>
+      <exclusions>
+      	<exclusion>
+      		<groupId>com.sun</groupId>
+      		<artifactId>tools</artifactId>
+      	</exclusion>
+      </exclusions>
     </dependency>
   </dependencies>
   
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
index c694f26..6a7d8c4 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
@@ -107,6 +107,7 @@
         CandidateSpan cs;
 
         if (DEBUG) {
+            log.debug("FirstSpan [{}]", firstSpans.toString());
             log.debug("FirstSpan: ({}) {}-{}", firstSpans.doc(), firstSpans.start(), firstSpans.end());
         }
         
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
index 1068e58..466548e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
@@ -156,6 +156,9 @@
                               firstSpans.doc(),
                               secondSpans.doc()
                         );
+                    log.debug("First span [{}]",firstSpans.toString());
+                    log.debug("Second span [{}]",secondSpans.toString());
+
                 }
                 candidateListDocNum = firstSpans.doc();
                 searchMatches();
@@ -267,7 +270,11 @@
             if (!firstSpans.skipTo(target)) {
                 hasMoreSpans = false;
                 return false;
-            };
+            }
+            else {
+                // removed all matches found in the previous doc.
+                matchList.clear();
+            }
 
             if (DEBUG) {
                 log.debug("Skip firstSpans to {}={} succeed with positions {}-{}",
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFocusIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestFocusIndex.java
index 408332f..1bf03a3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFocusIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFocusIndex.java
@@ -299,6 +299,96 @@
         assertEquals(1, kr.getTotalResults());
     }    
 
+    @Test
+    public void testFocusInNextBug2 () throws QueryException, IOException {
+        ki = new KrillIndex();
+
+        FieldDocument fd;
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-1");
+        fd.addTV("base", "c",
+                 "[(0-1)s:c|<>:base/s:t$<b>64<i>0<i>1<i>1<b>0|_0$<i>0<i>1]"
+            );
+        ki.addDoc(fd);
+
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-2");
+        fd.addTV("base", "bab",
+                 "[(0-1)s:b|<>:base/s:t$<b>64<i>0<i>3<i>3<b>0|_0$<i>0<i>1]"+
+                 "[(1-2)s:a|_1$<i>1<i>2]"+
+                 "[(2-3)s:b|a:b|a:b|_2$<i>2<i>3]"
+            );
+        ki.addDoc(fd);
+
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-3");
+        fd.addTV("base", "ddbcebcea",
+                 "[(0-1)s:d|<>:base/s:t$<b>64<i>0<i>9<i>9<b>0|_0$<i>0<i>1]"+
+                 "[(1-2)s:d|_1$<i>1<i>2]"+
+                 "[(2-3)s:b|_2$<i>2<i>3]"+
+                 "[(3-4)s:c|_3$<i>3<i>4]"+
+                 "[(4-5)s:e|_4$<i>4<i>5]"+
+                 "[(5-6)s:b|_5$<i>5<i>6]"+
+                 "[(6-7)s:c|a:b|_6$<i>6<i>7]"+
+                 "[(7-8)s:e|_7$<i>7<i>8]"+
+                 "[(8-9)s:a|a:d|_8$<i>8<i>9]"
+            );
+        ki.addDoc(fd);
+
+        ki.commit();
+
+        // assertEquals("", kr.getMatch(0).getSnippetBrackets());
+
+        QueryBuilder kq = new QueryBuilder("base");
+        
+        SpanQueryWrapper focus = kq.seq(kq.seg("s:b"),kq.focus(kq.seq(kq.seg("s:a"),kq.seg("a:b"),kq.nr(1, kq.seg("s:c")))));
+        kr = ki.search(focus.toQuery(), (short) 10);
+
+        assertEquals(0, kr.getTotalResults());
+    }
+
+
+    @Test
+    public void testFocusInNextBug3 () throws QueryException, IOException {
+        ki = new KrillIndex();
+
+        FieldDocument fd;
+
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-1");
+        fd.addTV("base", "e",
+                 "[(0-1)s:e|<>:base/s:t$<b>64<i>0<i>1<i>1<b>0|a:e|a:e|_0$<i>0<i>1]"
+            );
+        ki.addDoc(fd);
+
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-2");
+        fd.addTV("base", "eae",
+                 "[(0-1)s:e|<>:base/s:t$<b>64<i>0<i>3<i>3<b>0|a:d|_0$<i>0<i>1]"+
+                 "[(1-2)s:a|a:d|_1$<i>1<i>2]"+
+                 "[(2-3)s:e|a:b|a:b|_2$<i>2<i>3]"
+            );
+        ki.addDoc(fd);
+        fd = new FieldDocument();
+        fd.addString("ID", "doc-3");
+        fd.addTV("base", "abbc",
+                 "[(0-1)s:a|<>:base/s:t$<b>64<i>0<i>4<i>4<b>0|_0$<i>0<i>1]"+
+                 "[(1-2)s:b|a:d|_1$<i>1<i>2]"+
+                 "[(2-3)s:b|a:a|a:b|_2$<i>2<i>3]"+
+                 "[(3-4)s:c|a:c|a:c|_3$<i>3<i>4]"
+            );
+        ki.addDoc(fd);
+        ki.commit();
+
+        QueryBuilder kq = new QueryBuilder("base");
+                 
+        SpanQueryWrapper focus = kq.seq(kq.seg("s:b"),kq.focus(kq.seq(kq.seg("s:a"),kq.seg("a:b"),kq.nr(1, kq.seg("s:c")))));
+        kr = ki.search(focus.toQuery(), (short) 10);
+
+        assertEquals(0, kr.getTotalResults());
+    }
+
+    
 
     // @Test
     public void testFocusInNextWithAnnotationsFuzzy () throws QueryException, IOException {
