diff --git a/ChangeLog b/ChangeLog
index b9190e10b0c4a8e35b6b36c608ae6653e61b54da..06241bac9a453c47e73d897ec4fa7c51dc9ac936 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-12-03  Benno Schulenberg  <bensberg@justemail.net>
+	* src/text.c (discard_until): Move the trimming of the undo stack
+	into a separate function, so it can be used elsewhere.
+
 2015-12-02  Benno Schulenberg  <bensberg@justemail.net>
 	* doc/syntax/python.nanorc: Don't colour triple quotes by themselves.
 	* doc/syntax/python.nanorc: Treat backslashed quotes properly, and
diff --git a/src/text.c b/src/text.c
index eef0a52addc2e8ffcd09e0637d70aca790b00cc6..c63d435cb396836f3471b5cbf6979edd60c9dd40 100644
--- a/src/text.c
+++ b/src/text.c
@@ -904,6 +904,21 @@ bool execute_command(const char *command)
     return TRUE;
 }
 
+/* Discard undo items that are newer than thisone, or all if NULL. */
+void discard_until(undo *thisone)
+{
+    undo *dropit = openfile->undotop;
+
+    while (dropit != NULL && dropit != thisone) {
+	openfile->undotop = dropit->next;
+	free(dropit->strdata);
+	if (dropit->cutbuffer)
+	    free_filestruct(dropit->cutbuffer);
+	free(dropit);
+	dropit = openfile->undotop;
+    }
+}
+
 /* Add a new undo struct to the top of the current pile. */
 void add_undo(undo_type action)
 {
@@ -918,14 +933,7 @@ void add_undo(undo_type action)
 	return;
 
     /* Blow away newer undo items if we add somewhere in the middle. */
-    while (openfile->undotop != NULL && openfile->undotop != u) {
-	undo *dropit = openfile->undotop;
-	openfile->undotop = openfile->undotop->next;
-	free(dropit->strdata);
-	if (dropit->cutbuffer)
-	    free_filestruct(dropit->cutbuffer);
-	free(dropit);
-    }
+    discard_until(u);
 
 #ifdef DEBUG
     fprintf(stderr, "  >> Adding an undo...\n");