diff --git a/src/errors.h b/src/errors.h
index 0f54eba..30032c0 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3341,3 +3341,5 @@
 #endif
 EXTERN char e_cannot_change_user_commands_while_listing[]
 	INIT(= N_("E1311: Cannot change user commands while listing"));
+EXTERN char e_not_allowed_to_change_window_layout_in_this_autocmd[]
+	INIT(= N_("E1312: Not allowed to change the window layout in this autocmd"));
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index d5037a4..ac40127 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6055,6 +6055,8 @@
 	emsg(_(e_cannot_close_autocmd_or_popup_window));
 	return;
     }
+    if (window_layout_locked())
+	return;
 
     need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
     if (need_hide && !buf_hide(buf) && !forceit)
@@ -6227,7 +6229,7 @@
 	cmdwin_result = K_IGNORE;
     else if (first_tabpage->tp_next == NULL)
 	emsg(_(e_cannot_close_last_tab_page));
-    else
+    else if (!window_layout_locked())
     {
 	tab_number = get_tabpage_arg(eap);
 	if (eap->errmsg == NULL)
@@ -6263,7 +6265,7 @@
 	cmdwin_result = K_IGNORE;
     else if (first_tabpage->tp_next == NULL)
 	msg(_("Already only one tab page"));
-    else
+    else if (!window_layout_locked())
     {
 	tab_number = get_tabpage_arg(eap);
 	if (eap->errmsg == NULL)
@@ -6296,6 +6298,9 @@
     void
 tabpage_close(int forceit)
 {
+    if (window_layout_locked())
+	return;
+
     // First close all the windows but the current one.  If that worked then
     // close the last window in this tab, that will close it.
     if (!ONE_WINDOW)
@@ -6341,14 +6346,15 @@
     static void
 ex_only(exarg_T *eap)
 {
-    win_T   *wp;
-    int	    wnr;
+    if (window_layout_locked())
+	return;
 # ifdef FEAT_GUI
     need_mouse_correct = TRUE;
 # endif
     if (eap->addr_count > 0)
     {
-	wnr = eap->line2;
+	win_T   *wp;
+	int	wnr = eap->line2;
 	for (wp = firstwin; --wnr > 0; )
 	{
 	    if (wp->w_next == NULL)
@@ -6367,6 +6373,8 @@
     // ":hide" or ":hide | cmd": hide current window
     if (!eap->skip)
     {
+	if (window_layout_locked())
+	    return;
 #ifdef FEAT_GUI
 	need_mouse_correct = TRUE;
 #endif
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 8fa8661..70d6b06 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -1,4 +1,5 @@
 /* window.c */
+int window_layout_locked(void);
 win_T *prevwin_curwin(void);
 void do_window(int nchar, long Prenum, int xchar);
 void get_wincmd_addr_type(char_u *arg, exarg_T *eap);
diff --git a/src/version.c b/src/version.c
index a87a378..588c312 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    907,
+/**/
     906,
 /**/
     905,
diff --git a/src/window.c b/src/window.c
index 996a8aa..a64a52e 100644
--- a/src/window.c
+++ b/src/window.c
@@ -84,6 +84,48 @@
 // autocommands mess up the window structure.
 static int split_disallowed = 0;
 
+// When non-zero closing a window is forbidden.  Used to avoid that nasty
+// autocommands mess up the window structure.
+static int close_disallowed = 0;
+
+/*
+ * Disallow changing the window layout (split window, close window, move
+ * window).  Resizing is still allowed.
+ * Used for autocommands that temporarily use another window and need to
+ * make sure the previously selected window is still there.
+ * Must be matched with exactly one call to window_layout_unlock()!
+ */
+    static void
+window_layout_lock(void)
+{
+    ++split_disallowed;
+    ++close_disallowed;
+}
+
+    static void
+window_layout_unlock(void)
+{
+    --split_disallowed;
+    --close_disallowed;
+}
+
+/*
+ * When the window layout cannot be changed give an error and return TRUE.
+ */
+    int
+window_layout_locked(void)
+{
+    if (split_disallowed > 0 || close_disallowed > 0)
+    {
+	if (close_disallowed == 0)
+	    emsg(_(e_cannot_split_window_when_closing_buffer));
+	else
+	    emsg(_(e_not_allowed_to_change_window_layout_in_this_autocmd));
+	return TRUE;
+    }
+    return FALSE;
+}
+
 // #define WIN_DEBUG
 #ifdef WIN_DEBUG
 /*
@@ -2531,6 +2573,8 @@
 	emsg(_(e_cannot_close_last_window));
 	return FAIL;
     }
+    if (window_layout_locked())
+	return FAIL;
 
     if (win->w_closing || (win->w_buffer != NULL
 					       && win->w_buffer->b_locked > 0))
@@ -2802,24 +2846,28 @@
     void
 may_trigger_winscrolled(void)
 {
-    win_T	    *wp = curwin;
     static int	    recursive = FALSE;
-    char_u	    winid[NUMBUFLEN];
 
     if (recursive || !has_winscrolled())
 	return;
 
+    win_T *wp = curwin;
     if (wp->w_last_topline != wp->w_topline
 	    || wp->w_last_leftcol != wp->w_leftcol
 	    || wp->w_last_skipcol != wp->w_skipcol
 	    || wp->w_last_width != wp->w_width
 	    || wp->w_last_height != wp->w_height)
     {
-	vim_snprintf((char *)winid, sizeof(winid), "%d", wp->w_id);
+	// "curwin" may be different from the actual current window, make sure
+	// it can be restored.
+	window_layout_lock();
 
 	recursive = TRUE;
+	char_u winid[NUMBUFLEN];
+	vim_snprintf((char *)winid, sizeof(winid), "%d", wp->w_id);
 	apply_autocmds(EVENT_WINSCROLLED, winid, winid, FALSE, wp->w_buffer);
 	recursive = FALSE;
+	window_layout_unlock();
 
 	// an autocmd may close the window, "wp" may be invalid now
 	if (win_valid_any_tab(wp))
@@ -4014,6 +4062,8 @@
 	emsg(_(e_invalid_in_cmdline_window));
 	return FAIL;
     }
+    if (window_layout_locked())
+	return FAIL;
 
     newtp = alloc_tabpage();
     if (newtp == NULL)
