Index: src/skulltag/CMakeLists.txt
===================================================================
--- src/skulltag/CMakeLists.txt	(revision 344)
+++ src/skulltag/CMakeLists.txt	(working copy)
@@ -30,7 +30,7 @@
 include_directories(${QT_INCLUDES})
 qt_wrap_cpp(skulltagQt SKULLTAG_FILES ${SKULLTAG_QT_FILES})
 
-add_library(skulltag SHARED ${skulltagUi} ${SKULLTAG_FILES})
+add_library(skulltag MODULE ${skulltagUi} ${SKULLTAG_FILES})
 add_dependencies(skulltag doomseeker)
 target_link_libraries(skulltag ${QT_LIBRARIES} ${QT_QTNETWORK_LIBRARIES} doomseeker)
 
Index: src/skulltag/skulltagserver.cpp
===================================================================
--- src/skulltag/skulltagserver.cpp	(revision 344)
+++ src/skulltag/skulltagserver.cpp	(working copy)
@@ -260,7 +260,7 @@
 
 		QFileInfo fi(setting->string());
 
-		if (!fi.exists() || fi.isDir())
+		if (!fi.exists() || (fi.isDir() && !fi.isBundle()))
 		{
 			error = tr("%1\nis a directory or doesn't exist.").arg(setting->string());
 			return QString();
@@ -329,7 +329,7 @@
 
 		QString binPath = path + '/' + ST_BINARY_NAME;
 		fi = QFileInfo(binPath);
-		if (!fi.exists() || fi.isDir())
+		if (!fi.exists() || (fi.isDir() && !fi.isBundle()))
 		{
 			error = tr("%1\ndoesn't contain Skulltag executable").arg(path);
 			return QString();
Index: src/server.cpp
===================================================================
--- src/server.cpp	(revision 344)
+++ src/server.cpp	(working copy)
@@ -746,7 +746,19 @@
 
 	if (!bWrapInStandardServerConsole)
 	{
-		if( !QProcess::startDetached(cli.executable.canonicalFilePath(), args, cli.applicationDir.canonicalPath()) )
+		int result;
+
+		#ifdef Q_WS_MAC
+		if( cli.executable.isBundle() )
+		{
+			result = QProcess::startDetached("open", QStringList() << cli.executable.canonicalFilePath() << "--args" << args, cli.applicationDir.canonicalPath());
+		}
+		else
+		#endif
+		{
+			result = QProcess::startDetached(cli.executable.canonicalFilePath(), args, cli.applicationDir.canonicalPath());
+		}
+		if(!result)
 		{
 			error = tr("File: %1\ncannot be run").arg(cli.executable.canonicalFilePath());
 			pLog << error;
Index: src/chocolate-doom/chocolatedoommain.cpp
===================================================================
--- src/chocolate-doom/chocolatedoommain.cpp	(revision 344)
+++ src/chocolate-doom/chocolatedoommain.cpp	(working copy)
@@ -49,7 +49,7 @@
 	false,								// Has Master Server
 };
 
-class PLUGIN_EXPORT OdamexEnginePlugin : public EnginePlugin
+class PLUGIN_EXPORT ChocolateDoomEnginePlugin : public EnginePlugin
 {
 	public:
 		QString					binaryClient() const
@@ -93,7 +93,7 @@
 		}
 };
 
-static OdamexEnginePlugin chocolatedoom_engine_plugin;
+static ChocolateDoomEnginePlugin chocolatedoom_engine_plugin;
 static const PluginInfo chocolatedoom_info = {"Chocolate Doom", "Chocolate Doom server query plugin.", "The Skulltag Team", {0,1,0,0}, MAKEID('E','N','G','N'), &chocolatedoom_engine_plugin};
 extern "C" PLUGIN_EXPORT const PluginInfo *doomSeekerInit()
 {
Index: src/chocolate-doom/chocolatedoomserver.cpp
===================================================================
--- src/chocolate-doom/chocolatedoomserver.cpp	(revision 344)
+++ src/chocolate-doom/chocolatedoomserver.cpp	(working copy)
@@ -50,7 +50,7 @@
 
 	QFileInfo fi(setting->string());
 
-	if (!fi.exists() || fi.isDir())
+	if (!fi.exists() || (fi.isDir() && !fi.isBundle()))
 	{
 		error = tr("%1\n is a directory or doesn't exist.").arg(setting->string());
 		return QString();
Index: src/chocolate-doom/CMakeLists.txt
===================================================================
--- src/chocolate-doom/CMakeLists.txt	(revision 344)
+++ src/chocolate-doom/CMakeLists.txt	(working copy)
@@ -24,7 +24,7 @@
 include_directories(${QT_INCLUDES})
 qt_wrap_cpp(chocolateDoomQt CHOCOLATEDOOM_FILES ${CHOCOLATEDOOM_QT_FILES})
 
-add_library(chocolatedoom SHARED ${chocolateDoomUi} ${CHOCOLATEDOOM_FILES})
+add_library(chocolatedoom MODULE ${chocolateDoomUi} ${CHOCOLATEDOOM_FILES})
 add_dependencies(chocolatedoom doomseeker)
 target_link_libraries(chocolatedoom ${QT_LIBRARIES} ${QT_QTNETWORK_LIBRARIES} doomseeker)
 
Index: src/odamex/odamexserver.cpp
===================================================================
--- src/odamex/odamexserver.cpp	(revision 344)
+++ src/odamex/odamexserver.cpp	(working copy)
@@ -82,7 +82,7 @@
 
 	QFileInfo fi(setting->string());
 
-	if (!fi.exists() || fi.isDir())
+	if (!fi.exists() || (fi.isDir() && !fi.isBundle()))
 	{
 		error = tr("%1\n is a directory or doesn't exist.").arg(setting->string());
 		return QString();
@@ -299,7 +299,7 @@
 
 	QFileInfo fi(setting->string());
 
-	if (!fi.exists() || fi.isDir())
+	if (!fi.exists() || (fi.isDir() && !fi.isBundle()))
 	{
 		error = tr("%1\nis a directory or doesn't exist.").arg(setting->string());
 		return QString();
Index: src/odamex/CMakeLists.txt
===================================================================
--- src/odamex/CMakeLists.txt	(revision 344)
+++ src/odamex/CMakeLists.txt	(working copy)
@@ -26,7 +26,7 @@
 include_directories(${QT_INCLUDES})
 qt_wrap_cpp(odamexQt ODAMEX_FILES ${ODAMEX_QT_FILES})
 
-add_library(odamex SHARED ${odamexUi} ${ODAMEX_FILES})
+add_library(odamex MODULE ${odamexUi} ${ODAMEX_FILES})
 add_dependencies(odamex doomseeker)
 target_link_libraries(odamex ${QT_LIBRARIES} ${QT_QTNETWORK_LIBRARIES} doomseeker)
 
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revision 344)
+++ CMakeLists.txt	(working copy)
@@ -3,6 +3,42 @@
 
 set(OUTPUT_DIR ${CMAKE_BINARY_DIR} CACHE PATH "Directory in which to build the binary.")
 
+IF(APPLE)
+	# You can set which arch you want by enabling one of these boolean option.
+	# EXAMPLE: "cmake -DMAC_ARCH_UNIVERSAL:BOOL=ON"
+	# Default is x86
+	OPTION(MAC_ARCH_UNIVERSAL
+		"Produce a universal binary for Mac."
+		OFF)
+	OPTION(MAC_ARCH_PPC
+		"Produce a PPC binary for Mac."
+		OFF)
+	OPTION(MAC_ARCH_I386
+		"Produce an x86 binary for Mac."
+		ON)
+
+	IF(MAC_ARCH_UNIVERSAL)
+		set(CMAKE_OSX_ARCHITECTURES ppc;i386)
+	ELSEIF(MAC_ARCH_PPC)
+		set(CMAKE_OSX_ARCHITECTURES ppc)
+	ELSEIF(MAC_ARCH_I386)
+		set(CMAKE_OSX_ARCHITECTURES i386)
+	ENDIF()
+
+	# The SDK option allows you to support older versions of OS X.
+	# The default configuration will build against the default system SDK which is likely 
+	# the SDK for your current OS version (10.5 (Leopard), 10.6 (Snow Leopard), etc.)
+	# To enable this option: "cmake -DMAC_SDK_10.4:BOOL=ON"
+	OPTION(MAC_SDK_10.4
+		"Build against the 10.4 \"Tiger\" SDK."
+		OFF)
+
+	IF(MAC_SDK_10.4)
+		set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk)
+		set(CMAKE_CXX_COMPILER g++-4.0)
+	ENDIF(MAC_SDK_10.4)
+ENDIF(APPLE)
+
 add_subdirectory(src/chocolate-doom)
 add_subdirectory(src/odamex)
 add_subdirectory(src/skulltag)
