diff --git a/plugin/magit.vim b/plugin/magit.vim
index 46dc088b4ebd1244e3a80cfd4da3f055eee3b8cf..6abd5fb6393938b186615fc9768794ec6ee26a35 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -583,11 +583,15 @@ function! magit#show_magit(display, ...)
 		return
 	endif
 	if ( a:display == 'v' )
-		vnew 
+		vnew
 	elseif ( a:display == 'h' )
-		new 
+		new
 	elseif ( a:display == 'c' )
-		enew
+		if ( bufname("%") == "" )
+			keepalt enew
+		else
+			enew
+		endif
 	else
 		throw 'parameter_error'
 	endif
@@ -603,19 +607,21 @@ function! magit#show_magit(display, ...)
 		let b:magit_default_fold_level = a:2
 	endif
 
-	if ( bufexists(g:magit_buffer_name) )
-		silent! execute "bdelete " . g:magit_buffer_name
-	endif
-	silent! execute "file " . g:magit_buffer_name
-
 	setlocal buftype=nofile
 	setlocal bufhidden=hide
 	setlocal noswapfile
 	setlocal foldmethod=syntax
+	setlocal nobuflisted
 	let &l:foldlevel = b:magit_default_fold_level
 	setlocal filetype=magit
 	"setlocal readonly
 
+	try
+		silent execute "buffer " . g:magit_buffer_name
+	catch /^Vim\%((\a\+)\)\=:E94/
+		silent execute "keepalt file " . g:magit_buffer_name
+	endtry
+
 	call magit#utils#setbufnr(bufnr(g:magit_buffer_name))
 	call magit#sign#init()