diff --git a/Changes b/Changes
index f23dbba..b7d9b32 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.58.5 2019-02-25
+0.58.5 2019-03-04
     - [bugfix] Fix bug where duplicate keys occured in
       field data output (diewald)
     - [bugfix] Fix bug where fields already set where lifted
@@ -7,6 +7,7 @@
     - [feature] Added upsert method to index and fix #43
       by adding indexCreationDate and indexLastModified field
       (diewald)
+    - [bugfix] Fixed #50 multiple timeout warnings (margaretha) 
 
 0.58.4 2019-02-05
     - [cleanup] Remove deprecated methods setLicense/getLicense,
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index 7520f96..7c9a19d 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -318,7 +318,7 @@
 
 
     // Close index reader
-    private void closeReader () throws IOException {
+    public void closeReader () throws IOException {
         if (readerOpen) {
             this.reader.close();
             readerOpen = false;
@@ -1527,6 +1527,7 @@
                 final IndexReader lreader = atomic.reader();
                 int localDocID, docID;
 
+                boolean isTimeout = false;
                 // TODO: Get document information from Cache! Fieldcache?
                 for (; i < hits; i++) {
 
@@ -1540,6 +1541,7 @@
                     // Timeout!
                     if (tthread.getTime() > timeout) {
                         kr.setTimeExceeded(true);
+                        isTimeout=true;
                         break;
                     };
 
@@ -1621,7 +1623,7 @@
                 };
 
                 // Can be disabled TEMPORARILY
-                while (!cutoff && spans.next()) {
+                while (!cutoff && !isTimeout && spans.next()) {
 
                     // TODO: Deprecated
                     if (limit > 0 && i >= limit)
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestTimeout.java b/src/test/java/de/ids_mannheim/korap/index/TestTimeout.java
new file mode 100644
index 0000000..7c841e4
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/index/TestTimeout.java
@@ -0,0 +1,35 @@
+package de.ids_mannheim.korap.index;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.spans.SpanQuery;
+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.KrillMeta;
+import de.ids_mannheim.korap.response.Result;
+import de.ids_mannheim.korap.util.StatusCodes;
+
+public class TestTimeout {
+
+    @Test
+    public void testMultipleWarningBug () throws IOException {
+        KrillIndex ki = new KrillIndex();
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki.commit();
+
+        SpanQuery q = new SpanTermQuery(new Term("tokens", "s:der"));
+        Krill ks = new Krill(q);
+        KrillMeta meta = ks.getMeta();
+        meta.setTimeOut(-1);
+        Result kr = ks.apply(ki);
+        assertEquals(1, kr.getWarnings().size());
+        assertEquals(StatusCodes.RESPONSE_TIME_EXCEEDED,
+                kr.getWarning(0).getCode());
+    }
+}
