diff --git a/src/subgame.cpp b/src/subgame.cpp
index d7668b0e5ab2d5abbc070c0dbb8f35617d8670bd..9a8ebe69f2de1c1389bd0bab65b79b6e7feb2d5e 100644
--- a/src/subgame.cpp
+++ b/src/subgame.cpp
@@ -23,6 +23,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "settings.h"
 #include "log.h"
 
+std::string getGameName(const std::string &game_path)
+{
+	std::string conf_path = game_path + DIR_DELIM + "game.conf";
+	Settings conf;
+	bool succeeded = conf.readConfigFile(conf_path.c_str());
+	if(!succeeded)
+		return "";
+	if(!conf.exists("name"))
+		return "";
+	return conf.get("name");
+}
+
 SubgameSpec findSubgame(const std::string &id)
 {
 	if(id == "")
@@ -46,7 +58,9 @@ SubgameSpec findSubgame(const std::string &id)
 	if(user != share || user_game)
 		mods_paths.insert(user + DIR_DELIM + "mods" + DIR_DELIM + id);
 	// TODO: Read proper name from game_path/game.conf
-	std::string game_name = id;
+	std::string game_name = getGameName(game_path);
+	if(game_name == "")
+		game_name = id;
 	return SubgameSpec(id, game_path, mods_paths, game_name);
 }