diff --git a/builtin/gamemgr.lua b/builtin/gamemgr.lua
index cb3e8d442a01a726b6eb8f017f3f98a430e1a18a..8409bff0335ced4e9f03a668b623d7c29918c96e 100644
--- a/builtin/gamemgr.lua
+++ b/builtin/gamemgr.lua
@@ -155,22 +155,35 @@ function gamemgr.delete_mod(gamespec,modindex)
 end
 
 --------------------------------------------------------------------------------
-function gamemgr.get_game_mods(gamespec)
+function gamemgr.find_by_gameid(gameid)
+	for i=1,#gamemgr.games,1 do		
+		if gamemgr.games[i].id == gameid then
+			return gamemgr.games[i], i
+		end
+	end
+	return nil, nil
+end
 
-	local retval = ""
-	
-	if gamespec.gamemods_path ~= nil and
+--------------------------------------------------------------------------------
+function gamemgr.get_game_mods(gamespec, retval)
+	if gamespec ~= nil and
+		gamespec.gamemods_path ~= nil and
 		gamespec.gamemods_path ~= "" then
-		local game_mods = {}
-		get_mods(gamespec.gamemods_path,game_mods)
-		
-		for i=1,#game_mods,1 do
-			if retval ~= "" then
-				retval = retval..","
-			end
-			retval = retval .. game_mods[i].name
-		end 
+		get_mods(gamespec.gamemods_path, retval)
 	end
+end
+
+--------------------------------------------------------------------------------
+function gamemgr.get_game_modlist(gamespec)
+	local retval = ""
+	local game_mods = {}
+	gamemgr.get_game_mods(gamespec, game_mods)
+	for i=1,#game_mods,1 do
+		if retval ~= "" then
+			retval = retval..","
+		end
+		retval = retval .. game_mods[i].name
+	end 
 	return retval
 end
 
@@ -220,7 +233,7 @@ function gamemgr.tab()
 			"label[6,1.4;" .. fgettext("Mods:") .."]" ..
 			"button[9.7,1.5;2,0.2;btn_game_mgr_edit_game;" .. fgettext("edit game") .. "]" ..
 			"textlist[6,2;5.5,3.3;game_mgr_modlist;"
-			.. gamemgr.get_game_mods(current_game) ..";0]" ..
+			.. gamemgr.get_game_modlist(current_game) ..";0]" ..
 			"button[1,4.75;3.2,0.5;btn_game_mgr_new_game;" .. fgettext("new game") .. "]"
 	end
 	return retval
@@ -243,7 +256,7 @@ function gamemgr.dialog_edit_game()
 		
 		retval = retval .. 
 			"textlist[0.5,0.5;4.5,4.3;mods_current;"
-			.. gamemgr.get_game_mods(current_game) ..";0]"
+			.. gamemgr.get_game_modlist(current_game) ..";0]"
 			
 			
 		retval = retval .. 
diff --git a/builtin/mainmenu.lua b/builtin/mainmenu.lua
index 6772224773efd1bfbff1fd7e9345dadae86daa82..490f9ae4e1af968fcaff58f071cf192ce1511f76 100644
--- a/builtin/mainmenu.lua
+++ b/builtin/mainmenu.lua
@@ -237,13 +237,11 @@ function menu.update_last_game()
 	if current_world == nil then
 		return
 	end
-		
-	for i=1,#gamemgr.games,1 do		
-		if gamemgr.games[i].id == current_world.gameid then
-			menu.last_game = i
-			engine.setting_set("main_menu_last_game_idx",menu.last_game)
-			break
-		end
+	
+	local gamespec, i = gamemgr.find_by_gameid(current_world.gameid)
+	if i ~= nil then
+		menu.last_game = i
+		engine.setting_set("main_menu_last_game_idx",menu.last_game)
 	end
 end
 
diff --git a/builtin/modmgr.lua b/builtin/modmgr.lua
index 81ac94c0ea2fed5d7cb8c173b135351f4dc80bf0..9f5f68a48df4a3a7fb26a9a94f9f5faa19f1168e 100644
--- a/builtin/modmgr.lua
+++ b/builtin/modmgr.lua
@@ -529,9 +529,8 @@ function modmgr.get_worldconfig(worldpath)
 	end
 	
 	--read gamemods
-	local gamemodpath = engine.get_gamepath() .. DIR_DELIM .. worldconfig.id .. DIR_DELIM .. "mods"
-	
-	get_mods(gamemodpath,worldconfig.game_mods)
+	local gamespec = gamemgr.find_by_gameid(worldconfig.id)
+	gamemgr.get_game_mods(gamespec, worldconfig.game_mods)
 
 	return worldconfig
 end
@@ -871,12 +870,8 @@ function modmgr.preparemodlist(data)
 	end
 	
 	--read game mods
-	if data.gameid ~= nil and
-		data.gameid ~= "" then
-		local gamemodpath = engine.get_gamepath() .. DIR_DELIM .. data.gameid .. DIR_DELIM .. "mods"
-		
-		get_mods(gamemodpath,game_mods)
-	end
+	local gamespec = gamemgr.find_by_gameid(data.gameid)
+	gamemgr.get_game_mods(gamespec, game_mods)
 	
 	for i=1,#game_mods,1 do
 		game_mods[i].typ = "game_mod"