Index: radiant/settings/GameManager.cpp
===================================================================
--- radiant/settings/GameManager.cpp	(revision 6981)
+++ radiant/settings/GameManager.cpp	(working copy)
@@ -339,6 +339,18 @@
     );
 }
 
+void Manager::addVFSSearchPath(const std::string &path)
+{
+	// If this path is searched earlier then the file would be found the first time.
+	for (PathList::iterator i = _vfsSearchPaths.begin();
+		i != _vfsSearchPaths.end(); ++i) {
+		if (*i == path) {
+			return;
+		}
+	}
+	_vfsSearchPaths.push_back(path);
+}
+
 bool Manager::settingsValid() const
 {
 	if (os::fileOrDirExists(_enginePath)) {
@@ -436,23 +448,23 @@
 		{
 			if (!_fsGame.empty()) {
 				// We have a MOD, register this directory first
-				_vfsSearchPaths.push_back(_modPath);
+				addVFSSearchPath(_modPath);
 
 #if defined(POSIX)
 				// On Linux, the above was in ~/.doom3/, search the engine mod path as well
 				std::string baseModPath = os::standardPathWithSlash(_enginePath + _fsGame);
-				_vfsSearchPaths.push_back(baseModPath);
+				addVFSSearchPath(baseModPath);
 #endif
 			}
 
 			if (!_fsGameBase.empty()) {
 				// We have a MOD base, register this directory as second
-				_vfsSearchPaths.push_back(_modBasePath);
+				addVFSSearchPath(_modBasePath);
 
 #if defined(POSIX)
 				// On Linux, the above was in ~/.doom3/, search the engine mod path as well
 				std::string baseModPath = os::standardPathWithSlash(_enginePath + _fsGameBase);
-				_vfsSearchPaths.push_back(baseModPath);
+				addVFSSearchPath(baseModPath);
 #endif
 			}
 
@@ -462,20 +474,15 @@
 				getUserEnginePath() + // ~/.doom3
 				currentGame()->getKeyValue("basegame") // base
 			);
-			_vfsSearchPaths.push_back(userBasePath);
+			addVFSSearchPath(userBasePath);
 
 			// Register the base game folder (/usr/local/games/doom3/<basegame>) last
 			// This will always be searched, but *after* the other paths
 			std::string baseGame = os::standardPathWithSlash(
 				_enginePath + currentGame()->getKeyValue("basegame")
 			);
+			addVFSSearchPath(baseGame);
 
-			// greebo: Avoid double-registering the same path (in Windows)
-			if (baseGame != userBasePath)
-			{
-				_vfsSearchPaths.push_back(baseGame);
-			}
-
 			// Update map and prefab paths
 			setMapAndPrefabPaths(userBasePath);
 
Index: radiant/settings/GameManager.h
===================================================================
--- radiant/settings/GameManager.h	(revision 6981)
+++ radiant/settings/GameManager.h	(working copy)
@@ -73,6 +73,11 @@
 	 */
 	void constructPaths();
 
+	/** DerSaidin: Adds a path to the VFS search list, skipping any duplicates.
+	 * 			Note that the order of search paths must be preserved.
+	 */
+	void addVFSSearchPath(const std::string &path);
+
 	/** greebo: Adds the EnginePath and fs_game widgets to the Preference dialog
 	 */
 	void constructPreferences();
