diff --git a/README.md b/README.md
index ebe1aa2e68d1d8ff7a121c85f1af610835e0ede2..0d36951861dc5e9c05eeb74c15a287873434d6a3 100644
--- a/README.md
+++ b/README.md
@@ -93,7 +93,22 @@ There are 5 sections:
 
 ### Commands
 
-**:Magit**
+#### magit#show_magit()
+
+Function to open magit buffer.
+It takes 3 parameters:
+  * orientation (mandatory): it can be
+      - 'v', curent window is split vertically, and magit is displayed in new
+        buffer
+      - 'h', curent window is split horizontally, and magit is displayed in
+        new buffer
+      - 'c', magit is displayed in current buffer
+  * show_all_files: define is file diffs are shown by default for this session
+    (see [g:magit_default_show_all_files](#g_magit_default_show_all_files))
+  * foldlevel: set default magit buffer foldlevel for this session
+    (see [g:magit_default_fold_level](#g_magit_default_fold_level))
+
+#### :Magit
  * open magit buffer.
 
 ### Mappings
@@ -176,11 +191,33 @@ Following mappings are set locally, for magit buffer only, in normal mode.
 
 User can define in its prefered |vimrc| some options.
 
-To disable vimagit plugin
-> let g:magit_enabled=0
+#### g:magit_enabled
+
+To enable or disable vimagit plugin.
+Default value is 1.
+> let g:magit_enabled=[01]
+
+#### g:magit_show_help
+
+To disable chatty inline help in magit buffer (default 1)
+> let g:magit_show_help=[01]
+
+#### g:magit_default_show_all_files
+
+When this variable is set to 0, all diff files are hidden by default.
+When this variable is set to 1, all diff files are shown by default.
+Default value is 0.
+NB: for repository with large number of differences, display may be slow.
+> let g:magit_default_show_all_files=[01]
+
+#### g:magit_default_fold_level
 
-To disable chatty inline help in magit buffer
-> let g:magit_show_help=0
+Default foldlevel for magit buffer.
+When set to 0, both filenames and hunks are folded.
+When set to 1, filenames are unfolded and hunks are folded.
+When set to 2, filenames and hunks are unfolded.
+Default value is 1.
+> let g:magit_default_fold_level=[012]
 
 ## Installation
 
diff --git a/autoload/magit/state.vim b/autoload/magit/state.vim
index c7b7d03a432feb25349145921701be6361107889..160bd2562dc2ae2930d0113891a83655942cd306 100644
--- a/autoload/magit/state.vim
+++ b/autoload/magit/state.vim
@@ -88,7 +88,7 @@ function! magit#state#get_file(mode, filename, ...) dict
 	let create = ( a:0 == 1 ) ? a:1 : 0
 	if ( file_exists == 0 && create == 1 )
 		let self.dict[a:mode][a:filename] = deepcopy(s:file_template)
-		let self.dict[a:mode][a:filename].visible = 0
+		let self.dict[a:mode][a:filename].visible = b:magit_default_show_all_files
 	elseif ( file_exists == 0 && create == 0 )
 		throw 'file_doesnt_exists'
 	endif
diff --git a/doc/vimagit.txt b/doc/vimagit.txt
index 497c346ebdf48d0faff9e6f72eb4eb5c919ff088..78cbdfefd9119ac9bb4344dd3b360d14bdfe57a3 100644
--- a/doc/vimagit.txt
+++ b/doc/vimagit.txt
@@ -112,6 +112,20 @@ INLINE MODIFICATIONS                               *vimagit-inline-modification*
 
 COMMANDS                                                      *vimagit-commands*
 
+                                                            *magit#show_magit()*
+Function to open magit buffer.
+It takes 3 parameters:
+  * orientation (mandatory): it can be
+      - 'v', curent window is split vertically, and magit is displayed in new
+        buffer
+      - 'h', curent window is split horizontally, and magit is displayed in
+        new buffer
+      - 'c', magit is displayed in current buffer
+  * show_all_files: define is file diffs are shown by default for this session
+    (see |vimagit-g:magit_default_show_all_files|)
+  * foldlevel: set default magit buffer foldlevel for this session
+    (see |vimagit-g:magit_default_fold_level|)
+
                                         *:Magit*           *magit#show_magit('v')*
   :Magit    open magit buffer
 
@@ -239,12 +253,28 @@ Following mappings are set locally, for magit buffer only, in normal mode.
 User can define in its prefered |vimrc| some options.
 
                                                        *vimagit-g:magit_enabled*
-To disable vimagit plugin
-let g:magit_enabled=0
+To enable or disable vimagit plugin.
+Default value is 1.
+let g:magit_enabled=[01]
 
                                                      *vimagit-g:magit_show_help*
-To disable chatty inline help in magit buffer
-let g:magit_show_help=0
+To disable chatty inline help in magit buffer (default 1)
+let g:magit_show_help=[01]
+
+                                        *vimagit-g:magit_default_show_all_files*
+When this variable is set to 0, all diff files are hidden by default.
+When this variable is set to 1, all diff files are shown by default.
+Default value is 0.
+NB: for repository with large number of differences, display may be slow.
+let g:magit_default_show_all_files=[01]
+
+                                            *vimagit-g:magit_default_fold_level*
+Default foldlevel for magit buffer.
+When set to 0, both filenames and hunks are folded.
+When set to 1, filenames are unfolded and hunks are folded.
+When set to 2, filenames and hunks are unfolded.
+Default value is 1.
+let g:magit_default_fold_level=[012]
 
 ===============================================================================
 6. FAQ                                                             *vimagit-FAQ*
diff --git a/plugin/magit.vim b/plugin/magit.vim
index bf5eb4a4035b6589f1b5e999eaa71b495dbb7edd..addd4135c3ea21f8fbc0c12187bce7a17a507208 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -59,6 +59,8 @@ call s:set('g:magit_folding_close_mapping',     [ 'zc', 'zC' ])
 " user options
 call s:set('g:magit_enabled',                   1)
 call s:set('g:magit_show_help',                 1)
+call s:set('g:magit_default_show_all_files',    0)
+call s:set('g:magit_default_fold_level',        1)
 
 execute "nnoremap <silent> " . g:magit_show_magit_mapping . " :call magit#show_magit('v')<cr>"
 " }}}
@@ -617,7 +619,7 @@ endfunction
 "     'v': vertical split
 "     'h': horizontal split
 "     'c': current buffer (should be used when opening vim in vimagit mode
-function! magit#show_magit(display)
+function! magit#show_magit(display, ...)
 	if ( magit#utils#strip(system("git rev-parse --is-inside-work-tree")) != 'true' )
 		echoerr "Magit must be started from a git repository"
 		return
@@ -631,17 +633,28 @@ function! magit#show_magit(display)
 	else
 		throw 'parameter_error'
 	endif
+
+	let b:magit_default_show_all_files = g:magit_default_show_all_files
+	let b:magit_default_fold_level = g:magit_default_fold_level
+
+	if ( a:0 > 0 )
+		let b:magit_default_show_all_files = a:1
+	endif
+	if ( a:0 > 1 )
+		let b:magit_default_fold_level = a:2
+	endif
+
+	silent! execute "bdelete " . g:magit_buffer_name
+	execute "file " . g:magit_buffer_name
+
 	setlocal buftype=nofile
 	setlocal bufhidden=delete
 	setlocal noswapfile
 	setlocal foldmethod=syntax
-	setlocal foldlevel=1
+	let &l:foldlevel = b:magit_default_fold_level
 	setlocal filetype=magit
 	"setlocal readonly
 
-	silent! execute "bdelete " . g:magit_buffer_name
-	execute "file " . g:magit_buffer_name
-
 	call magit#utils#setbufnr(bufnr(g:magit_buffer_name))
 	call magit#sign#init()