diff --git a/autoload/magit/state.vim b/autoload/magit/state.vim
index 62548074d7f97f267cec182f859a6b5892f58469..8781329aabf213a4ed22bb3af94f414e288ee73b 100644
--- a/autoload/magit/state.vim
+++ b/autoload/magit/state.vim
@@ -153,7 +153,7 @@ function! magit#state#add_file(mode, status, filename, depth) dict
 	elseif ( a:status == '?' && isdirectory(a:filename) == 1 )
 		let file.status = 'N'
 		let file.dir = 1
-		for subfile in split(globpath(a:filename, '\(.[^.]*\|*\)'), '\n')
+		for subfile in magit#utils#ls_all(a:filename)
 			call self.add_file(a:mode, a:status, subfile, a:depth + 1)
 		endfor
 	elseif ( a:status == '?' && getfsize(a:filename) == 0 )
diff --git a/autoload/magit/utils.vim b/autoload/magit/utils.vim
index b9e4cde55a73646534d76c1c714199ef113b874b..a8ec6ef98c193a39b65a8dd00fa09139b5953066 100644
--- a/autoload/magit/utils.vim
+++ b/autoload/magit/utils.vim
@@ -40,6 +40,13 @@ function! magit#utils#is_binary(filename)
 				\ a:filename . ".*charset=binary") != -1 )
 endfunction
 
+" magit#utils#ls_all: list all files (including hidden ones) in a given path
+" return : list of filenames
+function! magit#utils#ls_all(path)
+	return split(globpath(a:path, '.[^.]*', 1) . "\n" .
+				\ globpath(a:path, '*', 1), '\n')
+endfunction
+
 let s:submodule_list = []
 " magit#utils#refresh_submodule_list: this function refresh the List s:submodule_list
 " magit#utils#is_submodule() is using s:submodule_list