diff --git a/src/nano.c b/src/nano.c
index f08794bedc0fb38b1f7f23e6a266cc0c3ce58d24..8350d29fb720c6e37ea677bfeec367832172938d 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -588,12 +588,14 @@ void die(const char *msg, ...)
 	va_list ap;
 	openfilestruct *firstone = openfile;
 
+	/* Switch on the cursor and leave curses mode. */
 	curs_set(1);
 	endwin();
 
 	/* Restore the old terminal settings. */
 	tcsetattr(0, TCSANOW, &oldterm);
 
+	/* Display the dying message. */
 	va_start(ap, msg);
 	vfprintf(stderr, msg, ap);
 	va_end(ap);
@@ -604,13 +606,14 @@ void die(const char *msg, ...)
 		if (ISSET(LOCKING) && openfile->lock_filename)
 			delete_lockfile(openfile->lock_filename);
 #endif
-		/* If the current file buffer was modified, save it. */
-		if (openfile->modified) {
-			/* If the buffer is partitioned, unpartition it first. */
+		/* If the current buffer was modified, ensure it is unpartitioned,
+		 * then save it.  When in restricted mode, we don't save anything,
+		 * because it would write files not mentioned on the command line. */
+		if (openfile->modified && !ISSET(RESTRICTED)) {
 			if (filepart != NULL)
 				unpartition_filestruct(&filepart);
 
-			die_save_file(openfile->filename, openfile->current_stat);
+			emergency_save(openfile->filename, openfile->current_stat);
 		}
 
 		filepart = NULL;
@@ -624,21 +627,14 @@ void die(const char *msg, ...)
 	exit(1);
 }
 
-/* Save the current file under the name specified in die_filename, which
- * is modified to be unique if necessary. */
-void die_save_file(const char *die_filename, struct stat *die_stat)
+/* Save the current buffer under the given name.
+ * If necessary, the name is modified to be unique. */
+void emergency_save(const char *die_filename, struct stat *die_stat)
 {
 	char *targetname;
 	bool failed = TRUE;
 
-	/* If we're using restricted mode, don't write any emergency backup
-	 * files, since that would allow reading from or writing to files
-	 * not specified on the command line. */
-	if (ISSET(RESTRICTED))
-		return;
-
-	/* If we can't save, we have really bad problems, but we might as
-	 * well try. */
+	/* If the buffer has no name, simply call it "nano". */
 	if (*die_filename == '\0')
 		die_filename = "nano";
 
@@ -657,9 +653,8 @@ void die_save_file(const char *die_filename, struct stat *die_stat)
 				_("Too many backup files?"));
 
 #ifndef NANO_TINY
-	/* Try and chmod/chown the save file to the values of the original file,
-	 * but don't worry if it fails because we're supposed to be bailing as
-	 * fast as possible. */
+	/* Try to chmod/chown the saved file to the values of the original file,
+	 * but ignore any failure as we are in a hurry to get out. */
 	if (die_stat) {
 		IGNORE_CALL_RESULT(chmod(targetname, die_stat->st_mode));
 		IGNORE_CALL_RESULT(chown(targetname, die_stat->st_uid,
diff --git a/src/proto.h b/src/proto.h
index befabe4a5f4d64fe4bae92371653eefcb8f609fd..0d10073adca18592f97430896948a9467a913514 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -421,7 +421,7 @@ void say_there_is_no_help(void);
 #endif
 void finish(void);
 void die(const char *msg, ...);
-void die_save_file(const char *die_filename, struct stat *die_stat);
+void emergency_save(const char *die_filename, struct stat *die_stat);
 void window_init(void);
 void do_exit(void);
 void close_and_go(void);