diff --git a/src/files.c b/src/files.c
index 07e5a247e30fdc332a83d64d151a56b59d7034c9..592aaa3a52f11ba4d11830db4a1fea0fd1c767cc 100644
--- a/src/files.c
+++ b/src/files.c
@@ -499,6 +499,8 @@ void do_insertfile(
     char *ans = mallocstrcpy(NULL, "");
 	/* The last answer the user typed on the statusbar. */
     filestruct *edittop_save = edittop;
+    bool at_edittop = FALSE;
+	/* Whether we're at the top of the edit window. */
 
 #ifndef DISABLE_WRAPPING
     wrap_reset();
@@ -591,11 +593,12 @@ void do_insertfile(
 #endif
 		/* If we're not inserting into a new buffer, partition
 		 * the filestruct so that it contains no text and hence
-		 * looks like a new buffer, and set edittop to the top
-		 * of the partition. */
+		 * looks like a new buffer, and keep track of whether
+		 * the top of the partition is the top of the edit
+		 * window. */
 		filepart = partition_filestruct(current, current_x,
 			current, current_x);
-		edittop = fileage;
+		at_edittop = (fileage == edittop);
 #ifdef ENABLE_MULTIBUFFER
 	    }
 #endif
@@ -628,6 +631,12 @@ void do_insertfile(
 		 * partition. */
 		renumber(top_save);
 
+		/* If we were at the top of the edit window before, set
+		 * the saved value of edittop to the new top of the edit
+		 * window. */
+		if (at_edittop)
+		    edittop_save = fileage;
+
 		/* Set edittop back to what it was before. */
 		edittop = edittop_save;
 	    }