diff --git a/README.md b/README.md
index 9a2500b925d2572945abf61822f34f76c1969b58..40ffafcaa7bb7cb4adad8ffabbc72724ec1650d4 100644
--- a/README.md
+++ b/README.md
@@ -224,6 +224,9 @@ E means 'edit'.
 ##### R
  * Refresh magit buffer
 
+##### -,+
+ * Shrink,enlarge diff context
+
 ##### q
  * Close the magit buffer
 
diff --git a/autoload/magit/git.vim b/autoload/magit/git.vim
index 55e122f6704eab93ce6ba67f74ed83fdbdb067bf..d86cdfbf3bc45f48cd98c109ff3b79e38594df0f 100644
--- a/autoload/magit/git.vim
+++ b/autoload/magit/git.vim
@@ -117,8 +117,8 @@ function! magit#git#git_diff(filename, status, mode)
 	let dev_null = ( a:status == '?' ) ? "/dev/null " : ""
 	let staged_flag = ( a:mode == 'staged' ) ? "--staged" : ""
 	let git_cmd=g:magit_git_cmd . " diff --no-ext-diff " . staged_flag .
-				\ " --no-color -p -- " . dev_null . " "
-				\ . a:filename
+				\ " --no-color -p -U" . b:magit_diff_context .
+				\ " -- " . dev_null . " " . a:filename
 	silent let diff_list=magit#utils#systemlist(git_cmd)
 	if ( a:status != '?' && v:shell_error != 0 )
 		echohl WarningMsg
diff --git a/doc/vimagit.txt b/doc/vimagit.txt
index 6f024ad533b3f6fe91012ef3f93822e79fb3cd0e..1db0bc0d68a317a638ad346004db6cac4bfd4fa8 100644
--- a/doc/vimagit.txt
+++ b/doc/vimagit.txt
@@ -265,6 +265,13 @@ Following mappings are set locally, for magit buffer only, in normal mode.
 
                                     *vimagit-q*
                                     *vimagit-g:magit_close_mapping*
+
+                                    *vimagit--*              *magit#update_diff()*
+                                    *vimagit-+*
+                                    *vimagit-g:magit_diff_shrink*
+                                    *vimagit-g:magit_diff_enlarge*
+  -,+       Shrink,enlarge diff context
+
   q         close magit buffer.
 
                                     *vimagit-?*              *magit#toggle_help()*
diff --git a/plugin/magit.vim b/plugin/magit.vim
index a06208a0881d6bfb3f073ea801283018c238c482..49cefa20281576c6dca1162a1ecd0d6dc10e57ca 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -36,6 +36,9 @@ let g:magit_ignore_mapping         = get(g:, 'magit_ignore_mapping',
 let g:magit_close_mapping          = get(g:, 'magit_close_mapping',             'q' )
 let g:magit_toggle_help_mapping    = get(g:, 'magit_toggle_help_mapping',       '?' )
 
+let g:magit_diff_shrink            = get(g:, 'magit_diff_shrink',               '-' )
+let g:magit_diff_enlarge           = get(g:, 'magit_diff_enlarge',              '+' )
+
 let g:magit_folding_toggle_mapping = get(g:, 'magit_folding_toggle_mapping',    [ '<CR>' ])
 let g:magit_folding_open_mapping   = get(g:, 'magit_folding_open_mapping',      [ 'zo', 'zO' ])
 let g:magit_folding_close_mapping  = get(g:, 'magit_folding_close_mapping',     [ 'zc', 'zC' ])
@@ -114,6 +117,8 @@ let s:magit_inline_help = {
 \. '     commit undo, cancel and close current commit message',
 \g:magit_reload_mapping
 \.'      refresh magit buffer',
+\g:magit_diff_shrink.','.g:magit_diff_enlarge
+\.  '    shrink,enlarge diff context',
 \g:magit_close_mapping
 \.'      close magit buffer',
 \g:magit_toggle_help_mapping
@@ -788,6 +793,8 @@ function! magit#show_magit(display, ...)
 	let b:magit_current_commit_mode=''
 	let b:magit_commit_newly_open=0
 
+	let b:magit_diff_context=3
+
 	call magit#utils#setbufnr(bufnr(buffer_name))
 	call magit#sign#init()
 
@@ -802,6 +809,8 @@ function! magit#show_magit(display, ...)
 	execute "nnoremap <buffer> <silent> " . g:magit_close_commit_mapping . " :call magit#close_commit()<cr>"
 	execute "nnoremap <buffer> <silent> " . g:magit_ignore_mapping .       " :call magit#ignore_file()<cr>"
 	execute "nnoremap <buffer> <silent> " . g:magit_close_mapping .        " :call magit#close_magit()<cr>"
+	execute "nnoremap <buffer> <silent> " . g:magit_diff_shrink .          " :call magit#update_diff('-')<cr>"
+	execute "nnoremap <buffer> <silent> " . g:magit_diff_enlarge .         " :call magit#update_diff('+')<cr>"
 	execute "nnoremap <buffer> <silent> " . g:magit_toggle_help_mapping .  " :call magit#toggle_help()<cr>"
 
 	execute "nnoremap <buffer> <silent> " . g:magit_stage_line_mapping .   " :call magit#stage_vselect()<cr>"
@@ -1173,6 +1182,15 @@ function! magit#jump_to()
 		execute "edit " . "+" . line . " " filename
 endfunction
 
+function! magit#update_diff(way)
+	if ( a:way == "+" )
+		let b:magit_diff_context+=1
+	elseif ( b:magit_diff_context > 1 )
+		let b:magit_diff_context-=1
+	endif
+  call magit#update_buffer()
+endfunction
+
 function! magit#show_version()
 	return g:vimagit_version[0] . "." .
 				\ g:vimagit_version[1] . "." .