diff --git a/src/ex_getln.c b/src/ex_getln.c
index f9791f5..8c77460 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -111,7 +111,7 @@
 static int	expand_showtail(expand_T *xp);
 #ifdef FEAT_CMDL_COMPL
 static int	expand_shellcmd(char_u *filepat, int *num_file, char_u ***file, int flagsarg);
-static int	ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname[]);
+static int	ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char *dirname[]);
 static int	ExpandPackAddDir(char_u *pat, int *num_file, char_u ***file);
 # ifdef FEAT_CMDHIST
 static char_u	*get_history_arg(expand_T *xp, int idx);
@@ -4628,22 +4628,23 @@
     if (xp->xp_context == EXPAND_COLORS)
     {
 	char *directories[] = {"colors", NULL};
-	return ExpandRTDir(pat, num_file, file, directories);
+	return ExpandRTDir(pat, DIP_START + DIP_OPT, num_file, file,
+								directories);
     }
     if (xp->xp_context == EXPAND_COMPILER)
     {
 	char *directories[] = {"compiler", NULL};
-	return ExpandRTDir(pat, num_file, file, directories);
+	return ExpandRTDir(pat, 0, num_file, file, directories);
     }
     if (xp->xp_context == EXPAND_OWNSYNTAX)
     {
 	char *directories[] = {"syntax", NULL};
-	return ExpandRTDir(pat, num_file, file, directories);
+	return ExpandRTDir(pat, 0, num_file, file, directories);
     }
     if (xp->xp_context == EXPAND_FILETYPE)
     {
 	char *directories[] = {"syntax", "indent", "ftplugin", NULL};
-	return ExpandRTDir(pat, num_file, file, directories);
+	return ExpandRTDir(pat, 0, num_file, file, directories);
     }
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
     if (xp->xp_context == EXPAND_USER_LIST)
@@ -5119,13 +5120,19 @@
 #endif
 
 /*
- * Expand color scheme, compiler or filetype names:
- * 'runtimepath'/{dirnames}/{pat}.vim
+ * Expand color scheme, compiler or filetype names.
+ * Search from 'runtimepath':
+ *   'runtimepath'/{dirnames}/{pat}.vim
+ * When "flags" has DIP_START: search also from 'start' of 'packpath':
+ *   'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
+ * When "flags" has DIP_OPT: search also from 'opt' of 'packpath':
+ *   'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
  * "dirnames" is an array with one or more directory names.
  */
     static int
 ExpandRTDir(
     char_u	*pat,
+    int		flags,
     int		*num_file,
     char_u	***file,
     char	*dirnames[])
@@ -5155,6 +5162,36 @@
 	vim_free(s);
     }
 
+    if (flags & DIP_START) {
+	for (i = 0; dirnames[i] != NULL; ++i)
+	{
+	    s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 22));
+	    if (s == NULL)
+	    {
+		ga_clear_strings(&ga);
+		return FAIL;
+	    }
+	    sprintf((char *)s, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat);
+	    globpath(p_pp, s, &ga, 0);
+	    vim_free(s);
+	}
+    }
+
+    if (flags & DIP_OPT) {
+	for (i = 0; dirnames[i] != NULL; ++i)
+	{
+	    s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 20));
+	    if (s == NULL)
+	    {
+		ga_clear_strings(&ga);
+		return FAIL;
+	    }
+	    sprintf((char *)s, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat);
+	    globpath(p_pp, s, &ga, 0);
+	    vim_free(s);
+	}
+    }
+
     for (i = 0; i < ga.ga_len; ++i)
     {
 	match = ((char_u **)ga.ga_data)[i];
diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim
index 52e6a33..44b733f 100644
--- a/src/testdir/test_packadd.vim
+++ b/src/testdir/test_packadd.vim
@@ -135,6 +135,29 @@
   call assert_equal(1, g:found_three)
 endfunc
 
+func Test_colorscheme_completion()
+  let colordirrun = &packpath . '/runtime/colors'
+  let colordirstart = &packpath . '/pack/mine/start/foo/colors'
+  let colordiropt = &packpath . '/pack/mine/opt/bar/colors'
+  call mkdir(colordirrun, 'p')
+  call mkdir(colordirstart, 'p')
+  call mkdir(colordiropt, 'p')
+  call writefile(['let g:found_one = 1'], colordirrun . '/one.vim')
+  call writefile(['let g:found_two = 1'], colordirstart . '/two.vim')
+  call writefile(['let g:found_three = 1'], colordiropt . '/three.vim')
+  exe 'set rtp=' . &packpath . '/runtime'
+
+  let li=[]
+  call feedkeys(":colorscheme " . repeat("\<Tab>", 1) . "')\<C-B>call add(li, '\<CR>", 't')
+  call feedkeys(":colorscheme " . repeat("\<Tab>", 2) . "')\<C-B>call add(li, '\<CR>", 't')
+  call feedkeys(":colorscheme " . repeat("\<Tab>", 3) . "')\<C-B>call add(li, '\<CR>", 't')
+  call feedkeys(":colorscheme " . repeat("\<Tab>", 4) . "')\<C-B>call add(li, '\<CR>", 'tx')
+  call assert_equal("colorscheme one", li[0])
+  call assert_equal("colorscheme three", li[1])
+  call assert_equal("colorscheme two", li[2])
+  call assert_equal("colorscheme ", li[3])
+endfunc
+
 func Test_runtime()
   let rundir = &packpath . '/runtime/extra'
   let startdir = &packpath . '/pack/mine/start/foo/extra'
diff --git a/src/version.c b/src/version.c
index ed6e4b2..bb08c4b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1554,
+/**/
     1553,
 /**/
     1552,
