diff --git a/src/files.c b/src/files.c
index 382ccb19476eccf6c62faa339d25c9291891ae41..36c09caab4e1a26b26fb9ee3ccc70cc7f1d3cda7 100644
--- a/src/files.c
+++ b/src/files.c
@@ -100,6 +100,7 @@ void make_new_buffer(void)
     openfile->undotop = NULL;
     openfile->current_undo = NULL;
     openfile->last_action = OTHER;
+    openfile->pristine = TRUE;
 
     openfile->current_stat = NULL;
     openfile->lock_filename = NULL;
diff --git a/src/nano.h b/src/nano.h
index 0f7e0f6e1b1d74af68f57995cfa2d78fbe9ce2cb..9ab9281f17418cb5f707ab82e9beaff375d96f01 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -396,6 +396,9 @@ typedef struct openfilestruct {
 	/* The current (i.e. next) level of undo. */
     undo_type last_action;
 	/* The type of the last action the user performed. */
+    bool pristine;
+	/* Whether the undo stack still contains the first edit -- it won't
+	 * when a justification or spell check discarded the undo stack. */
     char *lock_filename;
 	/* The path of the lockfile, if we created one. */
 #endif
diff --git a/src/text.c b/src/text.c
index 638acc7af759a6ae4dc409c41d858a89c03d6dbd..77199611c34e3a60eebf581d32c2332652e535f7 100644
--- a/src/text.c
+++ b/src/text.c
@@ -865,7 +865,13 @@ void do_undo(void)
     openfile->placewewant = xplustabs();
 
     openfile->totsize = u->wassize;
-    set_modified();
+
+    /* If *everything* was undone, then unset the "Modified" marker. */
+    if (openfile->current_undo == NULL && openfile->pristine) {
+	openfile->modified = FALSE;
+	titlebar(NULL);
+    } else
+	set_modified();
 }
 
 /* Redo the last thing(s) we undid. */
@@ -1207,6 +1213,9 @@ void discard_until(const undo *thisitem, openfilestruct *thefile)
 
     /* Prevent a chain of editing actions from continuing. */
     thefile->last_action = OTHER;
+
+    /* Record that the undo stack no longer goes back to the beginning. */
+    thefile->pristine = FALSE;
 }
 
 /* Add a new undo struct to the top of the current pile. */