diff --git a/autoload/magit/sign.vim b/autoload/magit/sign.vim
index 646347a938d2d11cd0daf162a793dda10c5a8d25..7a53390921aafefac34b623b5efda53116173d5c 100644
--- a/autoload/magit/sign.vim
+++ b/autoload/magit/sign.vim
@@ -14,6 +14,16 @@ let s:supports_star = v:version > 703 || (v:version == 703 && has("patch596"))
 
 let s:bufnr = bufnr(g:magit_buffer_name)
 
+function! magit#sign#remove_all(...)
+	if ( a:0 == 1 )
+		let pattern = a:1
+	else
+		let pattern = '^Magit.*'
+	endif
+	let signs = magit#sign#find_signs(pattern, 1, line('$'))
+	call magit#sign#remove_signs(signs)
+endfunction
+
 " magit#sign#remove_signs: unplace a list of signs
 " param[in] sign_ids: list of signs dict
 function! magit#sign#remove_signs(sign_ids)
diff --git a/plugin/magit.vim b/plugin/magit.vim
index 77daf24308cb0200cad9cf13169deb7e4c016102..bf5eb4a4035b6589f1b5e999eaa71b495dbb7edd 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -576,7 +576,12 @@ function! magit#update_buffer()
 	" Playing with foldenable around does not help.
 	" mkview does not help either.
 	let l:winview = winsaveview()
-	silent! %d
+
+	" remove all signs (needed as long as we wipe buffer)
+	call magit#sign#remove_all()
+	
+	" delete buffer
+	silent! execute "silent :%delete _"
 	
 	call <SID>mg_get_info()
 	call <SID>mg_section_help('global')