diff --git a/src/insexpand.c b/src/insexpand.c
index 6373993..81177e1 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -101,16 +101,18 @@
 {
     compl_T	*cp_next;
     compl_T	*cp_prev;
-    char_u	*cp_str;	/* matched text */
-    char	cp_icase;	/* TRUE or FALSE: ignore case */
-    char_u	*(cp_text[CPT_COUNT]);	/* text for the menu */
-    char_u	*cp_fname;	/* file containing the match, allocated when
-				 * cp_flags has FREE_FNAME */
-    int		cp_flags;	/* ORIGINAL_TEXT, CONT_S_IPOS or FREE_FNAME */
-    int		cp_number;	/* sequence number */
+    char_u	*cp_str;	// matched text
+    char	cp_icase;	// TRUE or FALSE: ignore case
+    char	cp_equal;       // TRUE or FALSE: ins_compl_equal always ok
+    char_u	*(cp_text[CPT_COUNT]);	// text for the menu
+    char_u	*cp_fname;	// file containing the match, allocated when
+				// cp_flags has FREE_FNAME
+    int		cp_flags;	// ORIGINAL_TEXT, CONT_S_IPOS or FREE_FNAME
+    int		cp_number;	// sequence number
 };
 
-# define ORIGINAL_TEXT	(1)   /* the original text when the expansion begun */
+// flags for ins_compl_add()
+# define ORIGINAL_TEXT	(1)   // the original text when the expansion begun
 # define FREE_FNAME	(2)
 
 static char e_hitend[] = N_("Hit end of paragraph");
@@ -183,7 +185,7 @@
 static int	  compl_opt_refresh_always = FALSE;
 static int	  compl_opt_suppress_empty = FALSE;
 
-static int ins_compl_add(char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup);
+static int ins_compl_add(char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup, int equal);
 static void ins_compl_longest_match(compl_T *match);
 static void ins_compl_del_pum(void);
 static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir);
@@ -413,13 +415,14 @@
  */
     int
 ins_compl_add_infercase(
-    char_u	*str,
+    char_u	*str_arg,
     int		len,
     int		icase,
     char_u	*fname,
     int		dir,
     int		flags)
 {
+    char_u	*str = str_arg;
     char_u	*p;
     int		i, c;
     int		actual_len;		// Take multi-byte characters
@@ -550,10 +553,11 @@
 	    vim_free(wca);
 	}
 
-	return ins_compl_add(IObuff, len, icase, fname, NULL, dir,
-								flags, FALSE);
+	str = IObuff;
     }
-    return ins_compl_add(str, len, icase, fname, NULL, dir, flags, FALSE);
+
+    return ins_compl_add(str, len, icase, fname, NULL, dir,
+							  flags, FALSE, FALSE);
 }
 
 /*
@@ -571,7 +575,8 @@
     char_u	**cptext,   // extra text for popup menu or NULL
     int		cdir,
     int		flags,
-    int		adup)	    // accept duplicate match
+    int		adup,	    // accept duplicate match
+    int		equal)      // match is always accepted by ins_compl_equal
 {
     compl_T	*match;
     int		dir = (cdir == 0 ? compl_direction : cdir);
@@ -613,6 +618,7 @@
 	return FAIL;
     }
     match->cp_icase = icase;
+    match->cp_equal = equal;
 
     // match-fname is:
     // - compl_curr_match->cp_fname if it is a string equal to fname.
@@ -676,6 +682,8 @@
     static int
 ins_compl_equal(compl_T *match, char_u *str, int len)
 {
+    if (match->cp_equal)
+	return TRUE;
     if (match->cp_icase)
 	return STRNICMP(match->cp_str, str, (size_t)len) == 0;
     return STRNCMP(match->cp_str, str, (size_t)len) == 0;
@@ -776,7 +784,7 @@
 
     for (i = 0; i < num_matches && add_r != FAIL; i++)
 	if ((add_r = ins_compl_add(matches[i], -1, icase,
-					    NULL, NULL, dir, 0, FALSE)) == OK)
+				      NULL, NULL, dir, 0, FALSE, FALSE)) == OK)
 	    // if dir was BACKWARD then honor it just once
 	    dir = FORWARD;
     FreeWild(num_matches, matches);
@@ -868,7 +876,7 @@
     // compl_pattern doesn't need to be set
     compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
     if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
-			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
+		   -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE, FALSE) != OK)
 	return;
 
     ctrl_x_mode = CTRL_X_EVAL;
@@ -2365,6 +2373,7 @@
     int		icase = FALSE;
     int		adup = FALSE;
     int		aempty = FALSE;
+    int		aequal = FALSE;
     char_u	*(cptext[CPT_COUNT]);
 
     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
@@ -2386,6 +2395,8 @@
 	    adup = dict_get_number(tv->vval.v_dict, (char_u *)"dup");
 	if (dict_get_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
 	    aempty = dict_get_number(tv->vval.v_dict, (char_u *)"empty");
+	if (dict_get_string(tv->vval.v_dict, (char_u *)"equal", FALSE) != NULL)
+	    aequal = dict_get_number(tv->vval.v_dict, (char_u *)"equal");
     }
     else
     {
@@ -2394,7 +2405,7 @@
     }
     if (word == NULL || (!aempty && *word == NUL))
 	return FAIL;
-    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
+    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup, aequal);
 }
 #endif
 
@@ -3694,7 +3705,7 @@
 	vim_free(compl_orig_text);
 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
 	if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
-			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
+		   -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE, FALSE) != OK)
 	{
 	    VIM_CLEAR(compl_pattern);
 	    VIM_CLEAR(compl_orig_text);
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index c69c3b0..a841678 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -276,6 +276,38 @@
   iunmap <F5>
 endfunc
 
+func Test_complete_no_filter()
+  func! s:complTest1() abort
+    call complete(1, [{'word': 'foobar'}])
+    return ''
+  endfunc
+  func! s:complTest2() abort
+    call complete(1, [{'word': 'foobar', 'equal': 1}])
+    return ''
+  endfunc
+
+  let completeopt = &completeopt
+
+  " without equal=1
+  new
+  set completeopt=menuone,noinsert,menu
+  inoremap <F5>  <C-R>=s:complTest1()<CR>
+  call feedkeys("i\<F5>z\<CR>\<CR>\<ESC>.", 'tx')
+  call assert_equal('z', getline(1))
+  bwipe!
+
+  " with equal=1
+  new
+  set completeopt=menuone,noinsert,menu
+  inoremap <F5>  <C-R>=s:complTest2()<CR>
+  call feedkeys("i\<F5>z\<CR>\<CR>\<ESC>.", 'tx')
+  call assert_equal('foobar', getline(1))
+  bwipe!
+
+  let &completeopt = completeopt
+  iunmap <F5>
+endfunc
+
 func Test_compl_vim_cmds_after_register_expr()
   func! s:test_func()
     return 'autocmd '
diff --git a/src/version.c b/src/version.c
index 46b3b5d..d09ac29 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1123,
+/**/
     1122,
 /**/
     1121,
