diff --git a/ChangeLog b/ChangeLog
index 779e742723597faa37c4bdb276844080f283faf4..4357d0eed48a6b82fab2938da61b28cd69ea30f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,11 +15,13 @@ CVS code -
 	  Accordingly, remove the globals.  Changes to pretty much
 	  every function.  Rename global_init() resize_init(), rename
 	  add_open_file() make_new_buffer(), rename load_buffer()
-	  open_buffer(), rename open_prevnext_file()
-	  switch_to_prevnext_buffer(), rename open_prevfile_void()
-	  switch_to_prev_buffer(), rename open_nextfile_void()
-	  switch_to_next_buffer(), remove load_file(), and remove
-	  load_open_file(). (DLR)
+	  open_buffer(), rename load_open_file() load_buffer(), rename
+	  open_prevnext_file() switch_to_prevnext_buffer(), rename
+	  open_prevfile_void() switch_to_prev_buffer(), rename
+	  open_nextfile_void() switch_to_next_buffer(), remove
+	  load_file(), rename cancel_fork() cancel_command(),
+	  rename open_pipe() execute_command(), and remove
+	  execute_command(). (DLR)
 - files.c:
   open_file()
 	- Assert that filename isn't NULL, and don't do anything special
diff --git a/src/files.c b/src/files.c
index 0440fe34941cad0d2c358e1dd09e09d1667a4ada..f3c8c086c96cd5864908723a58bb667ea94034ba 100644
--- a/src/files.c
+++ b/src/files.c
@@ -190,19 +190,20 @@ void open_buffer(const char *filename)
 #endif
     }
 
-    /* If we have a file, move back to the first line of it if we're
-     * loading into a new buffer.  Then update the titlebar, the colors
-     * (if applicable), and the edit window. */
-    if (rc != -1) {
-	if (new_buffer)
-	    openfile->current = openfile->fileage;
+    /* If we have a file and we're loading into a new buffer, move back
+     * to the first line of the buffer. */
+    if (rc != -1 && new_buffer)
+	openfile->current = openfile->fileage;
+}
 
+/* Update the screen to account for the current buffer. */
+void load_buffer(void)
+{
 	titlebar(NULL);
 #ifdef ENABLE_COLOR
 	update_color();
 #endif
 	edit_refresh();
-    }
 }
 
 #ifdef ENABLE_MULTIBUFFER
@@ -227,6 +228,9 @@ void switch_to_prevnext_buffer(bool next_buf)
     fprintf(stderr, "filename is %s\n", openfile->filename);
 #endif
 
+    /* Update the screen to account for the current buffer. */
+    load_buffer();
+
     /* Indicate the switch on the statusbar. */
     statusbar(_("Switched to %s"),
 	((openfile->filename[0] == '\0') ? _("New Buffer") :
@@ -609,19 +613,6 @@ char *get_next_filename(const char *name, const char *suffix)
     return buf;
 }
 
-#ifndef NANO_SMALL
-void execute_command(const char *command)
-{
-#ifdef ENABLE_MULTIBUFFER
-    if (ISSET(MULTIBUFFER))
-	/* Add a new entry to the openfile structure. */
-	open_buffer("");
-#endif
-
-    open_pipe(command);
-}
-#endif /* !NANO_SMALL */
-
 void do_insertfile(
 #ifndef NANO_SMALL
 	bool execute
@@ -755,19 +746,35 @@ void do_insertfile(
 #endif
 
 #ifndef NANO_SMALL
-	    if (execute)
+	    if (execute) {
+#ifdef ENABLE_MULTIBUFFER
+		if (ISSET(MULTIBUFFER))
+		    /* Open a new blank buffer. */
+		    open_buffer("");
+#endif
+
+		/* Save the command's output in the current buffer. */
 		execute_command(answer);
-	    else {
+	    } else {
 #endif
+		/* Make sure the path to the file specified in answer is
+		 * tilde-expanded. */
 		answer = mallocstrassn(answer,
 			real_dir_from_tilde(answer));
+
+		/* Save the file specified in answer in the current
+		 * buffer. */
 		open_buffer(answer);
 #ifndef NANO_SMALL
 	    }
 #endif
 
 #ifdef ENABLE_MULTIBUFFER
-	    if (!ISSET(MULTIBUFFER))
+	    if (ISSET(MULTIBUFFER))
+		/* Update the screen to account for the current
+		 * buffer. */
+		load_buffer();
+	    else
 #endif
 	    {
 		filestruct *top_save = openfile->fileage;
@@ -792,27 +799,18 @@ void do_insertfile(
 		 * partition. */
 		renumber(top_save);
 
-		/* Set edittop back to what it was before. */
+		/* Restore the old edittop. */
 		openfile->edittop = edittop_save;
-	    }
 
-#ifdef ENABLE_MULTIBUFFER
-	    if (ISSET(MULTIBUFFER))
-		/* Update the titlebar. */
-		titlebar(NULL);
-	    else {
-#endif
+		/* Restore the old place we want. */
+		openfile->placewewant = pww_save;
+
 		/* Mark the file as modified. */
 		set_modified();
 
-		/* Restore the old place we want. */
-		openfile->placewewant = pww_save;
-#ifdef ENABLE_MULTIBUFFER
+		/* Update the screen. */
+		edit_refresh();
 	    }
-#endif
-
-	    /* Refresh the screen. */
-	    edit_refresh();
 
 	    break;
 	}
diff --git a/src/nano.c b/src/nano.c
index 08cc340df7b5e957880f86d0baa6d3dc7fcb52ab..32708beba8bb131692b76c127c94ab2a46af3488 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -68,9 +68,9 @@ static struct sigaction act;	/* For all our fun signal handlers */
 static sigjmp_buf jmpbuf;	/* Used to return to main() after a
 				   SIGWINCH. */
 static int pid;			/* The PID of the newly forked process
-				 * in open_pipe().  It must be global
-				 * because the signal handler needs
-				 * it. */
+				 * in execute_command().  It must be
+				 * global because the signal handler
+				 * needs it. */
 #endif
 
 #ifndef DISABLE_JUSTIFY
@@ -1169,14 +1169,14 @@ void nano_disabled_msg(void)
 }
 
 #ifndef NANO_SMALL
-void cancel_fork(int signal)
+void cancel_command(int signal)
 {
     if (kill(pid, SIGKILL) == -1)
 	nperror("kill");
 }
 
 /* Return TRUE on success. */
-bool open_pipe(const char *command)
+bool execute_command(const char *command)
 {
     int fd[2];
     FILE *f;
@@ -1222,7 +1222,7 @@ bool open_pipe(const char *command)
 	sig_failed = TRUE;
 	nperror("sigaction");
     } else {
-	newaction.sa_handler = cancel_fork;
+	newaction.sa_handler = cancel_command;
 	if (sigaction(SIGINT, &newaction, &oldaction) == -1) {
 	    sig_failed = TRUE;
 	    nperror("sigaction");
@@ -4699,6 +4699,9 @@ int main(int argc, char **argv)
 	UNSET(VIEW_MODE);
     }
 
+    /* Update the screen to account for the current buffer. */
+    load_buffer();
+
 #ifdef ENABLE_MULTIBUFFER
     if (!old_multibuffer)
 	UNSET(MULTIBUFFER);
@@ -4708,7 +4711,6 @@ int main(int argc, char **argv)
     fprintf(stderr, "Main: top and bottom win\n");
 #endif
 
-    titlebar(NULL);
     display_main_list();
 
     if (startline > 1 || startcol > 1)
diff --git a/src/proto.h b/src/proto.h
index 938e3371f5bb5dbea9c703fe754abacac21a8ee6..2323ae0737f6e3d489f878c9eb5bdd4188fc47bd 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -240,6 +240,7 @@ void free_openfilestruct(openfilestruct *src);
 #endif
 void make_new_buffer(void);
 void open_buffer(const char *filename);
+void load_buffer(void);
 #ifdef ENABLE_MULTIBUFFER
 void switch_to_prevnext_buffer(bool next);
 void switch_to_prev_buffer_void(void);
@@ -251,9 +252,6 @@ filestruct *read_line(char *buf, filestruct *prevnode, bool
 void read_file(FILE *f, const char *filename);
 int open_file(const char *filename, bool newfie, FILE **f);
 char *get_next_filename(const char *name, const char *suffix);
-#ifndef NANO_SMALL
-void execute_command(const char *command);
-#endif
 void do_insertfile(
 #ifndef NANO_SMALL
 	bool execute
@@ -380,8 +378,8 @@ int no_more_space(void);
 int no_help(void);
 void nano_disabled_msg(void);
 #ifndef NANO_SMALL
-void cancel_fork(int signal);
-bool open_pipe(const char *command);
+void cancel_command(int signal);
+bool execute_command(const char *command);
 #endif
 void do_verbatim_input(void);
 void do_backspace(void);