diff --git a/src/option.c b/src/option.c
index c365ca6..2146be7 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3269,7 +3269,7 @@
 static int findoption(char_u *);
 static int find_key_option(char_u *arg_arg, int has_lt);
 static void showoptions(int all, int opt_flags);
-static int optval_default(struct vimoption *, char_u *varp);
+static int optval_default(struct vimoption *, char_u *varp, int compatible);
 static void showoneopt(struct vimoption *, int opt_flags);
 static int put_setstring(FILE *fd, char *cmd, char *name, char_u **valuep, long_u flags);
 static int put_setnum(FILE *fd, char *cmd, char *name, long *valuep);
@@ -3893,6 +3893,36 @@
 	options[opt_idx].def_val[VI_DEFAULT] = (char_u *)(long_i)val;
 }
 
+/*
+ * Set all window-local and buffer-local options to the Vim default.
+ * local-global options will use the global value.
+ */
+    void
+set_local_options_default(win_T *wp)
+{
+    win_T	*save_curwin = curwin;
+    int		i;
+
+    curwin = wp;
+    curbuf = curwin->w_buffer;
+    block_autocmds();
+
+    for (i = 0; !istermoption(&options[i]); i++)
+    {
+	struct vimoption    *p = &(options[i]);
+	char_u		    *varp = get_varp_scope(p, OPT_LOCAL);
+
+	if (p->indir != PV_NONE
+		&& !(options[i].flags & P_NODEFAULT)
+		&& !optval_default(p, varp, FALSE))
+	    set_option_default(i, OPT_LOCAL, FALSE);
+    }
+
+    unblock_autocmds();
+    curwin = save_curwin;
+    curbuf = curwin->w_buffer;
+}
+
 #if defined(EXITFREE) || defined(PROTO)
 /*
  * Free all options.
@@ -10149,7 +10179,7 @@
 	    if (varp != NULL
 		    && ((all == 2 && isterm)
 			|| (all == 1 && !isterm)
-			|| (all == 0 && !optval_default(p, varp))))
+			|| (all == 0 && !optval_default(p, varp, p_cp))))
 	    {
 		if (p->flags & P_BOOL)
 		    len = 1;		/* a toggle option fits always */
@@ -10199,13 +10229,13 @@
  * Return TRUE if option "p" has its default value.
  */
     static int
-optval_default(struct vimoption *p, char_u *varp)
+optval_default(struct vimoption *p, char_u *varp, int compatible)
 {
     int		dvi;
 
     if (varp == NULL)
 	return TRUE;	    /* hidden option is always at default */
-    dvi = ((p->flags & P_VI_DEF) || p_cp) ? VI_DEFAULT : VIM_DEFAULT;
+    dvi = ((p->flags & P_VI_DEF) || compatible) ? VI_DEFAULT : VIM_DEFAULT;
     if (p->flags & P_NUM)
 	return (*(long *)varp == (long)(long_i)p->def_val[dvi]);
     if (p->flags & P_BOOL)
@@ -10311,7 +10341,7 @@
 
 	    /* Global values are only written when not at the default value. */
 	    varp = get_varp_scope(p, opt_flags);
-	    if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp))
+	    if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp))
 		continue;
 
 	    round = 2;
@@ -10327,7 +10357,7 @@
 		    if (!(opt_flags & OPT_GLOBAL) && !local_only)
 		    {
 			varp_fresh = get_varp_scope(p, OPT_GLOBAL);
-			if (!optval_default(p, varp_fresh))
+			if (!optval_default(p, varp_fresh, p_cp))
 			{
 			    round = 1;
 			    varp_local = varp;
diff --git a/src/popupwin.c b/src/popupwin.c
index 0ad24cf..c926536 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -253,6 +253,10 @@
     if (buf == NULL)
 	return;
     ml_open(buf);
+
+    win_init_popup_win(wp, buf);
+
+    set_local_options_default(wp);
     set_string_option_direct_in_buf(buf, (char_u *)"buftype", -1,
 				     (char_u *)"popup", OPT_FREE|OPT_LOCAL, 0);
     set_string_option_direct_in_buf(buf, (char_u *)"bufhidden", -1,
@@ -262,8 +266,6 @@
     buf->b_p_bl = FALSE;    // unlisted buffer
     buf->b_locked = TRUE;
 
-    win_init_popup_win(wp, buf);
-
     nr = (int)dict_get_number(d, (char_u *)"tab");
     if (nr == 0)
     {
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 4a0da1c..49b2b65 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -2,6 +2,7 @@
 void set_init_1(int clean_arg);
 void set_string_default(char *name, char_u *val);
 void set_number_default(char *name, long val);
+void set_local_options_default(win_T *wp);
 void free_all_options(void);
 void set_init_2(void);
 void set_init_3(void);
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index a11e5a0..3e71c97 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -264,3 +264,26 @@
   call popup_close(winid)
   call assert_equal({}, popup_getoptions(winid))
 endfunc
+
+func Test_popup_option_values()
+  new
+  " window-local
+  setlocal number
+  setlocal nowrap
+  " buffer-local
+  setlocal omnifunc=Something
+  " global/buffer-local
+  setlocal path=/there
+  " global/window-local
+  setlocal scrolloff=9
+
+  let winid = popup_create('hello', {})
+  call assert_equal(0, getwinvar(winid, '&number'))
+  call assert_equal(1, getwinvar(winid, '&wrap'))
+  call assert_equal('', getwinvar(winid, '&omnifunc'))
+  call assert_equal(&g:path, getwinvar(winid, '&path'))
+  call assert_equal(&g:scrolloff, getwinvar(winid, '&scrolloff'))
+
+  call popup_close(winid)
+  bwipe
+endfunc
diff --git a/src/version.c b/src/version.c
index 8519fd5..2d70ed5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1423,
+/**/
     1422,
 /**/
     1421,
