diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index e665c35..fb9093e 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -6016,7 +6016,7 @@
 		the pattern.  'smartcase' is NOT used.  The matching is always
 		done like 'magic' is set and 'cpoptions' is empty.
 
-					*matchadd()* *E798* *E799* *E801*
+				*matchadd()* *E798* *E799* *E801* *E957*
 matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
 		Defines a pattern to be highlighted in the current window (a
 		"match").  It will be highlighted with {group}.  Returns an
@@ -6055,6 +6055,8 @@
 			conceal	    Special character to show instead of the
 				    match (only for |hl-Conceal| highlighted
 				    matches, see |:syn-cchar|)
+			window	    Instead of the current window use the
+				    window with this number or window ID.
 
 		The number of matches is not limited, as it is the case with
 		the |:match| commands.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 23cdeb4..12eac8d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -7988,6 +7988,36 @@
     find_some_match(argvars, rettv, MATCH_MATCH);
 }
 
+#ifdef FEAT_SEARCH_EXTRA
+    static int
+matchadd_dict_arg(typval_T *tv, char_u **conceal_char, win_T **win)
+{
+    dictitem_T *di;
+
+    if (tv->v_type != VAR_DICT)
+    {
+	EMSG(_(e_dictreq));
+	return FAIL;
+    }
+
+    if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
+	*conceal_char = get_dict_string(tv->vval.v_dict,
+						   (char_u *)"conceal", FALSE);
+
+    if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
+    {
+	*win = find_win_by_nr(&di->di_tv, NULL);
+	if (*win == NULL)
+	{
+	    EMSG(_("E957: Invalid window number"));
+	    return FAIL;
+	}
+    }
+
+    return OK;
+}
+#endif
+
 /*
  * "matchadd()" function
  */
@@ -8002,6 +8032,7 @@
     int		id = -1;
     int		error = FALSE;
     char_u	*conceal_char = NULL;
+    win_T	*win = curwin;
 
     rettv->vval.v_number = -1;
 
@@ -8013,18 +8044,9 @@
 	if (argvars[3].v_type != VAR_UNKNOWN)
 	{
 	    id = (int)get_tv_number_chk(&argvars[3], &error);
-	    if (argvars[4].v_type != VAR_UNKNOWN)
-	    {
-		if (argvars[4].v_type != VAR_DICT)
-		{
-		    EMSG(_(e_dictreq));
-		    return;
-		}
-		if (dict_find(argvars[4].vval.v_dict,
-					     (char_u *)"conceal", -1) != NULL)
-		    conceal_char = get_dict_string(argvars[4].vval.v_dict,
-						  (char_u *)"conceal", FALSE);
-	    }
+	    if (argvars[4].v_type != VAR_UNKNOWN
+		&& matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
+		return;
 	}
     }
     if (error == TRUE)
@@ -8035,7 +8057,7 @@
 	return;
     }
 
-    rettv->vval.v_number = match_add(curwin, grp, pat, prio, id, NULL,
+    rettv->vval.v_number = match_add(win, grp, pat, prio, id, NULL,
 								conceal_char);
 #endif
 }
@@ -8054,6 +8076,7 @@
     int		error = FALSE;
     list_T	*l;
     char_u	*conceal_char = NULL;
+    win_T	*win = curwin;
 
     rettv->vval.v_number = -1;
 
@@ -8076,18 +8099,10 @@
 	if (argvars[3].v_type != VAR_UNKNOWN)
 	{
 	    id = (int)get_tv_number_chk(&argvars[3], &error);
-	    if (argvars[4].v_type != VAR_UNKNOWN)
-	    {
-		if (argvars[4].v_type != VAR_DICT)
-		{
-		    EMSG(_(e_dictreq));
-		    return;
-		}
-		if (dict_find(argvars[4].vval.v_dict,
-					     (char_u *)"conceal", -1) != NULL)
-		    conceal_char = get_dict_string(argvars[4].vval.v_dict,
-						  (char_u *)"conceal", FALSE);
-	    }
+
+	    if (argvars[4].v_type != VAR_UNKNOWN
+		&& matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
+		return;
 	}
     }
     if (error == TRUE)
@@ -8100,7 +8115,7 @@
 	return;
     }
 
-    rettv->vval.v_number = match_add(curwin, group, NULL, prio, id, l,
+    rettv->vval.v_number = match_add(win, group, NULL, prio, id, l,
 								conceal_char);
 #endif
 }
diff --git a/src/testdir/test_match.vim b/src/testdir/test_match.vim
index 28dd97c..70f0490 100644
--- a/src/testdir/test_match.vim
+++ b/src/testdir/test_match.vim
@@ -192,6 +192,28 @@
   set hlsearch&
 endfunc
 
+func Test_matchaddpos_otherwin()
+  syntax on
+  new
+  call setline(1, ['12345', 'NP'])
+  let winid = win_getid()
+
+  wincmd w
+  call matchadd('Search', '4', 10, -1, {'window': winid})
+  call matchaddpos('Error', [[1,2], [2,2]], 10, -1, {'window': winid})
+  redraw!
+  call assert_notequal(screenattr(1,2), 0)
+  call assert_notequal(screenattr(1,4), 0)
+  call assert_notequal(screenattr(2,2), 0)
+  call assert_equal(screenattr(1,2), screenattr(2,2))
+  call assert_notequal(screenattr(1,2), screenattr(1,4))
+
+  wincmd w
+  bwipe!
+  call clearmatches()
+  syntax off
+endfunc
+
 func Test_matchaddpos_using_negative_priority()
   set hlsearch
 
diff --git a/src/version.c b/src/version.c
index dd9e1d4..cf7fa29 100644
--- a/src/version.c
+++ b/src/version.c
@@ -799,6 +799,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    218,
+/**/
     217,
 /**/
     216,
