diff --git a/src/text.c b/src/text.c
index 93dcbc9febb35f9f63f9d1dcbfd06e6c527d0aea..bd3824cec71ace50d46a7266f8c19601538f88bf 100644
--- a/src/text.c
+++ b/src/text.c
@@ -3267,15 +3267,39 @@ void do_linter(void)
 			    SET(MULTIBUFFER);
 			    open_buffer(curlint->filename, FALSE);
 			} else {
-			    char *dontwantfile = curlint->filename;
+			    char *dontwantfile = mallocstrcpy(NULL, curlint->filename);
+			    lintstruct *restlint = NULL;
+
+			    while (curlint != NULL) {
+				if (strcmp(curlint->filename, dontwantfile) == 0) {
+				    if (curlint == lints)
+					lints = curlint->next;
+				    else
+					curlint->prev->next = curlint->next;
+				    if (curlint->next != NULL)
+					curlint->next->prev = curlint->prev;
+				    tmplint = curlint;
+				    curlint = curlint->next;
+				    free(tmplint->msg);
+				    free(tmplint->filename);
+				    free(tmplint);
+				} else {
+				    if (restlint == NULL)
+					restlint = curlint;
+				    curlint = curlint->next;
+				}
+			    }
 
-			    while (curlint != NULL && !strcmp(curlint->filename, dontwantfile))
-				curlint = curlint->next;
-			    if (curlint == NULL) {
+			    if (restlint == NULL) {
 				statusbar(_("No more errors in unopened files, cancelling"));
+				napms(2400);
 				break;
-			    } else
+			    } else {
+				curlint = restlint;
 				goto new_lint_loop;
+			    }
+
+			    free(dontwantfile);
 			}
 		    } else
 			openfile = tmpof;