diff --git a/src/buffer.c b/src/buffer.c
index 54f6544..ae744d2 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4551,7 +4551,7 @@
      * When the ":tab" modifier was used do this for all tab pages.
      */
     if (had_tab > 0)
-	goto_tabpage_tp(first_tabpage, TRUE);
+	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
 	tpnext = curtab->tp_next;
@@ -4663,7 +4663,7 @@
 	if (!valid_tabpage(tpnext))
 	    tpnext = first_tabpage;	/* start all over...*/
 # endif
-	goto_tabpage_tp(tpnext, TRUE);
+	goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 
     /*
@@ -4767,13 +4767,13 @@
     if (last_curtab != new_curtab)
     {
 	if (valid_tabpage(last_curtab))
-	    goto_tabpage_tp(last_curtab, TRUE);
+	    goto_tabpage_tp(last_curtab, TRUE, TRUE);
 	if (win_valid(last_curwin))
 	    win_enter(last_curwin, FALSE);
     }
     /* to window with first arg */
     if (valid_tabpage(new_curtab))
-	goto_tabpage_tp(new_curtab, TRUE);
+	goto_tabpage_tp(new_curtab, TRUE, TRUE);
     if (win_valid(new_curwin))
 	win_enter(new_curwin, FALSE);
 
@@ -4825,7 +4825,7 @@
      */
 #ifdef FEAT_WINDOWS
     if (had_tab > 0)
-	goto_tabpage_tp(first_tabpage, TRUE);
+	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
 #endif
@@ -4865,7 +4865,7 @@
 	/* Without the ":tab" modifier only do the current tab page. */
 	if (had_tab == 0 || tpnext == NULL)
 	    break;
-	goto_tabpage_tp(tpnext, TRUE);
+	goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 #endif
 
diff --git a/src/eval.c b/src/eval.c
index 04ed2c5..ed2a9d3 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -16604,7 +16604,7 @@
     if (tp != NULL && varname != NULL && varp != NULL)
     {
 	save_curtab = curtab;
-	goto_tabpage_tp(tp, TRUE);
+	goto_tabpage_tp(tp, FALSE, FALSE);
 
 	tabvarname = alloc((unsigned)STRLEN(varname) + 3);
 	if (tabvarname != NULL)
@@ -16617,7 +16617,7 @@
 
 	/* Restore current tabpage */
 	if (valid_tabpage(save_curtab))
-	    goto_tabpage_tp(save_curtab, TRUE);
+	    goto_tabpage_tp(save_curtab, FALSE, FALSE);
     }
 }
 
@@ -16654,7 +16654,7 @@
     /* set curwin to be our win, temporarily */
     *save_curwin = curwin;
     *save_curtab = curtab;
-    goto_tabpage_tp(tp, TRUE);
+    goto_tabpage_tp(tp, FALSE, FALSE);
     if (!win_valid(win))
 	return FAIL;
     curwin = win;
@@ -16672,7 +16672,7 @@
     /* Restore current tabpage and window, if still valid (autocommands can
      * make them invalid). */
     if (valid_tabpage(save_curtab))
-	goto_tabpage_tp(save_curtab, TRUE);
+	goto_tabpage_tp(save_curtab, FALSE, FALSE);
     if (win_valid(save_curwin))
     {
 	curwin = save_curwin;
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index c2f768a..9afcc28 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2482,7 +2482,7 @@
 		/* go to window "tp" */
 		if (!valid_tabpage(tp))
 		    break;
-		goto_tabpage_tp(tp, TRUE);
+		goto_tabpage_tp(tp, TRUE, TRUE);
 		tp = tp->tp_next;
 	    }
 #endif
diff --git a/src/fileio.c b/src/fileio.c
index 1ce2040..b93ae1b 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -8934,7 +8934,7 @@
 		if (wp == aucmd_win)
 		{
 		    if (tp != curtab)
-			goto_tabpage_tp(tp, TRUE);
+			goto_tabpage_tp(tp, TRUE, TRUE);
 		    win_goto(aucmd_win);
 		    goto win_found;
 		}
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 9222969..0a74489 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -27,7 +27,7 @@
 tabpage_T *find_tabpage __ARGS((int n));
 int tabpage_index __ARGS((tabpage_T *ftp));
 void goto_tabpage __ARGS((int n));
-void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_autocmds));
+void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_enter_autocmds, int trigger_leave_autocmds));
 void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
 void tabpage_move __ARGS((int nr));
 void win_goto __ARGS((win_T *wp));
diff --git a/src/testdir/test62.in b/src/testdir/test62.in
index fd1844b..933bfe5 100644
--- a/src/testdir/test62.in
+++ b/src/testdir/test62.in
Binary files differ
diff --git a/src/testdir/test62.ok b/src/testdir/test62.ok
index 0ac1fcb..df1035e 100644
--- a/src/testdir/test62.ok
+++ b/src/testdir/test62.ok
@@ -18,3 +18,71 @@
 4
 6
 E474 caught.
+=== tab split ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+a b c
+=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ===
+a b c
+=== vsplit ===
+WinLeave
+WinEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+a a
+=== call map(copy(winr), 'settabwinvar('.tabn.', v:val, ===
+a a
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+2/2
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+BufEnter
+=== tabclose 3 ===
+2/2
diff --git a/src/version.c b/src/version.c
index fea150e..02d93d9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    926,
+/**/
     925,
 /**/
     924,
diff --git a/src/window.c b/src/window.c
index 7fd434e..4616c80 100644
--- a/src/window.c
+++ b/src/window.c
@@ -44,11 +44,11 @@
 static void new_frame __ARGS((win_T *wp));
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 static tabpage_T *alloc_tabpage __ARGS((void));
-static int leave_tabpage __ARGS((buf_T *new_curbuf));
-static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_autocmds));
+static int leave_tabpage __ARGS((buf_T *new_curbuf, int trigger_leave_autocmds));
+static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void frame_fix_height __ARGS((win_T *wp));
 static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
-static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
+static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void win_free __ARGS((win_T *wp, tabpage_T *tp));
 static void frame_append __ARGS((frame_T *after, frame_T *frp));
 static void frame_insert __ARGS((frame_T *before, frame_T *frp));
@@ -353,11 +353,11 @@
 						     && valid_tabpage(oldtab))
 		    {
 			newtab = curtab;
-			goto_tabpage_tp(oldtab, TRUE);
+			goto_tabpage_tp(oldtab, TRUE, TRUE);
 			if (curwin == wp)
 			    win_close(curwin, FALSE);
 			if (valid_tabpage(newtab))
-			    goto_tabpage_tp(newtab, TRUE);
+			    goto_tabpage_tp(newtab, TRUE, TRUE);
 		    }
 		}
 		break;
@@ -2124,6 +2124,8 @@
 {
     if (firstwin == lastwin)
     {
+	buf_T	*old_curbuf = curbuf;
+
 	/*
 	 * Closing the last window in a tab page.  First go to another tab
 	 * page and then close the window and the tab page.  This avoids that
@@ -2132,7 +2134,7 @@
 	 * Don't trigger autocommands yet, they may use wrong values, so do
 	 * that below.
 	 */
-	goto_tabpage_tp(alt_tabpage(), FALSE);
+	goto_tabpage_tp(alt_tabpage(), FALSE, TRUE);
 	redraw_tabline = TRUE;
 
 	/* Safety check: Autocommands may have closed the window when jumping
@@ -2148,8 +2150,10 @@
 	/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
 	 * that now. */
 #ifdef FEAT_AUTOCMD
-	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+	if (old_curbuf != curbuf)
+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
 #endif
 	return TRUE;
     }
@@ -2341,7 +2345,7 @@
 	win_comp_pos();
     if (close_curwin)
     {
-	win_enter_ext(wp, FALSE, TRUE);
+	win_enter_ext(wp, FALSE, TRUE, TRUE, TRUE);
 #ifdef FEAT_AUTOCMD
 	if (other_buffer)
 	    /* careful: after this wp and win may be invalid! */
@@ -3529,7 +3533,7 @@
 	return FAIL;
 
     /* Remember the current windows in this Tab page. */
-    if (leave_tabpage(curbuf) == FAIL)
+    if (leave_tabpage(curbuf, TRUE) == FAIL)
     {
 	vim_free(newtp);
 	return FAIL;
@@ -3574,14 +3578,14 @@
 
 	redraw_all_later(CLEAR);
 #ifdef FEAT_AUTOCMD
-	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 #endif
 	return OK;
     }
 
     /* Failed, get back the previous Tab page */
-    enter_tabpage(curtab, curbuf, TRUE);
+    enter_tabpage(curtab, curbuf, TRUE, TRUE);
     return FAIL;
 }
 
@@ -3692,9 +3696,10 @@
  * Careful: When OK is returned need to get a new tab page very very soon!
  */
     static int
-leave_tabpage(new_curbuf)
+leave_tabpage(new_curbuf, trigger_leave_autocmds)
     buf_T	*new_curbuf UNUSED;    /* what is going to be the new curbuf,
 				       NULL if unknown */
+    int		trigger_leave_autocmds UNUSED;
 {
     tabpage_T	*tp = curtab;
 
@@ -3702,18 +3707,21 @@
     reset_VIsual_and_resel();	/* stop Visual mode */
 #endif
 #ifdef FEAT_AUTOCMD
-    if (new_curbuf != curbuf)
+    if (trigger_leave_autocmds)
     {
-	apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+	if (new_curbuf != curbuf)
+	{
+	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+	    if (curtab != tp)
+		return FAIL;
+	}
+	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+	if (curtab != tp)
+	    return FAIL;
+	apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
 	if (curtab != tp)
 	    return FAIL;
     }
-    apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-	return FAIL;
-    apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-	return FAIL;
 #endif
 #if defined(FEAT_GUI)
     /* Remove the scrollbars.  They may be added back later. */
@@ -3734,13 +3742,15 @@
 /*
  * Start using tab page "tp".
  * Only to be used after leave_tabpage() or freeing the current tab page.
- * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  */
     static void
-enter_tabpage(tp, old_curbuf, trigger_autocmds)
+enter_tabpage(tp, old_curbuf, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T	*tp;
     buf_T	*old_curbuf UNUSED;
-    int		trigger_autocmds UNUSED;
+    int		trigger_enter_autocmds UNUSED;
+    int		trigger_leave_autocmds UNUSED;
 {
     int		old_off = tp->tp_firstwin->w_winrow;
     win_T	*next_prevwin = tp->tp_prevwin;
@@ -3753,7 +3763,7 @@
     /* We would like doing the TabEnter event first, but we don't have a
      * valid current window yet, which may break some commands.
      * This triggers autocommands, thus may make "tp" invalid. */
-    win_enter_ext(tp->tp_curwin, FALSE, TRUE);
+    win_enter_ext(tp->tp_curwin, FALSE, TRUE, trigger_enter_autocmds, trigger_leave_autocmds);
     prevwin = next_prevwin;
 
     last_status(FALSE);		/* status line may appear or disappear */
@@ -3788,7 +3798,7 @@
 #ifdef FEAT_AUTOCMD
     /* Apply autocommands after updating the display, when 'rows' and
      * 'columns' have been set correctly. */
-    if (trigger_autocmds)
+    if (trigger_enter_autocmds)
     {
 	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 	if (old_curbuf != curbuf)
@@ -3869,7 +3879,7 @@
 	}
     }
 
-    goto_tabpage_tp(tp, TRUE);
+    goto_tabpage_tp(tp, TRUE, TRUE);
 
 #ifdef FEAT_GUI_TABLINE
     if (gui_use_tabline())
@@ -3879,23 +3889,28 @@
 
 /*
  * Go to tabpage "tp".
- * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  * Note: doesn't update the GUI tab.
  */
     void
-goto_tabpage_tp(tp, trigger_autocmds)
+goto_tabpage_tp(tp, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T	*tp;
-    int		trigger_autocmds;
+    int		trigger_enter_autocmds;
+    int		trigger_leave_autocmds;
 {
     /* Don't repeat a message in another tab page. */
     set_keep_msg(NULL, 0);
 
-    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
+    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer,
+					trigger_leave_autocmds) == OK)
     {
 	if (valid_tabpage(tp))
-	    enter_tabpage(tp, curbuf, trigger_autocmds);
+	    enter_tabpage(tp, curbuf, trigger_enter_autocmds,
+		    trigger_leave_autocmds);
 	else
-	    enter_tabpage(curtab, curbuf, trigger_autocmds);
+	    enter_tabpage(curtab, curbuf, trigger_enter_autocmds,
+		    trigger_leave_autocmds);
     }
 }
 
@@ -3908,7 +3923,7 @@
     tabpage_T	*tp;
     win_T	*wp;
 {
-    goto_tabpage_tp(tp, TRUE);
+    goto_tabpage_tp(tp, TRUE, TRUE);
     if (curtab == tp && win_valid(wp))
     {
 	win_enter(wp, TRUE);
@@ -4168,7 +4183,7 @@
     win_T	*wp;
     int		undo_sync;
 {
-    win_enter_ext(wp, undo_sync, FALSE);
+    win_enter_ext(wp, undo_sync, FALSE, TRUE, TRUE);
 }
 
 /*
@@ -4177,10 +4192,12 @@
  * been closed and isn't valid.
  */
     static void
-win_enter_ext(wp, undo_sync, curwin_invalid)
+win_enter_ext(wp, undo_sync, curwin_invalid, trigger_enter_autocmds, trigger_leave_autocmds)
     win_T	*wp;
     int		undo_sync;
     int		curwin_invalid;
+    int		trigger_enter_autocmds UNUSED;
+    int		trigger_leave_autocmds UNUSED;
 {
 #ifdef FEAT_AUTOCMD
     int		other_buffer = FALSE;
@@ -4190,7 +4207,7 @@
 	return;
 
 #ifdef FEAT_AUTOCMD
-    if (!curwin_invalid)
+    if (!curwin_invalid && trigger_leave_autocmds)
     {
 	/*
 	 * Be careful: If autocommands delete the window, return now.
@@ -4259,9 +4276,12 @@
     }
 
 #ifdef FEAT_AUTOCMD
-    apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
-    if (other_buffer)
-	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    if (trigger_enter_autocmds)
+    {
+	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	if (other_buffer)
+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    }
 #endif
 
 #ifdef FEAT_TITLE
