diff --git a/autoload/magit/utils.vim b/autoload/magit/utils.vim
index 237a5fc265ccacffbba44c28e546cd0a8e50306d..161ef6e21f2d7461d2c6d832b049086a0e1758db 100644
--- a/autoload/magit/utils.vim
+++ b/autoload/magit/utils.vim
@@ -153,23 +153,6 @@ function! magit#utils#bufnr()
 	return s:bufnr
 endfunction
 
-" magit#utils#search_buffer_in_windows: search if a buffer is displayed in one
-" of opened windows
-" NOTE: windo command modify winnr('#'), if you want to use it, save it before
-" calling this function
-" param[in] filename: filename to search
-" return: window id, 0 if not found
-function! magit#utils#search_buffer_in_windows(filename)
-	let cur_win = winnr()
-	let last_win = winnr('#')
-	let files={}
-	windo if ( !empty(@%) ) | let files[@%] = winnr() | endif
-	execute last_win."wincmd w"
-	execute cur_win."wincmd w"
-	return ( has_key(files, buffer_name(a:filename)) ) ?
-				\files[buffer_name(a:filename)] : 0
-endfunction
-
 function! magit#utils#start_profile(...)
 	let prof_file = ( a:0 == 1 ) ? a:1 : "/tmp/vimagit.log"
 	profdel *
diff --git a/plugin/magit.vim b/plugin/magit.vim
index e1500609b682b0f7a43e136704d51fd24fed32f8..4fb36e4dc16d1b0c6113f883a56d1c45139fa2a3 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -7,11 +7,12 @@ let g:loaded_magit = 1
 
 let g:vimagit_version = [1, 7, 3]
 
-" Initialisation {{{
+let g:vimagit_minium_vim_version = '7.4.1926'
+if ! has('patch-' . g:vimagit_minium_vim_version)
+	throw "vimagit needs at least vim " . g:vimagit_minium_vim_version
+endif
 
-" FIXME: find if there is a minimum vim version required
-" if v:version < 703
-" endif
+" Initialisation {{{
 
 " source common file. variables in common file are shared with plugin and
 " syntax files
@@ -759,10 +760,10 @@ function! magit#show_magit(display, ...)
 
 	let buffer_name=fnameescape('magit://' . git_dir)
 
-	let magit_win = magit#utils#search_buffer_in_windows(buffer_name)
+	let magit_win = bufwinid(buffer_name)
 
-	if ( magit_win != 0 )
-		silent execute magit_win."wincmd w"
+	if ( magit_win != -1 )
+		call win_gotoid(magit_win)
 	elseif ( a:display == 'v' )
 		silent execute "vnew " . buffer_name
 		" next is a workaround for vader, revert as soon as vader bug is fixed
@@ -1303,14 +1304,23 @@ function! magit#jump_to()
 	let line_in_hunk = len(filter(hunk_extract, 'v:val =~ "^[ +]"'))
 	let line_in_file += line_in_hunk
 
-	" winnr('#') is overwritten by magit#get_win()
-	let last_win = winnr('#')
-	let buf_win = magit#utils#search_buffer_in_windows(filename)
-	let buf_win = ( buf_win == 0 ) ? last_win : buf_win
-	if ( buf_win == 0 || winnr('$') == 1 )
+	if ( winnr('$') == 1 )
+		" if single window in current tab, create a new window to the right
 		rightbelow vnew
+	elseif ( bufwinid(filename) != -1 )
+		" window in current tab with 'filename' buffer visible
+		call win_gotoid(bufwinid(filename))
+	elseif ( win_getid(winnr('#')) )
+		" last access window
+		call win_gotoid(win_getid(winnr('#')))
+	elseif ( win_getid(winnr('1l')) != win_getid() )
+		" right window
+		call win_gotoid(win_getid(winnr('1l')))
+	elseif ( win_getid(winnr('1h')) != win_getid() )
+		" left window
+		call win_gotoid(win_getid(winnr('1h')))
 	else
-		execute buf_win."wincmd w"
+		throw "unexpected error: no viable window"
 	endif
 
 	try