diff --git a/src/screen.c b/src/screen.c
index 0151888..1ddafb3 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -285,9 +285,9 @@
     {
 	if (win_foldinfo.fi_lnum == lnum
 		&& first_level + i >= win_foldinfo.fi_low_level)
-	    symbol = fill_foldopen;
+	    symbol = wp->w_fill_chars.foldopen;
 	else if (first_level == 1)
-	    symbol = fill_foldsep;
+	    symbol = wp->w_fill_chars.foldsep;
 	else if (first_level + i <= 9)
 	    symbol = '0' + first_level + i;
 	else
@@ -312,7 +312,7 @@
 		// for a multibyte character, erase all the bytes
 		vim_memset(p + byte_counter, ' ', len);
 	}
-	symbol = fill_foldclosed;
+	symbol = wp->w_fill_chars.foldclosed;
 	len = utf_char2bytes(symbol, &p[byte_counter]);
 	byte_counter += len;
     }
@@ -430,11 +430,12 @@
  */
     void
 screen_line(
-    int	    row,
-    int	    coloff,
-    int	    endcol,
-    int	    clear_width,
-    int	    flags UNUSED)
+	win_T	*wp,
+	int	row,
+	int	coloff,
+	int	endcol,
+	int	clear_width,
+	int	flags UNUSED)
 {
     unsigned	    off_from;
     unsigned	    off_to;
@@ -794,7 +795,7 @@
 	    {
 		int c;
 
-		c = fillchar_vsep(&hl);
+		c = fillchar_vsep(&hl, wp);
 		if (ScreenLines[off_to] != (schar_T)c
 			|| (enc_utf8 && (int)ScreenLinesUC[off_to]
 							!= (c >= 0x80 ? c : 0))
@@ -853,7 +854,7 @@
     if (wp->w_vsep_width)
     {
 	// draw the vertical separator right of this window
-	c = fillchar_vsep(&hl);
+	c = fillchar_vsep(&hl, wp);
 	screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + wp->w_height,
 		W_ENDCOL(wp), W_ENDCOL(wp) + 1,
 		c, ' ', hl);
@@ -4619,12 +4620,12 @@
 	if (wp == curwin)
 	{
 	    *attr = HL_ATTR(HLF_ST);
-	    fill = fill_stl;
+	    fill = wp->w_fill_chars.stl;
 	}
 	else
 	{
 	    *attr = HL_ATTR(HLF_STNC);
-	    fill = fill_stlnc;
+	    fill = wp->w_fill_chars.stlnc;
 	}
     }
     else
@@ -4632,19 +4633,19 @@
     if (wp == curwin)
     {
 	*attr = HL_ATTR(HLF_S);
-	fill = fill_stl;
+	fill = wp->w_fill_chars.stl;
     }
     else
     {
 	*attr = HL_ATTR(HLF_SNC);
-	fill = fill_stlnc;
+	fill = wp->w_fill_chars.stlnc;
     }
     // Use fill when there is highlighting, and highlighting of current
     // window differs, or the fillchars differ, or this is not the
     // current window
     if (*attr != 0 && ((HL_ATTR(HLF_S) != HL_ATTR(HLF_SNC)
 			|| wp != curwin || ONE_WINDOW)
-		    || (fill_stl != fill_stlnc)))
+		    || (wp->w_fill_chars.stl != wp->w_fill_chars.stlnc)))
 	return fill;
     if (wp == curwin)
 	return '^';
@@ -4656,13 +4657,13 @@
  * Get its attributes in "*attr".
  */
     int
-fillchar_vsep(int *attr)
+fillchar_vsep(int *attr, win_T *wp)
 {
     *attr = HL_ATTR(HLF_C);
-    if (*attr == 0 && fill_vert == ' ')
+    if (*attr == 0 && wp->w_fill_chars.vert == ' ')
 	return '|';
     else
-	return fill_vert;
+	return wp->w_fill_chars.vert;
 }
 
 /*
@@ -4848,29 +4849,30 @@
     char *
 set_chars_option(win_T *wp, char_u **varp)
 {
-    int		round, i, len, len2, entries;
-    char_u	*p, *s;
-    int		c1 = 0, c2 = 0, c3 = 0;
-    char_u	*last_multispace = NULL; // Last occurrence of "multispace:"
-    char_u	*last_lmultispace = NULL; // Last occurrence of "leadmultispace:"
-    int		multispace_len = 0;	 // Length of lcs-multispace string
-    int		lead_multispace_len = 0; // Length of lcs-leadmultispace string
+    int	    round, i, len, len2, entries;
+    char_u  *p, *s;
+    int	    c1 = 0, c2 = 0, c3 = 0;
+    char_u  *last_multispace = NULL;  // Last occurrence of "multispace:"
+    char_u  *last_lmultispace = NULL; // Last occurrence of "leadmultispace:"
+    int	    multispace_len = 0;	      // Length of lcs-multispace string
+    int	    lead_multispace_len = 0;  // Length of lcs-leadmultispace string
     struct charstab
     {
 	int	*cp;
 	char	*name;
     };
+    static fill_chars_T fill_chars;
     static struct charstab filltab[] =
     {
-	{&fill_stl,		"stl"},
-	{&fill_stlnc,		"stlnc"},
-	{&fill_vert,		"vert"},
-	{&fill_fold,		"fold"},
-	{&fill_foldopen,	"foldopen"},
-	{&fill_foldclosed,	"foldclose"},
-	{&fill_foldsep,		"foldsep"},
-	{&fill_diff,		"diff"},
-	{&fill_eob,		"eob"},
+	{&fill_chars.stl,	"stl"},
+	{&fill_chars.stlnc,	"stlnc"},
+	{&fill_chars.vert,	"vert"},
+	{&fill_chars.fold,	"fold"},
+	{&fill_chars.foldopen,	"foldopen"},
+	{&fill_chars.foldclosed, "foldclose"},
+	{&fill_chars.foldsep,	"foldsep"},
+	{&fill_chars.diff,	"diff"},
+	{&fill_chars.eob,	"eob"},
     };
     static lcs_chars_T lcs_chars;
     struct charstab lcstab[] =
@@ -4903,6 +4905,8 @@
     {
 	tab = filltab;
 	entries = ARRAY_LENGTH(filltab);
+	if (varp == &wp->w_p_fcs && wp->w_p_fcs[0] == NUL)
+	    varp = &p_fcs;
     }
 
     // first round: check for valid value, second round: assign values
@@ -4910,15 +4914,12 @@
     {
 	if (round > 0)
 	{
-	    // After checking that the value is valid: set defaults: space for
-	    // 'fillchars', NUL for 'listchars'
-	    for (i = 0; i < entries; ++i)
-		if (tab[i].cp != NULL)
-		    *(tab[i].cp) =
-			((varp == &p_lcs || varp == &wp->w_p_lcs) ? NUL : ' ');
-
+	    // After checking that the value is valid: set defaults.
 	    if (varp == &p_lcs || varp == &wp->w_p_lcs)
 	    {
+		for (i = 0; i < entries; ++i)
+		    if (tab[i].cp != NULL)
+			*(tab[i].cp) = NUL;
 		lcs_chars.tab1 = NUL;
 		lcs_chars.tab3 = NUL;
 
@@ -4932,7 +4933,8 @@
 
 		if (lead_multispace_len > 0)
 		{
-		    lcs_chars.leadmultispace = ALLOC_MULT(int, lead_multispace_len + 1);
+		    lcs_chars.leadmultispace =
+				      ALLOC_MULT(int, lead_multispace_len + 1);
 		    lcs_chars.leadmultispace[lead_multispace_len] = NUL;
 		}
 		else
@@ -4940,11 +4942,15 @@
 	    }
 	    else
 	    {
-		fill_diff = '-';
-		fill_foldopen = '-';
-		fill_foldclosed = '+';
-		fill_foldsep = '|';
-		fill_eob = '~';
+		fill_chars.stl = ' ';
+		fill_chars.stlnc = ' ';
+		fill_chars.vert = ' ';
+		fill_chars.fold = '-';
+		fill_chars.foldopen = '-';
+		fill_chars.foldclosed = '+';
+		fill_chars.foldsep = '|';
+		fill_chars.diff = '-';
+		fill_chars.eob = '~';
 	    }
 	}
 	p = *varp;
@@ -5083,12 +5089,17 @@
 		++p;
 	}
     }
+
     if (tab == lcstab)
     {
 	vim_free(wp->w_lcs_chars.multispace);
 	vim_free(wp->w_lcs_chars.leadmultispace);
 	wp->w_lcs_chars = lcs_chars;
     }
+    else
+    {
+	wp->w_fill_chars = fill_chars;
+    }
 
     return NULL;	// no error
 }
