diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 6e1122d..4abdd9e 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 9.1.  Last change: 2024 Mar 03
+*message.txt*   For Vim version 9.1.  Last change: 2024 Mar 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -122,7 +122,7 @@
 You cannot have two buffers with exactly the same name.  This includes the
 path leading to the file.
 
-							*E1513* >
+							*E1513*
   Cannot edit buffer. 'winfixbuf' is enabled ~
 
 If a window has 'winfixbuf' enabled, you cannot change that window's current
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;
