diff --git a/autoload/magit/mapping.vim b/autoload/magit/mapping.vim
index 6bffbf8399c7dd513d36aed37a4f5cc1f8d13723..2407dd94a44c6c0a56b8206bcd645fe1cae254d1 100644
--- a/autoload/magit/mapping.vim
+++ b/autoload/magit/mapping.vim
@@ -117,9 +117,11 @@ function! magit#mapping#set_default()
 	call s:mg_set_mapping('n', g:magit_discard_hunk_mapping,
 				\ "magit#stage_hunk(1)", '\<\%(un\)\?staged\>')
 	call s:mg_set_mapping('n', g:magit_stage_line_mapping,
-				\ "magit#stage_vselect()", '\<\%(un\)\?staged\>')
+				\ "magit#stage_vselect(0)", '\<\%(un\)\?staged\>')
 	call s:mg_set_mapping('x', g:magit_stage_hunk_mapping,
-				\ "magit#stage_vselect()", '\<\%(un\)\?staged\>')
+				\ "magit#stage_vselect(0)", '\<\%(un\)\?staged\>')
+	call s:mg_set_mapping('x', g:magit_discard_hunk_mapping,
+				\ "magit#stage_vselect(1)", '\<\%(un\)\?staged\>')
 	call s:mg_set_mapping('n', g:magit_mark_line_mapping,
 				\ "magit#mark_vselect()", '\<\%(un\)\?staged\>')
 	call s:mg_set_mapping('x', g:magit_mark_line_mapping,
diff --git a/plugin/magit.vim b/plugin/magit.vim
index 0f1a975cbb034bab15adcdde2ff00491d21f59ff..638873ea771f58e8852f98ea86c166577e26c963 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -1042,7 +1042,7 @@ endfunction
 " INFO: in unstaged section, it stages the file, and in staged section, it
 " unstages the file
 " return: no
-function! magit#stage_vselect() range
+function! magit#stage_vselect(discard) range
 	" func-range a:firstline a:lastline seems to work at least from vim 7.2
 	let lines = []
 	let curline = a:firstline
@@ -1063,7 +1063,7 @@ function! magit#stage_vselect() range
 		echomsg "https://github.com/jreybert/vimagit/issues/new"
 		return
 	endtry
-	return magit#stage_block(selection, 0)
+	return magit#stage_block(selection, a:discard)
 endfunction
 
 " magit#mark_vselect: wrapper function to mark selected lines (see