diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index c9834d2..7233893 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -460,26 +460,33 @@
 
     if (curwin->w_p_wfb)
     {
-        if ((eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) && !eap->forceit)
-        {
-            // Disallow :ldo if 'winfixbuf' is applied
-            semsg("%s", e_winfixbuf_cannot_go_to_buffer);
-            return;
-        }
+	if ((eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) &&
+		!eap->forceit)
+	{
+	    // Disallow :ldo if 'winfixbuf' is applied
+	    emsg(_(e_winfixbuf_cannot_go_to_buffer));
+	    return;
+	}
 
-        if (win_valid(prevwin))
-            // Change the current window to another because 'winfixbuf' is enabled
-            curwin = prevwin;
-        else
-        {
-            // Split the window, which will be 'nowinfixbuf', and set curwin to that
-            exarg_T new_eap;
-            CLEAR_FIELD(new_eap);
-            new_eap.cmdidx = CMD_split;
-            new_eap.cmd = (char_u *)"split";
-            new_eap.arg = (char_u *)"";
-            ex_splitview(&new_eap);
-        }
+	if (win_valid(prevwin) && !prevwin->w_p_wfb)
+	{
+	    // 'winfixbuf' is set; attempt to change to a window without it.
+	    win_goto(prevwin);
+	}
+	if (curwin->w_p_wfb)
+	{
+	    // Split the window, which will be 'nowinfixbuf', and set curwin to
+	    // that
+	    win_split(0, 0);
+
+	    if (curwin->w_p_wfb)
+	    {
+		// Autocommands set 'winfixbuf' or sent us to another window
+		// with it set.  Give up.
+		emsg(_(e_winfixbuf_cannot_go_to_buffer));
+		return;
+	    }
+	}
     }
 
 #if defined(FEAT_SYN_HL)
diff --git a/src/quickfix.c b/src/quickfix.c
index 02a69d2..ef08e09 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3146,7 +3146,8 @@
 	    // Didn't find it, go to the window before the quickfix
 	    // window, unless 'switchbuf' contains 'uselast': in this case we
 	    // try to jump to the previously used window first.
-	    if ((swb_flags & SWB_USELAST) && win_valid(prevwin) && !prevwin->w_p_wfb)
+	    if ((swb_flags & SWB_USELAST) && win_valid(prevwin) &&
+		    !prevwin->w_p_wfb)
 		win = prevwin;
 	    else if (altwin != NULL)
 		win = altwin;
@@ -3158,7 +3159,8 @@
 	}
 
 	// Remember a usable window.
-	if (altwin == NULL && !win->w_p_pvw && !win->w_p_wfb && bt_normal(win->w_buffer))
+	if (altwin == NULL && !win->w_p_pvw && !win->w_p_wfb &&
+		bt_normal(win->w_buffer))
 	    altwin = win;
     }
 
@@ -3262,30 +3264,48 @@
     }
     else
     {
-	if (!forceit && curwin->w_p_wfb)
+	int	fnum = qf_ptr->qf_fnum;
+
+	if (!forceit && curwin->w_p_wfb && curbuf->b_fnum != fnum)
 	{
 	    if (qi->qfl_type == QFLT_LOCATION)
 	    {
-	        // Location lists cannot split or reassign their window
-	        // so 'winfixbuf' windows must fail
-	        semsg("%s", e_winfixbuf_cannot_go_to_buffer);
-	        return QF_ABORT;
+		// Location lists cannot split or reassign their window
+		// so 'winfixbuf' windows must fail
+		emsg(_(e_winfixbuf_cannot_go_to_buffer));
+		return FAIL;
 	    }
 
-	    if (!win_valid(prevwin))
+	    if (win_valid(prevwin) && !prevwin->w_p_wfb &&
+		    !bt_quickfix(prevwin->w_buffer))
 	    {
-	        // Split the window, which will be 'nowinfixbuf', and set curwin to that
-	        exarg_T new_eap;
-	        CLEAR_FIELD(new_eap);
-	        new_eap.cmdidx = CMD_split;
-	        new_eap.cmd = (char_u *)"split";
-	        new_eap.arg = (char_u *)"";
-	        ex_splitview(&new_eap);
+		// 'winfixbuf' is set; attempt to change to a window without it
+		// that isn't a quickfix/location list window.
+		win_goto(prevwin);
+	    }
+	    if (curwin->w_p_wfb)
+	    {
+		// Split the window, which will be 'nowinfixbuf', and set curwin
+		// to that
+		if (win_split(0, 0) == OK)
+		    *opened_window = TRUE;
+
+		if (curwin->w_p_wfb)
+		{
+		    // Autocommands set 'winfixbuf' or sent us to another window
+		    // with it set.  Give up, but don't return immediately, as
+		    // they may have messed with the list.
+		    emsg(_(e_winfixbuf_cannot_go_to_buffer));
+		    retval = FAIL;
+		}
 	    }
 	}
 
-	retval = buflist_getfile(qf_ptr->qf_fnum,
-		(linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+	if (retval == OK)
+	{
+	    retval = buflist_getfile(fnum,
+		    (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+	}
     }
 
     // If a location list, check whether the associated window is still
diff --git a/src/testdir/test_winfixbuf.vim b/src/testdir/test_winfixbuf.vim
index 2dffbe1..8a1862c 100644
--- a/src/testdir/test_winfixbuf.vim
+++ b/src/testdir/test_winfixbuf.vim
@@ -1254,14 +1254,27 @@
   call s:reset_all_buffers()
 
   let [l:first, l:middle, _] = s:make_simple_location_list()
-  lnext!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
 
-  call assert_fails("lNext", "E1513:")
+  lnext!
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:middle, bufnr())
 
-  lnext!  " Reset for the next test
+  call assert_fails("lNext", "E1513:")
+  " Ensure the entry didn't change.
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:middle, bufnr())
+
+  lnext!
+  call assert_equal(3, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:middle, bufnr())
 
   lNext!
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:middle, bufnr())
+
+  lNext!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:first, bufnr())
 endfunc
 
@@ -1271,14 +1284,23 @@
   call s:reset_all_buffers()
 
   let [l:first, l:current, _] = s:make_simple_location_list()
-  lnext!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
 
-  call assert_fails("lNfile", "E1513:")
+  lnext!
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:current, bufnr())
 
-  lnext!  " Reset for the next test
+  call assert_fails("lNfile", "E1513:")
+  " Ensure the entry didn't change.
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:current, bufnr())
+
+  lnext!
+  call assert_equal(3, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:current, bufnr())
 
   lNfile!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:first, bufnr())
 endfunc
 
@@ -1485,14 +1507,18 @@
   call s:reset_all_buffers()
 
   let [_, l:current, l:last] = s:make_simple_location_list()
-  lnext!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
 
-  call assert_fails("lnfile", "E1513:")
+  lnext!
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:current, bufnr())
 
-  lprevious!  " Reset for the next test call
+  call assert_fails("lnfile", "E1513:")
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:current, bufnr())
 
   lnfile!
+  call assert_equal(4, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:last, bufnr())
 endfunc
 
@@ -1519,14 +1545,19 @@
   call s:reset_all_buffers()
 
   let [l:first, l:middle, _] = s:make_simple_location_list()
-  lnext!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
 
-  call assert_fails("lprevious", "E1513:")
+  lnext!
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:middle, bufnr())
 
-  lnext!  " Reset for the next test call
+  call assert_fails("lprevious", "E1513:")
+  " Ensure the entry didn't change.
+  call assert_equal(2, getloclist(0, #{idx: 0}).idx)
+  call assert_equal(l:middle, bufnr())
 
   lprevious!
+  call assert_equal(1, getloclist(0, #{idx: 0}).idx)
   call assert_equal(l:first, bufnr())
 endfunc
 
@@ -3134,17 +3165,87 @@
 func Test_quickfix_switchbuf_invalid_prevwin()
   call s:reset_all_buffers()
 
-  let [l:first, _] = s:make_simple_quickfix()
-  call assert_notequal(l:first, bufnr())
-  call assert_equal(1, winnr('$'))
+  call s:make_simple_quickfix()
+  call assert_equal(1, getqflist(#{idx: 0}).idx)
 
   set switchbuf=uselast
   split
   copen
   execute winnr('#') 'quit'
+  call assert_equal(2, winnr('$'))
 
-  call assert_fails('cfirst', 'E1513:')
+  cnext  " Would've triggered a null pointer member access
+  call assert_equal(2, getqflist(#{idx: 0}).idx)
+
   set switchbuf&
 endfunc
 
+func Test_listdo_goto_prevwin()
+  call s:reset_all_buffers()
+  call s:make_buffers_list()
+
+  new
+  call assert_equal(0, &winfixbuf)
+  wincmd p
+  call assert_equal(1, &winfixbuf)
+  call assert_notequal(bufnr(), bufnr('#'))
+
+  augroup ListDoGotoPrevwin
+    au!
+    au BufLeave * let s:triggered = 1
+          \| call assert_equal(bufnr(), winbufnr(winnr()))
+  augroup END
+  " Should correctly switch to the window without 'winfixbuf', and curbuf should
+  " be consistent with curwin->w_buffer for autocommands.
+  bufdo "
+  call assert_equal(0, &winfixbuf)
+  call assert_equal(1, s:triggered)
+  unlet! s:triggered
+  au! ListDoGotoPrevwin
+
+  set winfixbuf
+  wincmd p
+  call assert_equal(2, winnr('$'))
+  " Both curwin and prevwin have 'winfixbuf' set, so should split a new window
+  " without it set.
+  bufdo "
+  call assert_equal(0, &winfixbuf)
+  call assert_equal(3, winnr('$'))
+
+  quit
+  call assert_equal(2, winnr('$'))
+  call assert_equal(1, &winfixbuf)
+  augroup ListDoGotoPrevwin
+    au!
+    au WinEnter * ++once set winfixbuf
+  augroup END
+  " Same as before, but naughty autocommands set 'winfixbuf' for the new window.
+  " :bufdo should give up in this case.
+  call assert_fails('bufdo "', 'E1513:')
+
+  au! ListDoGotoPrevwin
+  augroup! ListDoGotoPrevwin
+endfunc
+
+func Test_quickfix_changed_split_failed()
+  call s:reset_all_buffers()
+
+  call s:make_simple_quickfix()
+  call assert_equal(1, winnr('$'))
+
+  " Quickfix code will open a split in an attempt to get a 'nowinfixbuf' window
+  " to switch buffers in.  Interfere with things by setting 'winfixbuf' in it.
+  augroup QfChanged
+    au!
+    au WinEnter * ++once call assert_equal(2, winnr('$'))
+          \| set winfixbuf | call setqflist([], 'f')
+  augroup END
+  call assert_fails('cnext', ['E1513:', 'E925:'])
+  " Check that the split was automatically closed.
+  call assert_equal(1, winnr('$'))
+
+  au! QfChanged
+  augroup! QfChanged
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 46781f0..8c48034 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    150,
+/**/
     149,
 /**/
     148,
diff --git a/src/window.c b/src/window.c
index 435bdc9..77d9bf7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -167,7 +167,7 @@
 {
     if (curwin->w_p_wfb)
     {
-	semsg("%s", e_winfixbuf_cannot_go_to_buffer);
+	emsg(_(e_winfixbuf_cannot_go_to_buffer));
 	return FALSE;
     }
     return TRUE;
@@ -183,7 +183,7 @@
 {
     if (!forceit && curwin->w_p_wfb)
     {
-	semsg("%s", e_winfixbuf_cannot_go_to_buffer);
+	emsg(_(e_winfixbuf_cannot_go_to_buffer));
 	return FALSE;
     }
     return TRUE;
