diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index d27e039..8bccaa3 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -260,7 +260,7 @@
     {
 	if (cmdline_fuzzy_completion_supported(xp))
 	    // If fuzzy matching, don't modify the search string
-	    p1 = vim_strsave(xp->xp_pattern);
+	    p1 = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
 	else
 	    p1 = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context);
 
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index f0c7aad..06837ac 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5590,7 +5590,8 @@
 
     // Special handling of "ff" which acts as a short form of
     // "fileformat", as "ff" is not a substring of it.
-    if (STRCMP(xp->xp_pattern, "ff") == 0)
+    if (xp->xp_pattern_len == 2
+	    && STRNCMP(xp->xp_pattern, "ff", xp->xp_pattern_len) == 0)
     {
 	*matches = ALLOC_MULT(char_u *, 1);
 	if (*matches == NULL)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 711e08e..9683e2e 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1599,7 +1599,7 @@
     cmdline_info_T save_ccline;
     int		did_save_ccline = FALSE;
     int		cmdline_type;
-    int		wild_type;
+    int		wild_type = 0;
 
     // one recursion level deeper
     ++depth;
@@ -1878,7 +1878,7 @@
 	    c = wildmenu_translate_key(&ccline, c, &xpc, did_wild_list);
 
 	int key_is_wc = (c == p_wc && KeyTyped) || c == p_wcm;
-	if (cmdline_pum_active() && !key_is_wc)
+	if ((cmdline_pum_active() || did_wild_list) && !key_is_wc)
 	{
 	    // Ctrl-Y: Accept the current selection and close the popup menu.
 	    // Ctrl-E: cancel the cmdline popup menu and return the original
@@ -1889,7 +1889,6 @@
 		if (nextwild(&xpc, wild_type, WILD_NO_BEEP,
 							firstc != '@') == FAIL)
 		    break;
-		c = Ctrl_E;
 	    }
 	}
 
@@ -2016,6 +2015,14 @@
 
 	do_abbr = TRUE;		// default: check for abbreviation
 
+	// If already used to cancel/accept wildmenu, don't process the key
+	// further.
+	if (wild_type == WILD_CANCEL || wild_type == WILD_APPLY)
+	{
+	    wild_type = 0;
+	    goto cmdline_not_changed;
+	}
+
 	/*
 	 * Big switch for a typed command line character.
 	 */
diff --git a/src/optionstr.c b/src/optionstr.c
index 8458f2a..b7cdcc4 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -2582,12 +2582,13 @@
     if (*matches == NULL)
 	return FAIL;
 
-    size_t pattern_len = STRLEN(xp->xp_pattern);
+    int pattern_len = xp->xp_pattern_len;
 
     for (i = 0; i < num_hl_modes; i++)
     {
 	// Don't allow duplicates as these are unique flags
-	if (vim_strchr(xp->xp_pattern + 1, p_hl_mode_values[i]) != NULL)
+	char_u *dup = vim_strchr(xp->xp_pattern + 1, p_hl_mode_values[i]);
+	if (dup != NULL && (int)(dup - xp->xp_pattern) < pattern_len)
 	    continue;
 
 	// ':' only works by itself, not with other flags.
diff --git a/src/testdir/dumps/Test_wildmenu_pum_51.dump b/src/testdir/dumps/Test_wildmenu_pum_51.dump
new file mode 100644
index 0000000..d5ad45c
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_pum_51.dump
@@ -0,0 +1,10 @@
+| +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @2| +0#0000001#e0e0e08|w|i|l|d|c|h|a|r| @6| +0#4040ff13#ffffff0@54
+|~| @2| +0#0000001#ffd7ff255|w|i|l|d|c|h|a|r|m| @5| +0#4040ff13#ffffff0@54
+|:+0#0000000&|s|e|t| |w|i|l|d|c|h|a|r>z@1| @59
diff --git a/src/testdir/dumps/Test_wildmenu_pum_52.dump b/src/testdir/dumps/Test_wildmenu_pum_52.dump
new file mode 100644
index 0000000..81e59b6
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_pum_52.dump
@@ -0,0 +1,10 @@
+| +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|:+0#0000000&|s|e|t| |w|i|l|d|c|h|a>z@1| @60
diff --git a/src/testdir/dumps/Test_wildmenu_pum_53.dump b/src/testdir/dumps/Test_wildmenu_pum_53.dump
new file mode 100644
index 0000000..5f61cdd
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_pum_53.dump
@@ -0,0 +1,10 @@
+| +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|:+0#0000000&|s|e|t| |w|i|l|d|c|h|a|r>z@1| @59
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index c285b08..33ff606 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -158,6 +158,13 @@
   call feedkeys(":sign \<Tab>\<PageUp>\<Left>\<Right>\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"TestWildMenu', @:)
 
+  " Test for Ctrl-E/Ctrl-Y being able to cancel / accept a match
+  call feedkeys(":sign un zz\<Left>\<Left>\<Left>\<Tab>\<C-E> yy\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"sign un yy zz', @:)
+
+  call feedkeys(":sign un zz\<Left>\<Left>\<Left>\<Tab>\<Tab>\<C-Y> yy\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"sign unplace yy zz', @:)
+
   " cleanup
   %bwipe
   set nowildmenu
@@ -1105,6 +1112,9 @@
   call assert_equal('edit', getcompletion('read ++bin ++edi', 'cmdline')[0])
 
   call assert_equal(['fileformat='], getcompletion('edit ++ff', 'cmdline'))
+  " Test ++ff in the middle of the cmdline
+  call feedkeys(":edit ++ff zz\<Left>\<Left>\<Left>\<C-A>\<C-B>\"\<CR>", 'xt')
+  call assert_equal("\"edit ++fileformat= zz", @:)
 
   call assert_equal('dos', getcompletion('write ++ff=d', 'cmdline')[0])
   call assert_equal('mac', getcompletion('args ++fileformat=m', 'cmdline')[0])
@@ -2585,6 +2595,16 @@
   call term_sendkeys(buf, "\<PageUp>")
   call VerifyScreenDump(buf, 'Test_wildmenu_pum_50', {})
 
+  " pressing <C-E> to end completion should work in middle of the line too
+  call term_sendkeys(buf, "\<Esc>:set wildchazz\<Left>\<Left>\<Tab>")
+  call VerifyScreenDump(buf, 'Test_wildmenu_pum_51', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_wildmenu_pum_52', {})
+
+  " pressing <C-Y> should select the current match and end completion
+  call term_sendkeys(buf, "\<Esc>:set wildchazz\<Left>\<Left>\<Tab>\<C-Y>")
+  call VerifyScreenDump(buf, 'Test_wildmenu_pum_53', {})
+
   call term_sendkeys(buf, "\<C-U>\<CR>")
   call StopVimInTerminal(buf)
 endfunc
@@ -3293,6 +3313,17 @@
   set wildoptions&
 endfunc
 
+" Test for fuzzy completion in the middle of a cmdline instead of at the end
+func Test_fuzzy_completion_in_middle()
+  set wildoptions=fuzzy
+  call feedkeys(":set ildar wrap\<Left>\<Left>\<Left>\<Left>\<Left>\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal("\"set wildchar wildcharm wrap", @:)
+
+  call feedkeys(":args ++odng zz\<Left>\<Left>\<Left>\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal("\"args ++encoding= zz", @:)
+  set wildoptions&
+endfunc
+
 " Test for :breakadd argument completion
 func Test_cmdline_complete_breakadd()
   call feedkeys(":breakadd \<C-A>\<C-B>\"\<CR>", 'tx')
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 6b2b748..ef2d3bd 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -616,6 +616,9 @@
         \        {idx, val -> val != ':'}),
         \ '')
   call assert_equal([], getcompletion('set hl+=8'..hl_display_modes, 'cmdline'))
+  " Test completion in middle of the line
+  call feedkeys(":set hl=8b i\<Left>\<Left>\<Tab>\<C-B>\"\<CR>", 'xt')
+  call assert_equal("\"set hl=8bi i", @:)
 
   "
   " Test flag lists
diff --git a/src/version.c b/src/version.c
index 02441bc..438e9a0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2037,
+/**/
     2036,
 /**/
     2035,
