diff --git a/src/quickfix.c b/src/quickfix.c
index 14fcfcf..244c7a4 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2011,13 +2011,9 @@
 {
     qf_info_T *qi;
 
-    qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
+    qi = (qf_info_T *)alloc_clear((unsigned)sizeof(qf_info_T));
     if (qi != NULL)
-    {
-	vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
 	qi->qf_refcount++;
-    }
-
     return qi;
 }
 
@@ -4339,14 +4335,31 @@
 }
 
 /*
+ * If the current list is not "save_qfid" and we can find the list with that ID
+ * then make it the current list.
+ * This is used when autocommands may have changed the current list.
+ */
+    static void
+qf_restore_list(qf_info_T *qi, int_u save_qfid)
+{
+    int curlist;
+
+    if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+    {
+	curlist = qf_id2nr(qi, save_qfid);
+	if (curlist >= 0)
+	    qi->qf_curlist = curlist;
+	// else: what if the list can't be found?
+    }
+}
+
+/*
  * Jump to the first entry if there is one.
  */
     static void
 qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
 {
-    // If autocommands changed the current list, then restore it
-    if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
-	qi->qf_curlist = qf_id2nr(qi, save_qfid);
+    qf_restore_list(qi, save_qfid);
 
     // Autocommands might have cleared the list, check for it
     if (!qf_list_empty(qi, qi->qf_curlist))
@@ -5012,10 +5025,7 @@
 	}
     }
 
-    if (qi->qf_lists[qi->qf_curlist].qf_id != qfid)
-	/* Autocommands changed the quickfix list.  Find the one we were
-	 * using and restore it. */
-	qi->qf_curlist = qf_id2nr(qi, qfid);
+    qf_restore_list(qi, qfid);
 
     return TRUE;
 }
@@ -5361,9 +5371,7 @@
     if (!qflist_valid(wp, save_qfid))
 	goto theend;
 
-    // If autocommands changed the current list, then restore it
-    if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
-	qi->qf_curlist = qf_id2nr(qi, save_qfid);
+    qf_restore_list(qi, save_qfid);
 
     /* Jump to first match. */
     if (!qf_list_empty(qi, qi->qf_curlist))
@@ -5684,12 +5692,9 @@
 	if (l == NULL)
 	    return FAIL;
 
-	qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
+	qi = ll_new_list();
 	if (qi != NULL)
 	{
-	    vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
-	    qi->qf_refcount++;
-
 	    if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat,
 			TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
 	    {
