diff --git a/src/normal.c b/src/normal.c
index 1ff9297..834a643 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -3461,13 +3461,14 @@
     if (ptr[col] == NUL || (i == 0
 		&& (has_mbyte ? this_class != 2 : !vim_iswordc(ptr[col]))))
     {
-	/*
-	 * didn't find an identifier or string
-	 */
-	if (find_type & FIND_STRING)
-	    emsg(_("E348: No string under cursor"));
-	else
-	    emsg(_(e_noident));
+	// didn't find an identifier or string
+	if ((find_type & FIND_NOERROR) == 0)
+	{
+	    if (find_type & FIND_STRING)
+		emsg(_("E348: No string under cursor"));
+	    else
+		emsg(_(e_noident));
+	}
 	return 0;
     }
     ptr += col;
diff --git a/src/popupwin.c b/src/popupwin.c
index 2d61ab8..973358c 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -138,12 +138,39 @@
 }
 
 /*
- * Go through the options in "dict" and apply them to buffer "buf" displayed in
- * popup window "wp".
- * When called from f_popup_atcursor() "atcursor" is TRUE.
+ * Used when popup options contain "moved": set default moved values.
  */
     static void
-apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
+set_moved_values(win_T *wp)
+{
+    wp->w_popup_curwin = curwin;
+    wp->w_popup_lnum = curwin->w_cursor.lnum;
+    wp->w_popup_mincol = curwin->w_cursor.col;
+    wp->w_popup_maxcol = curwin->w_cursor.col;
+}
+
+/*
+ * Used when popup options contain "moved" with "word" or "WORD".
+ */
+    static void
+set_moved_columns(win_T *wp, int flags)
+{
+    char_u	*ptr;
+    int		len = find_ident_under_cursor(&ptr, flags | FIND_NOERROR);
+
+    if (len > 0)
+    {
+	wp->w_popup_mincol = (int)(ptr - ml_get_curline());
+	wp->w_popup_maxcol = wp->w_popup_mincol + len - 1;
+    }
+}
+
+/*
+ * Go through the options in "dict" and apply them to buffer "buf" displayed in
+ * popup window "wp".
+ */
+    static void
+apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
 {
     int		nr;
     char_u	*str;
@@ -155,19 +182,6 @@
     wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
     wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
 
-    if (atcursor)
-    {
-	wp->w_popup_pos = POPPOS_BOTLEFT;
-	setcursor_mayforce(TRUE);
-	wp->w_wantline = screen_screenrow();
-	if (wp->w_wantline == 0)  // cursor in first line
-	{
-	    wp->w_wantline = 2;
-	    wp->w_popup_pos = POPPOS_TOPLEFT;
-	}
-	wp->w_wantcol = screen_screencol() + 1;
-    }
-
     get_pos_options(wp, dict);
 
     wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
@@ -289,10 +303,7 @@
     di = dict_find(dict, (char_u *)"moved", -1);
     if (di != NULL)
     {
-	wp->w_popup_curwin = curwin;
-	wp->w_popup_lnum = curwin->w_cursor.lnum;
-	wp->w_popup_mincol = curwin->w_cursor.col;
-	wp->w_popup_maxcol = curwin->w_cursor.col;
+	set_moved_values(wp);
 	if (di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
 	{
 	    char_u  *s = di->di_tv.vval.v_string;
@@ -305,16 +316,7 @@
 	    else if (STRCMP(s, "any") != 0)
 		semsg(_(e_invarg2), s);
 	    if (flags != 0)
-	    {
-		char_u	*ptr;
-		int	len = find_ident_under_cursor(&ptr, flags);
-
-		if (len > 0)
-		{
-		    wp->w_popup_mincol = (int)(ptr - ml_get_curline());
-		    wp->w_popup_maxcol = wp->w_popup_mincol + len - 1;
-		}
-	    }
+		set_moved_columns(wp, flags);
 	}
 	else if (di->di_tv.v_type == VAR_LIST
 		&& di->di_tv.vval.v_list != NULL
@@ -554,13 +556,19 @@
     wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer);
 }
 
+typedef enum
+{
+    TYPE_NORMAL,
+    TYPE_ATCURSOR
+} create_type_T;
+
 /*
  * popup_create({text}, {options})
  * popup_atcursor({text}, {options})
  * When called from f_popup_atcursor() "atcursor" is TRUE.
  */
     static void
-popup_create(typval_T *argvars, typval_T *rettv, int atcursor)
+popup_create(typval_T *argvars, typval_T *rettv, create_type_T type)
 {
     win_T   *wp;
     buf_T   *buf;
@@ -652,8 +660,23 @@
     ml_delete(buf->b_ml.ml_line_count, FALSE);
     curbuf = curwin->w_buffer;
 
+    if (type == TYPE_ATCURSOR)
+    {
+	wp->w_popup_pos = POPPOS_BOTLEFT;
+	setcursor_mayforce(TRUE);
+	wp->w_wantline = screen_screenrow();
+	if (wp->w_wantline == 0)  // cursor in first line
+	{
+	    wp->w_wantline = 2;
+	    wp->w_popup_pos = POPPOS_TOPLEFT;
+	}
+	wp->w_wantcol = screen_screencol() + 1;
+	set_moved_values(wp);
+	set_moved_columns(wp, FIND_STRING);
+    }
+
     // Deal with options.
-    apply_options(wp, buf, argvars[1].vval.v_dict, atcursor);
+    apply_options(wp, buf, argvars[1].vval.v_dict);
 
     // set default values
     if (wp->w_zindex == 0)
@@ -672,7 +695,7 @@
     void
 f_popup_create(typval_T *argvars, typval_T *rettv)
 {
-    popup_create(argvars, rettv, FALSE);
+    popup_create(argvars, rettv, TYPE_NORMAL);
 }
 
 /*
@@ -681,7 +704,7 @@
     void
 f_popup_atcursor(typval_T *argvars, typval_T *rettv)
 {
-    popup_create(argvars, rettv, TRUE);
+    popup_create(argvars, rettv, TYPE_ATCURSOR);
 }
 
 /*
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 6d3279b..50165ec 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -1009,8 +1009,9 @@
   call assert_equal({}, popup_getpos(winid))
   popupclear
 
+  " WORD is the default
   exe "normal gg0/WORD\<CR>"
-  let winid = popup_atcursor('text', {'moved': 'WORD'})
+  let winid = popup_atcursor('text', {})
   redraw
   call assert_equal(1, popup_getpos(winid).visible)
   call feedkeys("eli\<Esc>", 'xt')
diff --git a/src/version.c b/src/version.c
index f83f7cc..13961d4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1455,
+/**/
     1454,
 /**/
     1453,
diff --git a/src/vim.h b/src/vim.h
index 72bb109..3b4582b 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -879,10 +879,11 @@
 #define SEARCH_PEEK  0x800  /* peek for typed char, cancel search */
 #define SEARCH_COL  0x1000  /* start at specified column instead of zero */
 
-/* Values for find_ident_under_cursor() */
-#define FIND_IDENT	1	/* find identifier (word) */
-#define FIND_STRING	2	/* find any string (WORD) */
-#define FIND_EVAL	4	/* include "->", "[]" and "." */
+// Values for find_ident_under_cursor()
+#define FIND_IDENT	1	// find identifier (word)
+#define FIND_STRING	2	// find any string (WORD)
+#define FIND_EVAL	4	// include "->", "[]" and "."
+#define FIND_NOERROR	8	// no error when no word found
 
 /* Values for file_name_in_line() */
 #define FNAME_MESS	1	/* give error message */
