diff -r 2ee5e568766c runtime/doc/options.txt
--- a/runtime/doc/options.txt	Thu Aug 22 14:14:27 2013 +0200
+++ b/runtime/doc/options.txt	Sat Aug 24 13:33:32 2013 +0200
@@ -4658,31 +4658,35 @@
 			{not in Vi}
 	Strings to use in 'list' mode and for the |:list| command.  It is a
 	comma separated list of string settings.
-	  						*lcs-eol*
+							*lcs-eol*
 	  eol:c		Character to show at the end of each line.  When
 			omitted, there is no extra character at the end of the
 			line.
-	  						*lcs-tab*
+							*lcs-tab*
 	  tab:xy	Two characters to be used to show a tab.  The first
 			char is used once.  The second char is repeated to
 			fill the space that the tab normally occupies.
 			"tab:>-" will show a tab that takes four spaces as
 			">---".  When omitted, a tab is show as ^I.
-	  						*lcs-trail*
+							*lcs-space*
+	  space:c	Character to show for a space.  When omitted, spaces
+			are left blank.
+							*lcs-trail*
 	  trail:c	Character to show for trailing spaces.  When omitted,
-			trailing spaces are blank.
-	  						*lcs-extends*
+			trailing spaces are blank.  Overrides the "space"
+			setting for trailing spaces.
+							*lcs-extends*
 	  extends:c	Character to show in the last column, when 'wrap' is
 			off and the line continues beyond the right of the
 			screen.
-	  						*lcs-precedes*
+							*lcs-precedes*
 	  precedes:c	Character to show in the first column, when 'wrap'
 			is off and there is text preceding the character
 			visible in the first column.
-	  						*lcs-conceal*
+							*lcs-conceal*
 	  conceal:c	Character to show in place of concealed text, when
 			'conceallevel' is set to 1.
-	  						*lcs-nbsp*
+							*lcs-nbsp*
 	  nbsp:c	Character to show for a non-breakable space (character
 			0xA0, 160).  Left blank when omitted.
 
@@ -4691,11 +4695,11 @@
 	characters are allowed.  All characters must be single width.
 
 	Examples: >
-	    :set lcs=tab:>-,trail:-
+	    :set lcs=tab:>-,space:.,trail:-
 	    :set lcs=tab:>-,eol:<,nbsp:%
 	    :set lcs=extends:>,precedes:<
 <	The "NonText" highlighting will be used for "eol", "extends" and
-	"precedes".  "SpecialKey" for "nbsp", "tab" and "trail".
+	"precedes".  "SpecialKey" for "tab", "space", "trail" and "nbsp".
 	|hl-NonText| |hl-SpecialKey|
 
 			*'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*
diff -r 2ee5e568766c src/globals.h
--- a/src/globals.h	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/globals.h	Sat Aug 24 13:33:32 2013 +0200
@@ -1158,6 +1158,7 @@
 EXTERN int	lcs_ext INIT(= NUL);
 EXTERN int	lcs_prec INIT(= NUL);
 EXTERN int	lcs_nbsp INIT(= NUL);
+EXTERN int	lcs_space INIT(= NUL);
 EXTERN int	lcs_tab1 INIT(= NUL);
 EXTERN int	lcs_tab2 INIT(= NUL);
 EXTERN int	lcs_trail INIT(= NUL);
diff -r 2ee5e568766c src/message.c
--- a/src/message.c	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/message.c	Sat Aug 24 13:33:32 2013 +0200
@@ -1749,6 +1749,11 @@
 		c = lcs_trail;
 		attr = hl_attr(HLF_8);
 	    }
+	    else if (c == ' ' && list && lcs_space)
+	    {
+		c = lcs_space;
+		attr = hl_attr(HLF_8);
+	    }
 	}
 
 	if (c == NUL)
diff -r 2ee5e568766c src/option.c
--- a/src/option.c	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/option.c	Sat Aug 24 13:33:32 2013 +0200
@@ -7260,6 +7260,7 @@
 	{&lcs_ext,	"extends"},
 	{&lcs_nbsp,	"nbsp"},
 	{&lcs_prec,	"precedes"},
+	{&lcs_space,	"space"},
 	{&lcs_tab2,	"tab"},
 	{&lcs_trail,	"trail"},
 #ifdef FEAT_CONCEAL
diff -r 2ee5e568766c src/screen.c
--- a/src/screen.c	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/screen.c	Sat Aug 24 13:33:32 2013 +0200
@@ -4227,14 +4227,16 @@
 #endif
 	    ++ptr;
 
-	    /* 'list' : change char 160 to lcs_nbsp. */
-	    if (wp->w_p_list && (c == 160
+	    /* 'list': change char 160 to lcs_nbsp and space to lcs_space. */
+	    if (wp->w_p_list
+		    && (((c == 160
 #ifdef FEAT_MBYTE
-			|| (mb_utf8 && mb_c == 160)
-#endif
-			) && lcs_nbsp)
-	    {
-		c = lcs_nbsp;
+			  || (mb_utf8 && mb_c == 160)
+#endif
+			 ) && lcs_nbsp)
+			|| (c == ' ' && lcs_space && ptr <= line + trailcol)))
+	    {
+		c = (c == ' ') ? lcs_space : lcs_nbsp;
 		if (area_attr == 0 && search_attr == 0)
 		{
 		    n_attr = 1;
diff -r 2ee5e568766c src/testdir/test88.in
--- a/src/testdir/test88.in	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/testdir/test88.in	Sat Aug 24 13:33:32 2013 +0200
@@ -1,13 +1,54 @@
-vim: set ft=vim
-
+Tests for 'listchars' display with 'list' and :list.
 Tests for correct display (cursor column position) with +conceal and
 tabulators.
 
 STARTTEST
 :so small.vim
+:set listchars+=tab:>-,space:.,trail:<
+:set list
+:let lines = []
+:function! GetScreenline(lnum)
+:  return join(map(range(1,virtcol('$')),'nr2char(screenchar(a:lnum,v:val))'),'')
+:endfunction
+:nnoremap <expr> GG ":call add(lines, GetScreenline(".screenrow()."))\n"
+:
+/^start:/
+:normal! jzt
+GG
+GG
+:set listchars-=trail:<
+GG:
+:put =lines
+:-2,.w! test.out
+ENDTEST
+
+start:
+  aaa	aa	
+   bb 	bbb  	  
+cc  cc	   
+
+
+STARTTEST
+:set nolist
+:set listchars+=trail:<
+/^start:/
+:redir! >> test.out
+:+1,+3list
+:redir END
+:set listchars&
+ENDTEST
+
+start:
+  d d d	d   
+eeee	
+fffff 	 g
+
+STARTTEST
 :if !has('conceal')
-   e! test.ok
-   wq! test.out
+:  e! test.out
+:  $r test.ok
+:  .,/^end:/-2d
+:  wq!
 :endif
 :" Conceal settings.
 :set conceallevel=2
@@ -72,9 +113,10 @@
 :normal $
 GGk
 :" Display result.
-:call append('$', 'end:')
+:call append('$', ['', 'end:'])
 :call append('$', positions)
-:/^end/,$wq! test.out
+:/^end:/-1,$w! >> test.out
+:q!
 ENDTEST
 
 start:
diff -r 2ee5e568766c src/testdir/test88.ok
--- a/src/testdir/test88.ok	Thu Aug 22 14:14:27 2013 +0200
+++ b/src/testdir/test88.ok	Sat Aug 24 13:33:32 2013 +0200
@@ -1,3 +1,12 @@
+..aaa>--aa>-----$
+...bb.>-bbb<<>--<<$
+cc..cc>-...$
+
+
+..d.d.d>d<<<$
+eeee>---$
+fffff.>-.g$
+
 end:
 2:1
 2:17
