diff --git a/src/quickfix.c b/src/quickfix.c
index 1082fbd..5cbb151 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -4643,15 +4643,13 @@
  * Parse text from 'di' and return the quickfix list items
  */
     static int
-qf_get_list_from_text(dictitem_T *di, dict_T *retdict)
+qf_get_list_from_lines(dictitem_T *di, dict_T *retdict)
 {
     int		status = FAIL;
     qf_info_T	*qi;
 
-    /* Only string and list values are supported */
-    if ((di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
-	    || (di->di_tv.v_type == VAR_LIST
-		&& di->di_tv.vval.v_list != NULL))
+    /* Only a List value is supported */
+    if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL)
     {
 	list_T	*l = list_alloc();
 
@@ -4693,8 +4691,8 @@
     dictitem_T	*di;
     int		flags = QF_GETLIST_NONE;
 
-    if ((di = dict_find(what, (char_u *)"text", -1)) != NULL)
-	return qf_get_list_from_text(di, retdict);
+    if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
+	return qf_get_list_from_lines(di, retdict);
 
     if (wp != NULL)
 	qi = GET_LOC_LIST(wp);
@@ -5053,12 +5051,10 @@
 	}
     }
 
-    if ((di = dict_find(what, (char_u *)"text", -1)) != NULL)
+    if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
     {
-	/* Only string and list values are supported */
-	if ((di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
-		|| (di->di_tv.v_type == VAR_LIST
-					     && di->di_tv.vval.v_list != NULL))
+	/* Only a List value is supported */
+	if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL)
 	{
 	    if (action == 'r')
 		qf_free_items(qi, qf_idx);
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index d6b65e3..64f1bae 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -2299,25 +2299,26 @@
   call s:setup_commands(a:cchar)
 
   let t = ["File1:10:Line10", "File1:20:Line20"]
-  call g:Xsetlist([], ' ', {'text' : t})
-  call g:Xsetlist([], 'a', {'text' : "File1:30:Line30"})
+  call g:Xsetlist([], ' ', {'lines' : t})
+  call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]})
 
   let l = g:Xgetlist()
   call assert_equal(3, len(l))
   call assert_equal(20, l[1].lnum)
   call assert_equal('Line30', l[2].text)
-  call g:Xsetlist([], 'r', {'text' : "File2:5:Line5"})
+  call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]})
   let l = g:Xgetlist()
   call assert_equal(1, len(l))
   call assert_equal('Line5', l[0].text)
-  call assert_equal(-1, g:Xsetlist([], 'a', {'text' : 10}))
+  call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10}))
+  call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"}))
 
   call g:Xsetlist([], 'f')
   " Add entries to multiple lists
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : ["File1:10:Line10"]})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : ["File2:20:Line20"]})
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : ["File1:15:Line15"]})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : ["File2:25:Line25"]})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]})
   call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text)
   call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text)
 endfunc
@@ -2334,10 +2335,10 @@
   call g:Xsetlist([], 'f')
   Xexpr "" | Xexpr ""
 
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "Entering dir 'Xone/a'"})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "Entering dir 'Xtwo/a'"})
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "one.txt:3:one one one"})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "two.txt:5:two two two"})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]})
 
   let l1 = g:Xgetlist({'nr':1, 'items':1})
   let l2 = g:Xgetlist({'nr':2, 'items':1})
@@ -2371,10 +2372,10 @@
   call g:Xsetlist([], 'f')
   Xexpr "" | Xexpr ""
 
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "[one.txt]"})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "[two.txt]"})
-  call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "(3,5) one one one"})
-  call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "(5,9) two two two"})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]})
+  call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]})
+  call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]})
 
   let l1 = g:Xgetlist({'nr':1, 'items':1})
   let l2 = g:Xgetlist({'nr':2, 'items':1})
@@ -2523,28 +2524,26 @@
 
 " Test for getting the quickfix list items from some text without modifying
 " the quickfix stack
-func XgetListFromText(cchar)
+func XgetListFromLines(cchar)
   call s:setup_commands(a:cchar)
   call g:Xsetlist([], 'f')
 
-  let l = g:Xgetlist({'text' : "File1:10:Line10"}).items
-  call assert_equal(1, len(l))
-  call assert_equal('Line10', l[0].text)
-
-  let l = g:Xgetlist({'text' : ["File2:20:Line20", "File2:30:Line30"]}).items
+  let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items
   call assert_equal(2, len(l))
   call assert_equal(30, l[1].lnum)
 
-  call assert_equal({}, g:Xgetlist({'text' : 10}))
-  call assert_equal([], g:Xgetlist({'text' : []}).items)
+  call assert_equal({}, g:Xgetlist({'lines' : 10}))
+  call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'}))
+  call assert_equal([], g:Xgetlist({'lines' : []}).items)
+  call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items)
 
   " Make sure that the quickfix stack is not modified
   call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr)
 endfunc
 
-func Test_get_list_from_text()
-  call XgetListFromText('c')
-  call XgetListFromText('l')
+func Test_get_list_from_lines()
+  call XgetListFromLines('c')
+  call XgetListFromLines('l')
 endfunc
 
 " Tests for the quickfix list id
@@ -2567,7 +2566,7 @@
 
   call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]})
   call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context)
-  call g:Xsetlist([], 'a', {'id':start_id+1, 'text':'F1:10:L10'})
+  call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']})
   call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text)
   call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'}))
   call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'}))
diff --git a/src/version.c b/src/version.c
index d5257a7..4eff429 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1031,
+/**/
     1030,
 /**/
     1029,
