diff --git a/src/evalfunc.c b/src/evalfunc.c
index ba6f0f5..cc38d94 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4027,7 +4027,7 @@
     }
 
     /* Return information about all the buffers or a specified buffer */
-    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+    FOR_ALL_BUFFERS(buf)
     {
 	if (argbuf != NULL && argbuf != buf)
 	    continue;
@@ -5030,7 +5030,7 @@
 #ifdef FEAT_WINDOWS
     tabpage_T	*tp, *tparg = NULL;
     dict_T	*d;
-    int		tpnr = 1;
+    int		tpnr = 0;
 
     if (rettv_list_alloc(rettv) != OK)
 	return;
@@ -5044,8 +5044,9 @@
     }
 
     /* Get information about a specific tab page or all tab pages */
-    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, tpnr++)
+    FOR_ALL_TABPAGES(tp)
     {
+	tpnr++;
 	if (tparg != NULL && tp != tparg)
 	    continue;
 	d = get_tabpage_info(tp, tpnr);
@@ -5131,6 +5132,12 @@
     dict_add_nr_str(dict, "width", wp->w_width, NULL);
     dict_add_nr_str(dict, "bufnum", wp->w_buffer->b_fnum, NULL);
 
+#ifdef FEAT_QUICKFIX
+    dict_add_nr_str(dict, "quickfix", bt_quickfix(wp->w_buffer), NULL);
+    dict_add_nr_str(dict, "loclist",
+	    (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL), NULL);
+#endif
+
     /* Copy window variables */
     vars = dict_copy(wp->w_vars, TRUE, 0);
     if (vars != NULL)
@@ -5155,7 +5162,7 @@
     tabpage_T	*tp;
     win_T	*wp = NULL, *wparg = NULL;
     dict_T	*d;
-    short	tabnr, winnr;
+    short	tabnr = 0, winnr;
 #endif
 
     if (rettv_list_alloc(rettv) != OK)
@@ -5172,13 +5179,13 @@
     /* Collect information about either all the windows across all the tab
      * pages or one particular window.
      */
-    tabnr = 1;
-    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, tabnr++)
+    FOR_ALL_TABPAGES(tp)
     {
-	wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
-	winnr = 1;
-	for (; wp; wp = wp->w_next, winnr++)
+	tabnr++;
+	winnr = 0;
+	FOR_ALL_WINDOWS_IN_TAB(tp, wp)
 	{
+	    winnr++;
 	    if (wparg != NULL && wp != wparg)
 		continue;
 	    d = get_win_info(wp, tabnr, winnr);
diff --git a/src/testdir/test_bufwintabinfo.vim b/src/testdir/test_bufwintabinfo.vim
index 236ca30..fa9d97b 100644
--- a/src/testdir/test_bufwintabinfo.vim
+++ b/src/testdir/test_bufwintabinfo.vim
@@ -14,6 +14,27 @@
     hide enew
     call assert_equal(3, len(getbufinfo({'bufloaded':1})))
 
+    set tabstop&vim
+    let b:editor = 'vim'
+    let l = getbufinfo('%')
+    call assert_equal(bufnr('%'), l[0].nr)
+    call assert_equal(8, l[0].options.tabstop)
+    call assert_equal('vim', l[0].variables.editor)
+    call assert_notequal(-1, index(l[0].windows, bufwinid('%')))
+
+    if has('signs')
+	call append(0, ['Linux', 'Windows', 'Mac'])
+	sign define Mark text=>> texthl=Search
+	exe "sign place 2 line=3 name=Mark buffer=" . bufnr('%')
+	let l = getbufinfo('%')
+	call assert_equal(2, l[0].signs[0].id)
+	call assert_equal(3, l[0].signs[0].lnum)
+	call assert_equal('Mark', l[0].signs[0].name)
+	sign unplace *
+	sign undefine Mark
+	enew!
+    endif
+
     only
     let w1_id = win_getid()
     new
@@ -21,18 +42,42 @@
     tabnew | let w3_id = win_getid()
     new | let w4_id = win_getid()
     new | let w5_id = win_getid()
+    call setwinvar(0, 'signal', 'green')
     tabfirst
     let winlist = getwininfo()
     call assert_equal(5, len(winlist))
+    call assert_equal(winbufnr(2), winlist[1].bufnum)
+    call assert_equal(winheight(2), winlist[1].height)
+    call assert_equal(1, winlist[2].nr)
+    call assert_equal('auto', winlist[0].options.signcolumn)
     call assert_equal(2, winlist[3].tpnr)
+    call assert_equal('green', winlist[2].variables.signal)
+    call assert_equal(winwidth(1), winlist[0].width)
+    call assert_equal(w4_id, winlist[3].winid)
     let winfo = getwininfo(w5_id)[0]
     call assert_equal(2, winfo.tpnr)
     call assert_equal([], getwininfo(3))
 
+    call settabvar(1, 'space', 'build')
     let tablist = gettabinfo()
     call assert_equal(2, len(tablist))
     call assert_equal(3, len(tablist[1].windows))
+    call assert_equal(2, tablist[1].nr)
+    call assert_equal('build', tablist[0].variables.space)
+    call assert_equal(w2_id, tablist[0].windows[0])
     call assert_equal([], gettabinfo(3))
 
     tabonly | only
+
+    lexpr ''
+    lopen
+    copen
+    let winlist = getwininfo()
+    call assert_false(winlist[0].quickfix)
+    call assert_false(winlist[0].loclist)
+    call assert_true(winlist[1].quickfix)
+    call assert_true(winlist[1].loclist)
+    call assert_true(winlist[2].quickfix)
+    call assert_false(winlist[2].loclist)
+    wincmd t | only
 endfunction
diff --git a/src/version.c b/src/version.c
index e15fd97..50a0c7f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2215,
+/**/
     2214,
 /**/
     2213,
