diff --git a/src/option.c b/src/option.c
index 3959d4711..df6dfd98d 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1985,7 +1985,7 @@ static struct vimoption options[] =
                            (char_u *)&p_nf, PV_NF,
                            {(char_u *)"bin,octal,hex", (char_u *)0L}
                            SCTX_INIT},
-    {"number",     "nu",   P_BOOL|P_VI_DEF|P_RCLR,
+    {"number",     "nu",   P_BOOL|P_VI_DEF|P_RWIN,
                            (char_u *)VAR_WIN, PV_NU,
                            {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
     {"numberwidth", "nuw",  P_NUM|P_RWIN|P_VIM,
@@ -2261,7 +2261,7 @@ static struct vimoption options[] =
     {"regexpengine", "re",  P_NUM|P_VI_DEF,
                            (char_u *)&p_re, PV_NONE,
                            {(char_u *)0L, (char_u *)0L} SCTX_INIT},
-    {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RCLR,
+    {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
                            (char_u *)VAR_WIN, PV_RNU,
                            {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
     {"remap",      NULL,   P_BOOL|P_VI_DEF,
@@ -9008,6 +9008,17 @@ set_bool_option(
 
 #endif
 
+    // 'number' or 'relativenumber'
+    else if (((int *)varp == &curwin->w_p_nu
+             || (int *)varp == &curwin->w_p_rnu) && (!old_value && value))
+    {
+       // If 'number' or 'relativenumber' option is set and 'signcolumn' is
+       // set to 'number', then clear the screen for a full refresh. Otherwise
+       // sign GUI icons are not displayed properly in the number column.
+       if (*curwin->w_p_scl == 'n' && *(curwin->w_p_scl + 1) == 'u')
+           redraw_all_later(CLEAR);
+    }
+
 #ifdef FEAT_TERMGUICOLORS
     /* 'termguicolors' */
     else if ((int *)varp == &p_tgc)

