diff --git a/src/autocmd.c b/src/autocmd.c
index 2ea23cc..e6cdb36 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -2123,9 +2123,16 @@
 	for (ap = patcmd.curpat; ap->next != NULL; ap = ap->next)
 	    ap->last = FALSE;
 	ap->last = TRUE;
-	check_lnums(TRUE);	// make sure cursor and topline are valid
+
+	// make sure cursor and topline are valid
+	check_lnums(TRUE);
+
 	do_cmdline(NULL, getnextac, (void *)&patcmd,
 				     DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
+
+	// restore cursor and topline, unless they were changed
+	reset_lnums();
+
 #ifdef FEAT_EVAL
 	if (eap != NULL)
 	{
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 5da322e..b4ad98a 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -70,6 +70,7 @@
 int min_rows(void);
 int only_one_window(void);
 void check_lnums(int do_curwin);
+void reset_lnums(void);
 void make_snapshot(int idx);
 void restore_snapshot(int idx, int close_curwin);
 int switch_win(win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp, int no_display);
diff --git a/src/structs.h b/src/structs.h
index f2f2cc9..104265e 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -2715,6 +2715,16 @@
 #endif
 };
 
+// Structure to store last cursor position and topline.  Used by check_lnums()
+// and reset_lnums().
+typedef struct
+{
+    int		w_topline_save;	// original topline value
+    int		w_topline_corr;	// corrected topline value
+    pos_T	w_cursor_save;	// original cursor position
+    pos_T	w_cursor_corr;	// corrected cursor position
+} pos_save_T;
+
 #ifdef FEAT_MENU
 typedef struct {
     int		wb_startcol;
@@ -2803,6 +2813,8 @@
     int		w_wincol;	    /* Leftmost column of window in screen. */
     int		w_width;	    /* Width of window, excluding separation. */
     int		w_vsep_width;	    /* Number of separator columns (0 or 1). */
+    pos_save_T	w_save_cursor;	    /* backup of cursor pos and topline */
+
 
     /*
      * === start of cached values ====
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index 8db06d0..55d725e 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -1485,6 +1485,51 @@
   call assert_fails('au WinNew * ++once ++once echo bad', 'E983:')
 endfunc
 
+func Test_autocmd_bufreadpre()
+  new
+  let b:bufreadpre = 1
+  call append(0, range(100))
+  w! XAutocmdBufReadPre.txt
+  autocmd BufReadPre <buffer> :let b:bufreadpre += 1
+  norm! 50gg
+  sp
+  norm! 100gg
+  wincmd p
+  let g:wsv1 = winsaveview()
+  wincmd p
+  let g:wsv2 = winsaveview()
+  " triggers BufReadPre, should not move the cursor in either window
+  " The topline may change one line in a large window.
+  edit
+  call assert_inrange(g:wsv2.topline - 1, g:wsv2.topline + 1, winsaveview().topline)
+  call assert_equal(g:wsv2.lnum, winsaveview().lnum)
+  call assert_equal(2, b:bufreadpre)
+  wincmd p
+  call assert_equal(g:wsv1.topline, winsaveview().topline)
+  call assert_equal(g:wsv1.lnum, winsaveview().lnum)
+  call assert_equal(2, b:bufreadpre)
+  " Now set the cursor position in an BufReadPre autocommand
+  " (even though the position will be invalid, this should make Vim reset the
+  " cursor position in the other window.
+  wincmd p
+  set cpo+=g
+  " won't do anything, but try to set the cursor on an invalid lnum
+  autocmd BufReadPre <buffer> :norm! 70gg
+  " triggers BufReadPre, should not move the cursor in either window
+  e
+  call assert_equal(1, winsaveview().topline)
+  call assert_equal(1, winsaveview().lnum)
+  call assert_equal(3, b:bufreadpre)
+  wincmd p
+  call assert_equal(g:wsv1.topline, winsaveview().topline)
+  call assert_equal(g:wsv1.lnum, winsaveview().lnum)
+  call assert_equal(3, b:bufreadpre)
+  close
+  close
+  call delete('XAutocmdBufReadPre.txt')
+  set cpo-=g
+endfunc
+
 " FileChangedShell tested in test_filechanged.vim
 
 " Tests for the following autocommands:
diff --git a/src/version.c b/src/version.c
index 330bdf1..743900d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1205,
+/**/
     1204,
 /**/
     1203,
diff --git a/src/window.c b/src/window.c
index 4ca5627..df82d20 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6196,10 +6196,39 @@
     FOR_ALL_TAB_WINDOWS(tp, wp)
 	if ((do_curwin || wp != curwin) && wp->w_buffer == curbuf)
 	{
+	    // save the original cursor position and topline
+	    wp->w_save_cursor.w_cursor_save = wp->w_cursor;
+	    wp->w_save_cursor.w_topline_save = wp->w_topline;
+
 	    if (wp->w_cursor.lnum > curbuf->b_ml.ml_line_count)
 		wp->w_cursor.lnum = curbuf->b_ml.ml_line_count;
 	    if (wp->w_topline > curbuf->b_ml.ml_line_count)
 		wp->w_topline = curbuf->b_ml.ml_line_count;
+
+	    // save the corrected cursor position and topline
+	    wp->w_save_cursor.w_cursor_corr = wp->w_cursor;
+	    wp->w_save_cursor.w_topline_corr = wp->w_topline;
+	}
+}
+
+/*
+ * Reset cursor and topline to its stored values from check_lnums().
+ * check_lnums() must have been called first!
+ */
+    void
+reset_lnums()
+{
+    win_T	*wp;
+    tabpage_T	*tp;
+
+    FOR_ALL_TAB_WINDOWS(tp, wp)
+	if (wp->w_buffer == curbuf)
+	{
+	    // Restore the value if the autocommand didn't change it.
+	    if (EQUAL_POS(wp->w_save_cursor.w_cursor_corr, wp->w_cursor))
+		wp->w_cursor = wp->w_save_cursor.w_cursor_save;
+	    if (wp->w_save_cursor.w_topline_corr == wp->w_topline)
+		wp->w_topline = wp->w_save_cursor.w_topline_save;
 	}
 }
 
