diff --git a/src/ex_getln.c b/src/ex_getln.c
index e6ed44a..b2e89e1 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1411,6 +1411,11 @@
 				   && !equalpos(curwin->w_cursor, old_cursor))
 		    {
 			c = gchar_cursor();
+			/* If 'ignorecase' and 'smartcase' are set and the
+			* command line has no uppercase characters, convert
+			* the character to lowercase */
+			if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
+			    c = MB_TOLOWER(c);
 			if (c != NUL)
 			{
 			    if (c == firstc || vim_strchr((char_u *)(
diff --git a/src/misc1.c b/src/misc1.c
index 3151124..d87696d 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -9606,7 +9606,7 @@
 }
 
 /*
- * return TRUE when need to go to Insert mode because of 'insertmode'.
+ * Return TRUE when need to go to Insert mode because of 'insertmode'.
  * Don't do this when still processing a command or a mapping.
  * Don't do this when inside a ":normal" command.
  */
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 76ae054..7f3947c 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -6,6 +6,7 @@
 void restore_search_patterns __ARGS((void));
 void free_search_patterns __ARGS((void));
 int ignorecase __ARGS((char_u *pat));
+int pat_has_uppercase __ARGS((char_u *pat));
 char_u *last_search_pat __ARGS((void));
 void reset_search_dir __ARGS((void));
 void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
diff --git a/src/search.c b/src/search.c
index 3ad9140..86958d4 100644
--- a/src/search.c
+++ b/src/search.c
@@ -365,58 +365,60 @@
 ignorecase(pat)
     char_u	*pat;
 {
-    char_u	*p;
-    int		ic;
+    int		ic = p_ic;
 
-    ic = p_ic;
     if (ic && !no_smartcase && p_scs
 #ifdef FEAT_INS_EXPAND
 				&& !(ctrl_x_mode && curbuf->b_p_inf)
 #endif
 								    )
-    {
-	/* don't ignore case if pattern has uppercase */
-	for (p = pat; *p; )
-	{
-#ifdef FEAT_MBYTE
-	    int		l;
-
-	    if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
-	    {
-		if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
-		{
-		    ic = FALSE;
-		    break;
-		}
-		p += l;
-	    }
-	    else
-#endif
-                if (*p == '\\')
-		{
-		    if (p[1] == '_' && p[2] != NUL)  /* skip "\_X" */
-			p += 3;
-		    else if (p[1] == '%' && p[2] != NUL)  /* skip "\%X" */
-			p += 3;
-		    else if (p[1] != NUL)  /* skip "\X" */
-			p += 2;
-		    else
-			p += 1;
-		}
-		else if (MB_ISUPPER(*p))
-		{
-		    ic = FALSE;
-		    break;
-		}
-		else
-		    ++p;
-	}
-    }
+	ic = !pat_has_uppercase(pat);
     no_smartcase = FALSE;
 
     return ic;
 }
 
+/*
+ * Return TRUE if patter "pat" has an uppercase character.
+ */
+    int
+pat_has_uppercase(pat)
+    char_u	*pat;
+{
+    char_u *p = pat;
+
+    while (*p != NUL)
+    {
+#ifdef FEAT_MBYTE
+	int		l;
+
+	if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+	{
+	    if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
+		return TRUE;
+	    p += l;
+	}
+	else
+#endif
+	     if (*p == '\\')
+	{
+	    if (p[1] == '_' && p[2] != NUL)  /* skip "\_X" */
+		p += 3;
+	    else if (p[1] == '%' && p[2] != NUL)  /* skip "\%X" */
+		p += 3;
+	    else if (p[1] != NUL)  /* skip "\X" */
+		p += 2;
+	    else
+		p += 1;
+	}
+	else if (MB_ISUPPER(*p))
+	    return TRUE;
+	else
+	    ++p;
+    }
+    return FALSE;
+}
+
     char_u *
 last_search_pat()
 {
