diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 15ffed3..f3aab92 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2739,6 +2739,8 @@
 virtcol({expr})			Number	screen column of cursor or mark
 visualmode([expr])		String	last visual mode used
 wildmenumode()			Number	whether 'wildmenu' mode is active
+win_execute({id}, {command} [, {silent}])
+				String	execute {command} in window {id}
 win_findbuf({bufnr})		List	find windows containing {bufnr}
 win_getid([{win} [, {tab}]])	Number	get window ID for {win} in {tab}
 win_gotoid({expr})		Number	go to window with ID {expr}
@@ -4012,7 +4014,10 @@
 		To get a list of lines use |split()| on the result: >
 			split(execute('args'), "\n")
 
-<		When used recursively the output of the recursive call is not
+<		To execute a command in another window than the current one
+		use `win_execute()`.
+
+		When used recursively the output of the recursive call is not
 		included in the output of the higher level call.
 
 exepath({expr})						*exepath()*
@@ -10310,6 +10315,12 @@
 <
 		(Note, this needs the 'wildcharm' option set appropriately).
 
+win_execute({id}, {command} [, {silent}])		*win_execute()*
+		Like `execute()` but in the context of window {id}.
+		The window will temporarily be made the current window,
+		without triggering autocommands.
+		Example: >
+			call win_execute(winid, 'syntax enable')
 
 win_findbuf({bufnr})					*win_findbuf()*
 		Returns a list with |window-ID|s for windows that contain
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 1954754..c573e77 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -70,6 +70,7 @@
 there is not enough space, some text may be invisible.
 
 
+
 TODO:
 
 Example how to use syntax highlighting of a code snippet.
@@ -242,14 +243,6 @@
 		positioning mechanism applied.
 		If popup window {id} is not found an empty Dict is returned.
 
-win_execute({id}, {command})
-	  	{not implemented yet}
-		Like `execute()` but in the context of window {id}.
-		The window will temporarily be made the current window,
-		without triggering autocommands.
-		Example: >
-			call win_execute(winid, 'syntax enable')
-<
 
 							*:popupclear* *:popupc*
 :popupc[lear]	Emergency solution to a misbehaving plugin: close all popup
@@ -274,6 +267,10 @@
 
 The window does have a cursor position, but the cursor is not displayed.
 
+To execute a command in the context of the popup window and buffer use
+`win_execute()`.  Example: >
+	call win_execute(winid, 'syntax enable')
+
 Options can be set on the window with `setwinvar()`, e.g.: >
 	call setwinvar(winid, '&wrap', 0)
 And options can be set on the buffer with `setbufvar()`, e.g.: >
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 1a0e113..2abbcfe 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -492,6 +492,7 @@
 static void f_virtcol(typval_T *argvars, typval_T *rettv);
 static void f_visualmode(typval_T *argvars, typval_T *rettv);
 static void f_wildmenumode(typval_T *argvars, typval_T *rettv);
+static void f_win_execute(typval_T *argvars, typval_T *rettv);
 static void f_win_findbuf(typval_T *argvars, typval_T *rettv);
 static void f_win_getid(typval_T *argvars, typval_T *rettv);
 static void f_win_gotoid(typval_T *argvars, typval_T *rettv);
@@ -1045,6 +1046,7 @@
     {"virtcol",		1, 1, f_virtcol},
     {"visualmode",	0, 1, f_visualmode},
     {"wildmenumode",	0, 0, f_wildmenumode},
+    {"win_execute",	2, 3, f_win_execute},
     {"win_findbuf",	1, 1, f_win_findbuf},
     {"win_getid",	0, 2, f_win_getid},
     {"win_gotoid",	1, 1, f_win_gotoid},
@@ -3519,7 +3521,7 @@
  * "execute()" function
  */
     static void
-f_execute(typval_T *argvars, typval_T *rettv)
+execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
 {
     char_u	*cmd = NULL;
     list_T	*list = NULL;
@@ -3535,9 +3537,9 @@
     rettv->vval.v_string = NULL;
     rettv->v_type = VAR_STRING;
 
-    if (argvars[0].v_type == VAR_LIST)
+    if (argvars[arg_off].v_type == VAR_LIST)
     {
-	list = argvars[0].vval.v_list;
+	list = argvars[arg_off].vval.v_list;
 	if (list == NULL || list->lv_first == NULL)
 	    /* empty list, no commands, empty output */
 	    return;
@@ -3545,15 +3547,15 @@
     }
     else
     {
-	cmd = tv_get_string_chk(&argvars[0]);
+	cmd = tv_get_string_chk(&argvars[arg_off]);
 	if (cmd == NULL)
 	    return;
     }
 
-    if (argvars[1].v_type != VAR_UNKNOWN)
+    if (argvars[arg_off + 1].v_type != VAR_UNKNOWN)
     {
 	char_u	buf[NUMBUFLEN];
-	char_u  *s = tv_get_string_buf_chk(&argvars[1], buf);
+	char_u  *s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf);
 
 	if (s == NULL)
 	    return;
@@ -3621,6 +3623,15 @@
 }
 
 /*
+ * "execute()" function
+ */
+    static void
+f_execute(typval_T *argvars, typval_T *rettv)
+{
+    execute_common(argvars, rettv, 0);
+}
+
+/*
  * "exepath()" function
  */
     static void
@@ -6097,6 +6108,30 @@
 }
 
 /*
+ * "win_execute()" function
+ */
+    static void
+f_win_execute(typval_T *argvars, typval_T *rettv)
+{
+    int		id = (int)tv_get_number(argvars);
+    win_T	*wp = win_id2wp(id);
+    win_T	*save_curwin = curwin;
+
+    if (wp != NULL)
+    {
+	curwin = wp;
+	curbuf = curwin->w_buffer;
+	check_cursor();
+	execute_common(argvars, rettv, 1);
+	if (win_valid(save_curwin))
+	{
+	    curwin = save_curwin;
+	    curbuf = curwin->w_buffer;
+	}
+    }
+}
+
+/*
  * "win_findbuf()" function
  */
     static void
diff --git a/src/popupwin.c b/src/popupwin.c
index 82ef27a..5853c7b 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -238,6 +238,7 @@
     buf->b_p_ul = -1;	    // no undo
     buf->b_p_swf = FALSE;   // no swap file
     buf->b_p_bl = FALSE;    // unlisted buffer
+    buf->b_locked = TRUE;
 
     win_init_popup_win(wp, buf);
 
@@ -376,6 +377,7 @@
     static void
 popup_free(win_T *wp)
 {
+    wp->w_buffer->b_locked = FALSE;
     if (wp->w_winrow + wp->w_height >= cmdline_row)
 	clear_cmdline = TRUE;
     win_free_popup(wp);
diff --git a/src/testdir/test_execute_func.vim b/src/testdir/test_execute_func.vim
index b84fbeb..78561b3 100644
--- a/src/testdir/test_execute_func.vim
+++ b/src/testdir/test_execute_func.vim
@@ -78,3 +78,27 @@
   endfor
   call assert_equal('xyz ', text2)
 endfunc
+
+func Test_win_execute()
+  let thiswin = win_getid()
+  new
+  let otherwin = win_getid()
+  call setline(1, 'the new window')
+  call win_gotoid(thiswin)
+  let line = win_execute(otherwin, 'echo getline(1)')
+  call assert_match('the new window', line)
+
+  if has('textprop')
+    let popupwin = popup_create('the popup win', {'line': 2, 'col': 3})
+    redraw
+    let line = win_execute(popupwin, 'echo getline(1)')
+    call assert_match('the popup win', line)
+
+    call assert_fails('call win_execute(popupwin, "bwipe!")', 'E937:')
+
+    call popup_close(popupwin)
+  endif
+
+  call win_gotoid(otherwin)
+  bwipe!
+endfunc
diff --git a/src/version.c b/src/version.c
index 38b51f7..511b28b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1418,
+/**/
     1417,
 /**/
     1416,
