diff --git a/src/globals.h b/src/globals.h
index 573dc98..4b916ef 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1418,7 +1418,10 @@
 EXTERN char_u e_invalpat[]	INIT(= N_("E682: Invalid search pattern or delimiter"));
 #endif
 EXTERN char_u e_bufloaded[]	INIT(= N_("E139: File is loaded in another buffer"));
+#if defined(FEAT_SYN_HL) || \
+	(defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
 EXTERN char_u e_notset[]	INIT(= N_("E764: Option '%s' is not set"));
+#endif
 
 #ifdef MACOS_X_UNIX
 EXTERN short disallow_gui	INIT(= FALSE);
diff --git a/src/search.c b/src/search.c
index 21daaa3..456b694 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4085,11 +4085,10 @@
  * Find quote under the cursor, cursor at end.
  * Returns TRUE if found, else FALSE.
  */
-/*ARGSUSED*/
     int
 current_quote(oap, count, include, quotechar)
     oparg_T	*oap;
-    long	count;		/* not used */
+    long	count;
     int		include;	/* TRUE == include quote char */
     int		quotechar;	/* Quote character */
 {
@@ -4100,15 +4099,51 @@
 #ifdef FEAT_VISUAL
     int		vis_empty = TRUE;	/* Visual selection <= 1 char */
     int		vis_bef_curs = FALSE;	/* Visual starts before cursor */
+    int		inside_quotes = FALSE;	/* Looks like "i'" done before */
+    int		selected_quote = FALSE;	/* Has quote inside selection */
+    int		i;
 
     /* Correct cursor when 'selection' is exclusive */
     if (VIsual_active)
     {
+	vis_bef_curs = lt(VIsual, curwin->w_cursor);
 	if (*p_sel == 'e' && vis_bef_curs)
 	    dec_cursor();
 	vis_empty = equalpos(VIsual, curwin->w_cursor);
-	vis_bef_curs = lt(VIsual, curwin->w_cursor);
     }
+
+    if (!vis_empty)
+    {
+	/* Check if the existing selection exactly spans the text inside
+	 * quotes. */
+	if (vis_bef_curs)
+	{
+	    inside_quotes = VIsual.col > 0
+			&& line[VIsual.col - 1] == quotechar
+			&& line[curwin->w_cursor.col] != NUL
+			&& line[curwin->w_cursor.col + 1] == quotechar;
+	    i = VIsual.col;
+	    col_end = curwin->w_cursor.col;
+	}
+	else
+	{
+	    inside_quotes = curwin->w_cursor.col > 0
+			&& line[curwin->w_cursor.col - 1] == quotechar
+			&& line[VIsual.col] != NUL
+			&& line[VIsual.col + 1] == quotechar;
+	    i = curwin->w_cursor.col;
+	    col_end = VIsual.col;
+	}
+
+	/* Find out if we have a quote in the selection. */
+	while (i <= col_end)
+	    if (line[i++] == quotechar)
+	    {
+		selected_quote = TRUE;
+		break;
+	    }
+    }
+
     if (!vis_empty && line[col_start] == quotechar)
     {
 	/* Already selecting something and on a quote character.  Find the
@@ -4218,14 +4253,29 @@
 		--col_start;
     }
 
-    /* Set start position */
-    if (!include)
+    /* Set start position.  After vi" another i" must include the ".
+     * For v2i" include the quotes. */
+    if (!include && count < 2
+#ifdef FEAT_VISUAL
+	    && (vis_empty || !inside_quotes)
+#endif
+	    )
 	++col_start;
     curwin->w_cursor.col = col_start;
 #ifdef FEAT_VISUAL
     if (VIsual_active)
     {
-	if (vis_empty)
+	/* Set the start of the Visual area when the Visual area was empty, we
+	 * were just inside quotes or the Visual area didn't start at a quote
+	 * and didn't include a quote.
+	 */
+	if (vis_empty
+		|| (vis_bef_curs
+		    && !selected_quote
+		    && (inside_quotes
+			|| (line[VIsual.col] != quotechar
+			    && (VIsual.col == 0
+				|| line[VIsual.col - 1] != quotechar)))))
 	{
 	    VIsual = curwin->w_cursor;
 	    redraw_curbuf_later(INVERTED);
@@ -4240,7 +4290,12 @@
 
     /* Set end position. */
     curwin->w_cursor.col = col_end;
-    if (include && inc_cursor() == 2)
+    if ((include || count > 1
+#ifdef FEAT_VISUAL
+		/* After vi" another i" must include the ". */
+		|| (!vis_empty && inside_quotes)
+#endif
+	) && inc_cursor() == 2)
 	inclusive = TRUE;
 #ifdef FEAT_VISUAL
     if (VIsual_active)
@@ -4253,7 +4308,18 @@
 	}
 	else
 	{
-	    /* Cursor is at start of Visual area. */
+	    /* Cursor is at start of Visual area.  Set the end of the Visual
+	     * area when it was just inside quotes or it didn't end at a
+	     * quote. */
+	    if (inside_quotes
+		    || (!selected_quote
+			&& line[VIsual.col] != quotechar
+			&& (line[VIsual.col] == NUL
+			    || line[VIsual.col + 1] != quotechar)))
+	    {
+		dec_cursor();
+		VIsual = curwin->w_cursor;
+	    }
 	    curwin->w_cursor.col = col_start;
 	}
 	if (VIsual_mode == 'V')
diff --git a/src/syntax.c b/src/syntax.c
index 116b724..a04b81b 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6163,6 +6163,12 @@
     for (i = 0; pp[i] != NULL; ++i)
 	do_highlight((char_u *)pp[i], reset, TRUE);
 
+    /* Magenta background looks ugly, but grey may not work for 8 colors.
+     * Thus let it depend on the number of colors available. */
+    if (t_colors > 8)
+	do_highlight((char_u *)(*p_bg == 'l' ? "Visual ctermbg=LightGrey"
+				   : "Visual ctermbg=DarkGrey"), reset, TRUE);
+
 #ifdef FEAT_SYN_HL
     /*
      * If syntax highlighting is enabled load the highlighting for it.
diff --git a/src/version.h b/src/version.h
index d3e2620..9402b51 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 (2005 Sep 13)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 13, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 14)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 14, compiled "
