Index: plugins/vfspk3/Doom3FileSystem.cpp
===================================================================
--- plugins/vfspk3/Doom3FileSystem.cpp	(revision 6981)
+++ plugins/vfspk3/Doom3FileSystem.cpp	(working copy)
@@ -132,6 +132,12 @@
 	std::string extensions = GlobalGameManager().currentGame()->getKeyValue("archivetypes");
 	boost::algorithm::split(_allowedExtensions, extensions, boost::algorithm::is_any_of(" "));
 
+	// Build list of dir extensions, e.g. pk4 -> pk4dir
+	for (std::set<std::string>::iterator i = _allowedExtensions.begin(); i != _allowedExtensions.end(); ++i) {
+		std::string extDir = *i + "dir";
+		_allowedExtensionsDir.insert(extDir);
+	}
+
 	// Get the VFS search paths from the game manager
 	const game::IGameManager::PathList& paths =
 		GlobalGameManager().getVFSSearchPaths();
@@ -287,8 +293,8 @@
 	std::string fileExt(os::getExtension(filename));
 	boost::to_lower(fileExt);
 
-	// matching extension?
 	if (_allowedExtensions.find(fileExt) != _allowedExtensions.end()) {
+		// Matched extension for archive (e.g. "pk3", "pk4")
 		ArchiveDescriptor entry;
 
 		entry.name = filename;
@@ -298,6 +304,18 @@
 
 		globalOutputStream() << "[vfs] pak file: " << filename << std::endl;
 	}
+	else if (_allowedExtensionsDir.find(fileExt) != _allowedExtensionsDir.end()) {
+		// Matched extension for archive dir (e.g. "pk3dir", "pk4dir")
+		ArchiveDescriptor entry;
+
+		std::string path = os::standardPathWithSlash(filename);
+		entry.name = path;
+		entry.archive = DirectoryArchivePtr(new DirectoryArchive(path));
+		entry.is_pakfile = false;
+		_archives.push_back(entry);
+
+		globalOutputStream() << "[vfs] pak dir:  " << path << std::endl;
+	}
 }
 
 // RegisterableModule implementation
Index: plugins/vfspk3/Doom3FileSystem.h
===================================================================
--- plugins/vfspk3/Doom3FileSystem.h	(revision 6981)
+++ plugins/vfspk3/Doom3FileSystem.h	(working copy)
@@ -43,6 +43,7 @@
 	std::string _directories[VFS_MAXDIRS];
 	int _numDirectories;
 	std::set<std::string> _allowedExtensions;
+	std::set<std::string> _allowedExtensionsDir;
 
 	struct ArchiveDescriptor {
 		std::string name;
