diff --git a/autoload/magit/git.vim b/autoload/magit/git.vim
index 27cd507af42279165205a6dc77f025c1360d633e..b8055b697fe2a0552ff149c0b22e27ee3860a182 100644
--- a/autoload/magit/git.vim
+++ b/autoload/magit/git.vim
@@ -271,10 +271,12 @@ function! magit#git#git_unapply(header, selection, mode)
 	endtry
 endfunction
 
-" magit#git#submodule_status: helper function to return the submodule status
-" return submodule status
-function! magit#git#submodule_status()
-	return magit#sys#system(g:magit_git_cmd . " submodule status")
+" magit#git#submodule_list: helper function to return the submodule list
+" return array of submodule names
+function! magit#git#submodule_list()
+	return map(split(magit#sys#system(
+				\ g:magit_git_cmd . " ls-files --stage | \grep 160000 || true"),
+				\ "\n"), 'split(v:val)[3]')
 endfunction
 
 " magit#git#get_branch_name: get the branch name given a reference
diff --git a/autoload/magit/utils.vim b/autoload/magit/utils.vim
index 223d7dae6cd532f92d56e025cf24b7b5bbd5b0e9..237a5fc265ccacffbba44c28e546cd0a8e50306d 100644
--- a/autoload/magit/utils.vim
+++ b/autoload/magit/utils.vim
@@ -10,7 +10,7 @@ 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
 function! magit#utils#refresh_submodule_list()
-	let s:submodule_list = map(split(magit#git#submodule_status(), "\n"), 'split(v:val)[1]')
+	let s:submodule_list = magit#git#submodule_list()
 endfunction
 
 " magit#utils#is_submodule search if dirname is in s:submodule_list