diff --git a/src/auto/configure b/src/auto/configure
index 8c42e66..794fd8f 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -1009,7 +1009,7 @@
 _ACEOF
   exit 0
 fi
-exec 5>config.log
+exec 5>auto/config.log
 cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -15455,7 +15455,7 @@
 # Open the log real soon, to keep \$[0] and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
+exec 5>>auto/config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
@@ -16285,7 +16285,7 @@
     ac_config_status_args="$ac_config_status_args --quiet"
   exec 5>/dev/null
   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
+  exec 5>>auto/config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
   $ac_cs_success || { (exit 1); exit 1; }
diff --git a/src/edit.c b/src/edit.c
index b7e4160..18a1cf1 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -95,6 +95,9 @@
  * are used. */
 static char_u	  *compl_leader = NULL;
 
+static int	  compl_get_longest = FALSE;	/* put longest common string
+						   in compl_leader */
+
 static int	  compl_used_match;	/* Selected one of the matches.  When
 					   FALSE the match was edited or using
 					   the longest common string. */
@@ -119,6 +122,7 @@
 
 static void ins_ctrl_x __ARGS((void));
 static int  has_compl_option __ARGS((int dict_opt));
+static void ins_compl_longest_match __ARGS((compl_T *match));
 static void ins_compl_add_matches __ARGS((int num_matches, char_u **matches));
 static int  ins_compl_make_cyclic __ARGS((void));
 static void ins_compl_upd_pum __ARGS((void));
@@ -136,7 +140,7 @@
 static int  ins_compl_get_exp __ARGS((pos_T *ini));
 static void ins_compl_delete __ARGS((void));
 static void ins_compl_insert __ARGS((void));
-static int  ins_compl_next __ARGS((int allow_get_expansion, int count));
+static int  ins_compl_next __ARGS((int allow_get_expansion, int count, int insert_match));
 static int  ins_compl_key2dir __ARGS((int c));
 static int  ins_compl_pum_key __ARGS((int c));
 static int  ins_compl_key2count __ARGS((int c));
@@ -683,12 +687,6 @@
 #endif
 
 #ifdef FEAT_INS_EXPAND
-	/* When the popup menu is visible cursor keys change the selection. */
-	if (c == K_UP && pum_visible())
-	    c = Ctrl_P;
-	if (c == K_DOWN && pum_visible())
-	    c = Ctrl_N;
-
 	/*
 	 * Special handling of keys while the popup menu is visible or wanted
 	 * and the cursor is still in the completed word.
@@ -717,11 +715,19 @@
 		    ins_compl_addleader(c);
 		    continue;
 		}
+
+		/* Pressing Enter selects the current match. */
+		if (c == CAR || c == K_KENTER || c == NL)
+		{
+		    ins_compl_delete();
+		    ins_compl_insert();
+		}
 	    }
 	}
 
 	/* Prepare for or stop CTRL-X mode.  This doesn't do completion, but
 	 * it does fix up the text when finishing completion. */
+	compl_get_longest = FALSE;
 	if (c != K_IGNORE && ins_compl_prep(c))
 	    continue;
 #endif
@@ -1103,6 +1109,10 @@
 	    break;
 
 	case K_UP:	/* <Up> */
+#ifdef FEAT_INS_EXPAND
+	    if (pum_visible())
+		goto docomplete;
+#endif
 	    if (mod_mask & MOD_MASK_SHIFT)
 		ins_pageup();
 	    else
@@ -1120,6 +1130,10 @@
 	    break;
 
 	case K_DOWN:	/* <Down> */
+#ifdef FEAT_INS_EXPAND
+	    if (pum_visible())
+		goto docomplete;
+#endif
 	    if (mod_mask & MOD_MASK_SHIFT)
 		ins_pagedown();
 	    else
@@ -1860,7 +1874,7 @@
 	/* if the next ^X<> won't ADD nothing, then reset
 	 * compl_cont_status */
 	if (compl_cont_status & CONT_N_ADDS)
-	    compl_cont_status = (compl_cont_status | CONT_INTRPT);
+	    compl_cont_status |= CONT_INTRPT;
 	else
 	    compl_cont_status = 0;
 	/* We're not sure which CTRL-X mode it will be yet */
@@ -2138,10 +2152,70 @@
 	compl_first_match = match;
     compl_curr_match = match;
 
+    /*
+     * Find the longest common string if still doing that.
+     */
+    if (compl_get_longest && (flags & ORIGINAL_TEXT) == 0)
+	ins_compl_longest_match(match);
+
     return OK;
 }
 
 /*
+ * Reduce the longest common string for match "match".
+ */
+    static void
+ins_compl_longest_match(match)
+    compl_T	*match;
+{
+    char_u	*p, *s;
+    int		l;
+    int		had_match;
+
+    if (compl_leader == NULL)
+	/* First match, use it as a whole. */
+	compl_leader = vim_strsave(match->cp_str);
+    else
+    {
+	/* Reduce the text if this match differs from compl_leader. */
+	for (p = compl_leader, s = match->cp_str; *p != NUL; p += l, s += l)
+	{
+#ifdef FEAT_MBYTE
+	    if (has_mbyte)
+	    {
+		l = mb_ptr2len(p);
+		if (STRNCMP(p, s, l) != 0)
+			break;
+	    }
+	    else
+#endif
+	    {
+		if (*p != *s)
+		    break;
+		l = 1;
+	    }
+	}
+
+	if (*p != NUL)
+	{
+	    /* Leader was shortened, need to change the inserted text. */
+	    *p = NUL;
+	    had_match = (curwin->w_cursor.col > compl_col);
+	    ins_compl_delete();
+	    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+	    ins_redraw(FALSE);
+
+	    /* When the match isn't there (to avoid matching itself) remove it
+	     * again after redrawing. */
+	    if (!had_match)
+		ins_compl_delete();
+	}
+
+	compl_used_match = FALSE;
+    }
+}
+
+/*
  * Add an array of matches to the list of matches.
  * Frees matches[].
  */
@@ -2231,7 +2305,7 @@
 pum_wanted()
 {
     /* 'completeopt' must contain "menu" */
-    if (*p_cot == NUL)
+    if (vim_strchr(p_cot, 'm') == NULL)
 	return FALSE;
 
     /* The display looks bad on a B&W display. */
@@ -2762,6 +2836,14 @@
     if (c == K_SELECT)
 	return retval;
 
+    /* Set "compl_get_longest" when finding the first matches. */
+    if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET
+				      || (ctrl_x_mode == 0 && !compl_started))
+    {
+	compl_get_longest = (vim_strchr(p_cot, 'l') != NULL);
+	compl_used_match = TRUE;
+    }
+
     if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET)
     {
 	/*
@@ -3356,7 +3438,7 @@
 		    last_match_pos = *pos;
 		}
 		else if (first_match_pos.lnum == last_match_pos.lnum
-			 && first_match_pos.col == last_match_pos.col)
+				 && first_match_pos.col == last_match_pos.col)
 		    found_new_match = FAIL;
 		if (found_new_match == FAIL)
 		{
@@ -3470,9 +3552,10 @@
 	{
 	    if (got_int)
 		break;
+	    /* Fill the popup menu as soon as possible. */
 	    if (pum_wanted() && type != -1)
-		/* Fill the popup menu as soon as possible. */
 		ins_compl_check_keys(0);
+
 	    if ((ctrl_x_mode != 0 && ctrl_x_mode != CTRL_X_WHOLE_LINE)
 							 || compl_interrupted)
 		break;
@@ -3547,10 +3630,11 @@
  * calls this function with "allow_get_expansion" FALSE.
  */
     static int
-ins_compl_next(allow_get_expansion, count)
+ins_compl_next(allow_get_expansion, count, insert_match)
     int	    allow_get_expansion;
     int	    count;		/* repeat completion this many times; should
 				   be at least 1 */
+    int	    insert_match;	/* Insert the newly selected match */
 {
     int	    num_matches = -1;
     int	    i;
@@ -3558,11 +3642,23 @@
     compl_T *found_compl = NULL;
     int	    found_end = FALSE;
 
-    if (allow_get_expansion)
+    if (compl_leader != NULL
+			&& (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
     {
+	/* Set "compl_shown_match" to the actually shown match, it may differ
+	 * when "compl_leader" is used to omit some of the matches. */
+	while (STRNCMP(compl_shown_match->cp_str,
+				     compl_leader, STRLEN(compl_leader)) != 0
+		&& compl_shown_match->cp_next != NULL
+		&& compl_shown_match->cp_next != compl_first_match)
+	    compl_shown_match = compl_shown_match->cp_next;
+    }
+
+    if (allow_get_expansion && insert_match
+				  && (!compl_get_longest || compl_used_match))
 	/* Delete old text to be replaced */
 	ins_compl_delete();
-    }
+
     compl_pending = FALSE;
 
     /* Repeat this for when <PageUp> or <PageDown> is typed.  But don't wrap
@@ -3615,14 +3711,25 @@
 	}
     }
 
-    /* Insert the text of the new completion */
-    ins_compl_insert();
+    /* Insert the text of the new completion, or the compl_leader. */
+    if (insert_match)
+    {
+	if (!compl_get_longest || compl_used_match)
+	    ins_compl_insert();
+	else
+	    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+    }
+    else
+	compl_used_match = FALSE;
 
     if (!allow_get_expansion)
     {
 	/* may undisplay the popup menu first */
 	ins_compl_upd_pum();
 
+	/* redraw to show the user what was inserted */
+	update_screen(0);
+
 	/* display the updated popup menu */
 	ins_compl_show_pum();
 
@@ -3685,13 +3792,14 @@
 	{
 	    c = safe_vgetc();	/* Eat the character */
 	    compl_shows_dir = ins_compl_key2dir(c);
-	    (void)ins_compl_next(FALSE, ins_compl_key2count(c));
+	    (void)ins_compl_next(FALSE, ins_compl_key2count(c),
+						    c != K_UP && c != K_DOWN);
 	}
 	else if (c != Ctrl_R)
 	    compl_interrupted = TRUE;
     }
     if (compl_pending && !got_int)
-	(void)ins_compl_next(FALSE, 1);
+	(void)ins_compl_next(FALSE, 1, TRUE);
 }
 
 /*
@@ -3702,8 +3810,9 @@
 ins_compl_key2dir(c)
     int		c;
 {
-    if (c == Ctrl_P || c == Ctrl_L || (pum_visible()
-			 && (c == K_PAGEUP || c == K_KPAGEUP || c == K_S_UP)))
+    if (c == Ctrl_P || c == Ctrl_L
+	    || (pum_visible() && (c == K_PAGEUP || c == K_KPAGEUP
+						|| c == K_S_UP || c == K_UP)))
 	return BACKWARD;
     return FORWARD;
 }
@@ -3717,7 +3826,8 @@
     int		c;
 {
     return pum_visible() && (c == K_PAGEUP || c == K_KPAGEUP || c == K_S_UP
-		     || c == K_PAGEDOWN || c == K_KPAGEDOWN || c == K_S_DOWN);
+		     || c == K_PAGEDOWN || c == K_KPAGEDOWN || c == K_S_DOWN
+		     || c == K_UP || c == K_DOWN);
 }
 
 /*
@@ -3730,7 +3840,7 @@
 {
     int		h;
 
-    if (ins_compl_pum_key(c))
+    if (ins_compl_pum_key(c) && c != K_UP && c != K_DOWN)
     {
 	h = pum_get_height();
 	if (h > 3)
@@ -3783,7 +3893,8 @@
 	 * been split because it was longer than 'tw').  if SOL is set then
 	 * skip the previous pattern, a word at the beginning of the line has
 	 * been inserted, we'll look for that  -- Acevedo. */
-	if ((compl_cont_status & CONT_INTRPT) && compl_cont_mode == ctrl_x_mode)
+	if ((compl_cont_status & CONT_INTRPT) == CONT_INTRPT
+					    && compl_cont_mode == ctrl_x_mode)
 	{
 	    /*
 	     * it is a continued search
@@ -4129,9 +4240,10 @@
     compl_shows_dir = compl_direction;
 
     /*
-     * Find next match.
+     * Find next match (and following matches).
      */
-    n = ins_compl_next(TRUE, ins_compl_key2count(c));
+    n = ins_compl_next(TRUE, ins_compl_key2count(c),
+						c != K_UP && c != K_DOWN);
 
     /* may undisplay the popup menu */
     ins_compl_upd_pum();
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 7a44253..f921965 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -50,7 +50,7 @@
 static void	    cs_fill_results __ARGS((char *, int , int *, char ***,
 			char ***, int *));
 static int	    cs_find __ARGS((exarg_T *eap));
-static int	    cs_find_common __ARGS((char *opt, char *pat, int, int ));
+static int	    cs_find_common __ARGS((char *opt, char *pat, int, int, int));
 static int	    cs_help __ARGS((exarg_T *eap));
 static void	    cs_init __ARGS((void));
 static void	    clear_csinfo __ARGS((int i));
@@ -183,7 +183,8 @@
     case 0 :
 	if (cs_check_for_connections())
 	{
-	    ret = cs_find_common("g", (char *)(eap->arg), eap->forceit, FALSE);
+	    ret = cs_find_common("g", (char *)(eap->arg), eap->forceit, FALSE,
+				 FALSE);
 	    if (ret == FALSE)
 	    {
 		cs_free_tags();
@@ -211,7 +212,7 @@
 		if (cs_check_for_connections())
 		{
 		    ret = cs_find_common("g", (char *)(eap->arg), eap->forceit,
-					 FALSE);
+					 FALSE, FALSE);
 		    if (ret == FALSE)
 			cs_free_tags();
 		}
@@ -219,7 +220,8 @@
 	}
 	else if (cs_check_for_connections())
 	{
-	    ret = cs_find_common("g", (char *)(eap->arg), eap->forceit, FALSE);
+	    ret = cs_find_common("g", (char *)(eap->arg), eap->forceit, FALSE,
+				 FALSE);
 	    if (ret == FALSE)
 		cs_free_tags();
 	}
@@ -967,7 +969,8 @@
 	return FALSE;
     }
 
-    return cs_find_common(opt, pat, eap->forceit, TRUE);
+    return cs_find_common(opt, pat, eap->forceit, TRUE,
+			  eap->cmdidx == CMD_lcscope);
 } /* cs_find */
 
 
@@ -977,11 +980,12 @@
  * common code for cscope find, shared by cs_find() and do_cstag()
  */
     static int
-cs_find_common(opt, pat, forceit, verbose)
+cs_find_common(opt, pat, forceit, verbose, use_ll)
     char *opt;
     char *pat;
     int forceit;
     int verbose;
+    int	use_ll;
 {
     int i;
     char *cmd;
@@ -1099,12 +1103,16 @@
 	/* fill error list */
 	FILE *f;
 	char_u *tmp = vim_tempname('c');
+	qf_info_T   *qi = NULL;
+	win_T	    *wp = NULL;
 
 	f = mch_fopen((char *)tmp, "w");
 	cs_file_results(f, nummatches);
 	fclose(f);
+	if (use_ll)	    /* Use location list */
+	    wp = curwin;
 	/* '-' starts a new error list */
-	if (qf_init(NULL, tmp, (char_u *)"%f%*\\t%l%*\\t%m", *qfpos == '-') > 0)
+	if (qf_init(wp, tmp, (char_u *)"%f%*\\t%l%*\\t%m", *qfpos == '-') > 0)
 	{
 # ifdef FEAT_WINDOWS
 	    if (postponed_split != 0)
@@ -1117,7 +1125,14 @@
 		postponed_split = 0;
 	    }
 # endif
-	    qf_jump(NULL, 0, 0, forceit);
+	    if (use_ll)
+		/*
+		 * In the location list window, use the displayed location
+		 * list. Otherwise, use the location list for the window.
+		 */
+		qi = (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL) ?
+				    wp->w_llist_ref : wp->w_llist;
+	    qf_jump(qi, 0, 0, forceit);
 	}
 	mch_remove(tmp);
 	vim_free(tmp);
diff --git a/src/option.c b/src/option.c
index 079e472..62cd0e7 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2628,7 +2628,7 @@
 static char *(p_fcl_values[]) = {"all", NULL};
 #endif
 #ifdef FEAT_INS_EXPAND
-static char *(p_cot_values[]) = {"menu", NULL};
+static char *(p_cot_values[]) = {"menu", "longest", NULL};
 #endif
 
 static void set_option_default __ARGS((int, int opt_flags, int compatible));
diff --git a/src/option.h b/src/option.h
index ada0c0b..f1714ae 100644
--- a/src/option.h
+++ b/src/option.h
@@ -302,7 +302,7 @@
 #define LISPWORD_VALUE	"defun,define,defmacro,set!,lambda,if,case,let,flet,let*,letrec,do,do*,define-syntax,let-syntax,letrec-syntax,destructuring-bind,defpackage,defparameter,defstruct,deftype,defvar,do-all-symbols,do-external-symbols,do-symbols,dolist,dotimes,ecase,etypecase,eval-when,labels,macrolet,multiple-value-bind,multiple-value-call,multiple-value-prog1,multiple-value-setq,prog1,progv,typecase,unless,unwind-protect,when,with-input-from-string,with-open-file,with-open-stream,with-output-to-string,with-package-iterator,define-condition,handler-bind,handler-case,restart-bind,restart-case,with-simple-restart,store-value,use-value,muffle-warning,abort,continue,with-slots,with-slots*,with-accessors,with-accessors*,defclass,defmethod,print-unreadable-object"
 
 /*
- * The following are actual variabables for the options
+ * The following are actual variables for the options
  */
 
 #ifdef FEAT_RIGHTLEFT
diff --git a/src/quickfix.c b/src/quickfix.c
index ba6bcf0..7243e1b 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -125,6 +125,7 @@
 static buf_T	*load_dummy_buffer __ARGS((char_u *fname));
 static void	wipe_dummy_buffer __ARGS((buf_T *buf));
 static void	unload_dummy_buffer __ARGS((buf_T *buf));
+static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
 
 /* Quickfix window check helper macro */
 #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
@@ -154,7 +155,11 @@
 	return FAIL;
 
     if (wp != NULL)
-	qi = GET_LOC_LIST(wp);
+    {
+	qi = ll_get_or_alloc_list(wp);
+	if (qi == NULL)
+	    return FAIL;
+    }
 
     return qf_init_ext(qi, efile, curbuf, NULL, errorformat, newlist,
 						    (linenr_T)0, (linenr_T)0);
@@ -2628,12 +2633,7 @@
 
     if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
 	|| eap->cmdidx == CMD_lgrepadd)
-    {
-	qi = ll_get_or_alloc_list(curwin);
-	if (qi == NULL)
-	    return;
 	wp = curwin;
-    }
 
     autowrite_all();
     fname = get_mef_name();
@@ -2678,7 +2678,11 @@
 					   (eap->cmdidx != CMD_grepadd
 					    && eap->cmdidx != CMD_lgrepadd)) > 0
 	    && !eap->forceit)
+    {
+	if (wp != NULL)
+	    qi = GET_LOC_LIST(wp);
 	qf_jump(qi, 0, 0, FALSE);		/* display first error */
+    }
 
     mch_remove(fname);
     vim_free(fname);
@@ -2832,12 +2836,7 @@
 
     if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
 	|| eap->cmdidx == CMD_laddfile)
-    {
-	qi = ll_get_or_alloc_list(curwin);
-	if (qi == NULL)
-	    return;
 	wp = curwin;
-    }
 
     if (*eap->arg != NUL)
 	set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE);
@@ -2856,7 +2855,11 @@
 				  && eap->cmdidx != CMD_laddfile)) > 0
 				  && (eap->cmdidx == CMD_cfile
 					     || eap->cmdidx == CMD_lfile))
+    {
+	if (wp != NULL)
+	    qi = GET_LOC_LIST(wp);
 	qf_jump(qi, 0, 0, eap->forceit);	/* display first error */
+    }
 }
 
 /*
@@ -3517,11 +3520,11 @@
 	if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
 		|| (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
 	{
-	    if (qf_init_ext(qi, NULL, NULL, tv, p_efm,
-			    (eap->cmdidx == CMD_cexpr
-			     || eap->cmdidx == CMD_lexpr),
+	    int	    expr_cmd = (eap->cmdidx == CMD_cexpr
+				|| eap->cmdidx == CMD_lexpr);
+	    if (qf_init_ext(qi, NULL, NULL, tv, p_efm, expr_cmd,
 						 (linenr_T)0, (linenr_T)0) > 0
-		    && (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr))
+		    && expr_cmd)
 		qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
 	}
 	else
diff --git a/src/version.h b/src/version.h
index 990168a..8324c33 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 9)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 9, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 10)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 10, compiled "
