diff --git a/src/insexpand.c b/src/insexpand.c
index c673df9..78fea51 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -4100,8 +4100,7 @@
     int		is_backward = compl_shows_dir_backward();
     compl_T	*comp = NULL;
 
-    if (compl_match_array == NULL ||
-	    (is_forward && compl_selected_item == compl_match_arraysize - 1)
+    if ((is_forward && compl_selected_item == compl_match_arraysize - 1)
 	    || (is_backward && compl_selected_item == 0))
 	return compl_first_match;
 
@@ -4508,6 +4507,11 @@
     static int
 get_normal_compl_info(char_u *line, int startcol, colnr_T curs_col)
 {
+    int		i;
+    int		char_len;
+    size_t	fuzzy_len;
+    char_u	*fuzzy_pattern;
+
     if ((compl_cont_status & CONT_SOL) || ctrl_x_mode_path_defines())
     {
 	if (!compl_status_adding())
@@ -4622,6 +4626,38 @@
 
     compl_patternlen = STRLEN(compl_pattern);
 
+    if ((get_cot_flags() & COT_FUZZYCOLLECT) != 0)
+    {
+	// Adjust size to avoid buffer overflow
+	fuzzy_len = (size_t)compl_length * 5 + 10;
+	// Allocate enough space
+	fuzzy_pattern = alloc(fuzzy_len);
+	if (fuzzy_pattern == NULL)
+	{
+	    compl_patternlen = 0;
+	    return FAIL;
+	}
+	// Use 'very magic' mode for simpler syntax
+	STRCPY(fuzzy_pattern, "\\v");
+	i = 2; // Start from 2 to skip "\\v"
+	while (i < compl_length + 2)
+	{
+	    // Append "\\k*" before each character
+	    STRNCAT(fuzzy_pattern, "\\k*", fuzzy_len - STRLEN(fuzzy_pattern) - 1);
+	    // Get length of current multi-byte character
+	    char_len = mb_ptr2len(compl_pattern + i);
+	    // Concatenate the character safely
+	    STRNCAT(fuzzy_pattern, compl_pattern + i, char_len);
+	    // Move to the next character
+	    i += char_len;
+	}
+	// Append "\\k*" at the end to match any characters after the pattern
+	STRNCAT(fuzzy_pattern, "\\k*", fuzzy_len - STRLEN(fuzzy_pattern) - 1);
+	vim_free(compl_pattern);
+	compl_pattern = fuzzy_pattern;
+	compl_patternlen = STRLEN(compl_pattern);
+    }
+
     return OK;
 }
 
diff --git a/src/option.h b/src/option.h
index 91d8d95..67d0b04 100644
--- a/src/option.h
+++ b/src/option.h
@@ -520,13 +520,14 @@
 #define COT_ANY_MENU	0x003	// combination of menu flags
 #define COT_LONGEST	0x004	// FALSE: insert full match,
 				// TRUE: insert longest prefix
-#define COT_PREVIEW	0x008
-#define COT_POPUP	0x010
-#define COT_POPUPHIDDEN	0x020
-#define COT_ANY_PREVIEW	0x038	// combination of preview flags
-#define COT_NOINSERT	0x040	// FALSE: select & insert, TRUE: noinsert
-#define COT_NOSELECT	0x080	// FALSE: select & insert, TRUE: noselect
-#define COT_FUZZY	0x100	// TRUE: fuzzy match enabled
+#define COT_PREVIEW	    0x008
+#define COT_POPUP	    0x010
+#define COT_POPUPHIDDEN	    0x020
+#define COT_ANY_PREVIEW	    0x038   // combination of preview flags
+#define COT_NOINSERT	    0x040   // FALSE: select & insert, TRUE: noinsert
+#define COT_NOSELECT	    0x080   // FALSE: select & insert, TRUE: noselect
+#define COT_FUZZY	    0x100   // TRUE: fuzzy match enabled
+#define COT_FUZZYCOLLECT    0x200   // TRUE: fuzzy collect enabled
 #ifdef BACKSLASH_IN_FILENAME
 EXTERN char_u	*p_csl;		// 'completeslash'
 #endif
diff --git a/src/optionstr.c b/src/optionstr.c
index d722981..170d48e 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -118,7 +118,7 @@
 				NULL};
 static char *(p_fcl_values[]) = {"all", NULL};
 #endif
-static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", "popup", "popuphidden", "noinsert", "noselect", "fuzzy", NULL};
+static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", "popup", "popuphidden", "noinsert", "noselect", "fuzzy", "fuzzycollect", NULL};
 #ifdef BACKSLASH_IN_FILENAME
 static char *(p_csl_values[]) = {"slash", "backslash", NULL};
 #endif
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 48589ce..61c8ac7 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2586,6 +2586,37 @@
   call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
   call assert_equal('hello help hero h', getline('.'))
 
+  set completeopt=fuzzycollect
+  call setline(1, ['xyz  yxz  x'])
+  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('xyz  yxz  xyz', getline('.'))
+  " can fuzzy get yxz when use Ctrl-N twice
+  call setline(1, ['xyz  yxz  x'])
+  call feedkeys("A\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('xyz  yxz  yxz', getline('.'))
+
+  call setline(1, ['one two o'])
+  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('one two one', getline('.'))
+
+  call setline(1, ['你好 你'])
+  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('你好 你好', getline('.'))
+  call setline(1, ['你的 我的 的'])
+  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('你的 我的 你的', getline('.'))
+  " can fuzzy get multiple-byte word when use Ctrl-N twice
+  call setline(1, ['你的 我的 的'])
+  call feedkeys("A\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
+  call assert_equal('你的 我的 我的', getline('.'))
+
+  "respect noinsert
+  set completeopt=fuzzycollect,menu,menuone,noinsert
+  call setline(1, ['one two o'])
+  call feedkeys("A\<C-X>\<C-N>", 'tx')
+  call assert_equal('one', g:word)
+  call assert_equal('one two o', getline('.'))
+
   " clean up
   set omnifunc=
   bw!
diff --git a/src/version.c b/src/version.c
index 3afaefa..a366f35 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    503,
+/**/
     502,
 /**/
     501,
