diff --git a/ChangeLog b/ChangeLog
index f066cff6ebd0de81fe181228c9a8dc8f72d48c71..4cde9a7a6f7ed943133aeb09584c768a964f9028 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -118,6 +118,9 @@ CVS code -
   read_file()
 	- Rename variable fileformat to format, to avoid confusion with
 	  the file_format enum type. (DLR)
+  load_buffer()
+	- Don't change the file format when we insert another file into
+	  the current one. (DLR)
   do_insertfile()
 	- Simplify by reusing variables whereever possible, and add a
 	  parameter execute to indicate whether or not to be in "Execute
diff --git a/src/files.c b/src/files.c
index 7e0c07dd5829523258e48219275c37ed59f09005..bcef6f13cff0dc22824687aad80b8c686eb85e3a 100644
--- a/src/files.c
+++ b/src/files.c
@@ -466,7 +466,15 @@ void load_buffer(const char *name)
     }
 
     if (rc == 0) {
+	file_format fmt_save = fmt;
+
 	read_file(f, filename);
+
+	/* If we're not loading into a new buffer, preserve the file
+	 * format. */
+	if (!new_buffer)
+	    fmt = fmt_save;
+
 #ifndef NANO_SMALL
 	stat(filename, &originalfilestat);
 #endif