diff --git a/main/source/cl_dll/vgui_TeamFortressViewport.h b/main/source/cl_dll/vgui_TeamFortressViewport.h
index 3ae9be5d..a9a9b324 100644
--- a/main/source/cl_dll/vgui_TeamFortressViewport.h
+++ b/main/source/cl_dll/vgui_TeamFortressViewport.h
@@ -35,7 +35,6 @@
 
 using namespace vgui;
 
-class Cursor;
 class ScorePanel;
 class SpectatorPanel;
 class CCommandMenu;
diff --git a/main/source/dlls/player.h b/main/source/dlls/player.h
index c1689439..5b6255f9 100644
--- a/main/source/dlls/player.h
+++ b/main/source/dlls/player.h
@@ -334,7 +334,7 @@ public:
 	void SetCustomDecalFrames( int nFrames );
 	int GetCustomDecalFrames( void );
 
-	void CBasePlayer::TabulateAmmo( void );
+	void TabulateAmmo( void );
 
 	float m_flStartCharge;
 	float m_flAmmoStartCharge;
diff --git a/main/source/dlls/teamplay_gamerules.cpp b/main/source/dlls/teamplay_gamerules.cpp
index 875523d9..957adae5 100644
--- a/main/source/dlls/teamplay_gamerules.cpp
+++ b/main/source/dlls/teamplay_gamerules.cpp
@@ -183,7 +183,7 @@ const char *CHalfLifeTeamplay::SetDefaultPlayerTeam( CBasePlayer *pPlayer )
 	// update the current player of the team he is joining
 	const char* theTeamName = pPlayer->TeamID();
 
-	if ( theTeamName == '\0' || !IsValidTeam( theTeamName ) || defaultteam.value )
+	if ( (int)(size_t)theTeamName == '\0' || !IsValidTeam( theTeamName ) || defaultteam.value )
 	{
 		const char *pTeamName = NULL;
 		
diff --git a/main/source/linux/Makefile b/main/source/linux/Makefile
index 807cd829..d778903d 100644
--- a/main/source/linux/Makefile
+++ b/main/source/linux/Makefile
@@ -60,10 +60,10 @@ ifeq ($(OS),Darwin)
 	ifeq ($(origin CC), default)
 		CC ="$(COMPILER_BIN_DIR)/clang -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
 	endif
-	ifeq ($(origin CXX), default)
+	ifeq ($(origin CPLUS), default)
 		CPLUS ="$(COMPILER_BIN_DIR)/clang++ -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
 	endif
-	LINK ?= $(CXX)
+	LINK ?= $(CPLUS)
 endif
 
 CLINK=$(CC)
@@ -88,8 +88,8 @@ endif
 
 ifeq ($(OS),Darwin)
 # force 387 for FP math so the precision between win32 and linux and osx match
-ARCH_CFLAGS_I486+=-march=pentium-m -mfpmath=387
-ARCH_CFLAGS_I686+=-march=pentium-m -mfpmath=387
+ARCH_CFLAGS_I486+=-target i386-apple-darwin16.7.0 -DCMAKE_OSX_ARCHITECTURES=i386
+ARCH_CFLAGS_I686+=-target i386-apple-darwin16.7.0 -DCMAKE_OSX_ARCHITECTURES=i386
 ARCH_CFLAGS_AMD+=-mfpmath=387
 endif
 
@@ -100,7 +100,7 @@ BASE_CFLAGS=-fpermissive -fno-strict-aliasing -DNDEBUG -DPOSIX -D_POSIX -DLINUX
 BASE_CFLAGS+=-w
 
 ifeq ($(OS),Darwin)
-	BASE_CFLAGS += -DOSX -D_OSX -fvisibility=hidden
+	BASE_CFLAGS += -DOSX -D_OSX -fvisibility=hidden -DCMAKE_OSX_ARCHITECTURES=i386
 else
 	BASE_CFLAGS+= -DLINUX -D_LINUX
 endif
@@ -109,7 +109,7 @@ DEDICATED_CFLAGS="-DDEDICATED -DSWDS"
 ifeq ($(OS),Darwin)
 SHLIBEXT=dylib
 SHLIBCFLAGS=
-SHLIBLDFLAGS="-shared -gdwarf-2 -g2"
+SHLIBLDFLAGS="-shared -gdwarf-2 -g2 -DCMAKE_OSX_ARCHITECTURES=i386 -target i386-apple-darwin16.7.0"
 else
 SHLIBEXT=so
 SHLIBCFLAGS=
diff --git a/main/source/linux/Makefile.hl_cdll b/main/source/linux/Makefile.hl_cdll
index bf1bc65b..fda7d948 100644
--- a/main/source/linux/Makefile.hl_cdll
+++ b/main/source/linux/Makefile.hl_cdll
@@ -30,7 +30,7 @@ CFLAGS=$(BASE_CFLAGS) $(ARCH_CFLAGS) -DCLIENT_DLL -I/usr/include/malloc -D_snwpr
 INCLUDEDIRS= -I$(HL_SRC_DIR) -I$(NS_MOD_SRC_DIR) -I$(COMMON_SRC_DIR) -I$(PUBLIC_SRC_DIR) -I$(PM_SHARED_SRC_DIR) -I../engine -I$(GAME_SHARED_SRC_DIR) -I../external/ -I../particles -I../includes/fmodapi375linux/api/inc -I$(HL_SERVER_SRC_DIR) -I$(HL_SRC_DIR)/cl_dll -I$(VGUI_INCLUDE_DIR) -I$(UI_INCLUDE_DIR) -I$(UTIL_SRC_DIR) -I../ -I../includes/fmodapi375linux/api -I../includes/lpng1251
 
 ifeq ($(OS),Darwin)
-LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -framework Carbon $(CFG)/vgui.dylib -L. -lSDL2-2.0.0
+LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -L. libpng12.dylib -lz -framework Carbon $(CFG)/vgui.dylib -L. -lSDL2-2.0.0 -L. libparticleMP.a
 else
 LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -lpng -lz -lfmod-3.75 -L$(CFG) vgui.so -L. libSDL2-2.0.so.0 -L. libparticleMP.a 
 endif
diff --git a/main/source/linux/libparticleMP.a b/main/source/linux/libparticleMP.a
index 39516034..66fe56fd 100644
Binary files a/main/source/linux/libparticleMP.a and b/main/source/linux/libparticleMP.a differ
diff --git a/main/source/linux/libparticles.dylib b/main/source/linux/libparticles.dylib
new file mode 100755
index 00000000..e1ad52ad
Binary files /dev/null and b/main/source/linux/libparticles.dylib differ
diff --git a/main/source/linux/libpng12.dylib b/main/source/linux/libpng12.dylib
new file mode 100755
index 00000000..96500be9
Binary files /dev/null and b/main/source/linux/libpng12.dylib differ
diff --git a/main/source/mod/AvHHud.cpp b/main/source/mod/AvHHud.cpp
index 42232699..5c37596b 100644
--- a/main/source/mod/AvHHud.cpp
+++ b/main/source/mod/AvHHud.cpp
@@ -5659,7 +5659,7 @@ string AvHHud::GetRankTitle(bool inShowUnspentLevels) const
 {
 	string theText;
 
-	char* theTeamName = this->GetIsMarine() ? "Marine" : "Alien";
+	char const* theTeamName = this->GetIsMarine() ? "Marine" : "Alien";
 	int theCurrentLevel = this->GetHUDExperienceLevel();
 
 	char theCharArray[512];
diff --git a/main/source/mod/CollisionChecker.cpp b/main/source/mod/CollisionChecker.cpp
index 72599647..f4fac1b9 100644
--- a/main/source/mod/CollisionChecker.cpp
+++ b/main/source/mod/CollisionChecker.cpp
@@ -454,7 +454,7 @@ void CollisionChecker::SetIgnoreEntityClass(int ignore_entity_class)
 
 int CollisionChecker::GetContentsAtPoint(const nspoint_t& point) const
 {
-	return GetContents(&PointCollisionTest(point));
+	return GetContents(new PointCollisionTest(point));
 }
 
 //-------------------------------------------------------------------
@@ -468,14 +468,14 @@ int CollisionChecker::GetWorldContentsAtPoint(const nspoint_t& point) const
 
 int CollisionChecker::GetAllEntityContentsAtPoint(const nspoint_t& point) const
 {
-	return GetAllEntityContents(&PointCollisionTest(point));
+	return GetAllEntityContents(new PointCollisionTest(point));
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetSingleEntityContentsAtPoint(const nspoint_t& point, int entity_index) const
 {
-	return GetSingleEntityContents(&PointCollisionTest(point),entity_index);
+	return GetSingleEntityContents(new PointCollisionTest(point),entity_index);
 }
 
 //-------------------------------------------------------------------
@@ -486,28 +486,28 @@ const static nspoint_t CYLINDER_UP_DEFAULT = {0,0,1.0f};
 
 int CollisionChecker::GetContentsInCylinder(const nspoint_t& base, float radius, float height) const
 {
-	return GetContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
+	return GetContents(new CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetWorldContentsInCylinder(const nspoint_t& base, float radius, float height) const
 {
-	return GetSingleEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),WORLD_ENTITY);
+	return GetSingleEntityContents(new CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),WORLD_ENTITY);
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetAllEntityContentsInCylinder(const nspoint_t& base, float radius, float height) const
 {
-	return GetAllEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
+	return GetAllEntityContents(new CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetSingleEntityContentsInCylinder(const nspoint_t& base, float radius, float height, int entity_index) const
 {
-	return GetSingleEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),entity_index);
+	return GetSingleEntityContents(new CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),entity_index);
 }
 
 //-------------------------------------------------------------------
@@ -516,28 +516,28 @@ int CollisionChecker::GetSingleEntityContentsInCylinder(const nspoint_t& base, f
 
 int CollisionChecker::GetContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
 {
-	return GetContents(&AABBCollisionTest(mins,maxs));
+	return GetContents(new AABBCollisionTest(mins,maxs));
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetWorldContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
 {
-	return GetSingleEntityContents(&AABBCollisionTest(mins,maxs),WORLD_ENTITY);
+	return GetSingleEntityContents(new AABBCollisionTest(mins,maxs),WORLD_ENTITY);
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetAllEntityContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
 {
-	return GetAllEntityContents(&AABBCollisionTest(mins,maxs));
+	return GetAllEntityContents(new AABBCollisionTest(mins,maxs));
 }
 
 //-------------------------------------------------------------------
 
 int CollisionChecker::GetSingleEntityContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs, int entity_index) const
 {
-	return GetSingleEntityContents(&AABBCollisionTest(mins,maxs),entity_index);
+	return GetSingleEntityContents(new AABBCollisionTest(mins,maxs),entity_index);
 }
 
 //-------------------------------------------------------------------
diff --git a/main/source/particles/opengl.cpp b/main/source/particles/opengl.cpp
index 2f48a566..7e3739e9 100644
--- a/main/source/particles/opengl.cpp
+++ b/main/source/particles/opengl.cpp
@@ -11,7 +11,7 @@
 #include <windows.h>
 #endif
 
-#include <GL/gl.h>
+#include <OpenGL/gl.h>
 // XXX #include <iostream.h>
 
 // Emit OpenGL calls to draw the particles. These are drawn with
diff --git a/main/source/ui/ScoreboardIcon.cpp b/main/source/ui/ScoreboardIcon.cpp
index 62640133..75d98123 100644
--- a/main/source/ui/ScoreboardIcon.cpp
+++ b/main/source/ui/ScoreboardIcon.cpp
@@ -133,7 +133,7 @@ void loadImages( const int icon_number, std::vector<vgui::BitmapTGA*>& images )
 	std::string extension = ".tga";
 	std::string icon_name;
 
-	unsigned char icon_bytes[2] = { (icon_number >> 8) & 0xFF, icon_number & 0xFF };
+	unsigned char icon_bytes[2] = { static_cast<unsigned char>((icon_number >> 8) & 0xFF), static_cast<unsigned char>(icon_number & 0xFF )};
 	MakeHexPairsFromBytes(icon_bytes,icon_name,2);
 	icon_name = "0x" + icon_name;
 
diff --git a/main/source/util/CString.h b/main/source/util/CString.h
index fcea4b1a..578c280f 100644
--- a/main/source/util/CString.h
+++ b/main/source/util/CString.h
@@ -34,12 +34,12 @@ public:
 
     void operator =(const string& inString)
     {
-        sprintf_s(this->mString, "%s", inString.c_str());
+        sprintf_s(this->mString, sizeof(this->mString), "%s", inString.c_str());
     }
 
     void operator =(const CString& inString)
     {
-        sprintf_s(this->mString, "%s", inString.mString);
+        sprintf_s(this->mString, sizeof(this->mString), "%s", inString.mString);
     }
 
     bool operator ==(const CString& inString) const