diff --git a/ChangeLog b/ChangeLog
index 54af35013cc59b096d9e7e621fa725f1d2c93338..89f0b4e737a5afb35034be281fa5648b7001a93d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
 	an error when the marked region is zero bytes long.  The message
 	is not needed -- it gets printed by the caller.  This generalizes
 	the fix for Savannah bug #29393.
+	* src/text.c (do_alt_speller): Do not unset the mark before the
+	possible bailout because of a zero-sized region.
 
 2015-03-22  Chris Allegretta <chrisa@asty.org>
 	* src/text.c (do_alt_speller): timestamp can just be a __time_t.
diff --git a/src/text.c b/src/text.c
index 816f7616dc7da0e179cb26d70b6e0db63d378a45..5d07752aecea5b0d0bbe28006131fdb10d033538 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2683,13 +2683,6 @@ const char *do_alt_speller(char *tempfile_name)
     size_t totsize_save = openfile->totsize;
 	/* Our saved value of totsize, used when we spell-check a marked
 	 * selection. */
-
-    if (old_mark_set) {
-	/* If the mark is on, save the number of the line it starts on,
-	 * and then turn the mark off. */
-	mb_lineno_save = openfile->mark_begin->lineno;
-	openfile->mark_set = FALSE;
-    }
 #endif
 
     /* Get the timestamp and the size of the temporary file. */
@@ -2700,6 +2693,15 @@ const char *do_alt_speller(char *tempfile_name)
     if (spellfileinfo.st_size == 0)
 	return NULL;
 
+#ifndef NANO_TINY
+    if (old_mark_set) {
+	/* If the mark is on, save the number of the line it starts on,
+	 * and then turn the mark off. */
+	mb_lineno_save = openfile->mark_begin->lineno;
+	openfile->mark_set = FALSE;
+    }
+#endif
+
     endwin();
 
     /* Set up an argument list to pass execvp(). */