updated for version 7.0-146
diff --git a/src/buffer.c b/src/buffer.c
index 55cef35..c9a91ce 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1208,11 +1208,11 @@
     {
 # ifdef FEAT_WINDOWS
 	/* jump to first window containing buf if one exists ("useopen") */
-	if (vim_strchr(p_swb, 'o') && buf_jump_open_win(buf))
+	if (vim_strchr(p_swb, 'o') != NULL && buf_jump_open_win(buf))
 	    return OK;
 	/* jump to first window in any tab page containing buf if one exists
 	 * ("usetab") */
-	if (vim_strchr(p_swb, 'a') && buf_jump_open_tab(buf))
+	if (vim_strchr(p_swb, 'a') != NULL && buf_jump_open_tab(buf))
 	    return OK;
 	if (win_split(0, 0) == FAIL)
 # endif
@@ -1842,13 +1842,13 @@
     if (options & GETF_SWITCH)
     {
 	/* use existing open window for buffer if wanted */
-	if (vim_strchr(p_swb, 'o'))     /* useopen */
+	if (vim_strchr(p_swb, 'o') != NULL)	/* useopen */
 	    wp = buf_jump_open_win(buf);
 	/* use existing open window in any tab page for buffer if wanted */
-	if (vim_strchr(p_swb, 'a'))     /* usetab */
+	if (vim_strchr(p_swb, 'a') != NULL)	/* usetab */
 	    wp = buf_jump_open_tab(buf);
 	/* split window if wanted ("split") */
-	if (wp == NULL && vim_strchr(p_swb, 't') && !bufempty())
+	if (wp == NULL && vim_strchr(p_swb, 'l') != NULL && !bufempty())
 	{
 	    if (win_split(0, 0) == FAIL)
 		return FAIL;
diff --git a/src/quickfix.c b/src/quickfix.c
index 6c102d9..6268ec6 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1586,10 +1586,30 @@
 	    }
 
 	/*
-	 * If there is only one window, create a new one above the quickfix
-	 * window.
+	 * If no usable window is found and 'switchbuf' is set to 'usetab'
+	 * then search in other tabs.
 	 */
-	if (firstwin == lastwin || !usable_win)
+	if (!usable_win && vim_strchr(p_swb, 'a') != NULL)
+	{
+	    tabpage_T	*tp;
+	    win_T	*wp;
+
+	    FOR_ALL_TAB_WINDOWS(tp, wp)
+	    {
+		if (wp->w_buffer->b_fnum == qf_ptr->qf_fnum)
+		{
+		    goto_tabpage_win(tp, wp);
+		    usable_win = 1;
+		    break;
+		}
+	    }
+	}
+
+	/*
+	 * If there is only one window and is the quickfix window, create a new
+	 * one above the quickfix window.
+	 */
+	if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
 	{
 	    ll_ref = curwin->w_llist_ref;
 
diff --git a/src/version.c b/src/version.c
index 3f163f4..f402991 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    146,
+/**/
     145,
 /**/
     144,