diff --git a/src/build/Common.gmake b/src/build/Common.gmake
index 81802cf1011c11131c18cbf94cb36ea75599a6aa..e817d9ec00a561150b6581da49e29d9900508895 100644
--- a/src/build/Common.gmake
+++ b/src/build/Common.gmake
@@ -53,6 +53,7 @@
 #																			#
 # Common Build Macros Defined:												#
 #  DELETE			- Delete files (Preferrably verbose)					#
+#  MTOBJODIR		- Object output dir										#
 #  OBJODIR			- Object output dir										#
 #  LIBODIR			- Library output dir									#
 #  EXEODIR			- Executable output dir									#
@@ -164,7 +165,8 @@ else
 endif
 
 LIBODIR :=	$(CCPRE).$(machine).lib.$(BUILDPATH)
-OBJODIR :=	$(CCPRE).$(machine).obj.$(BUILDPATH)$(OBJPATH_SUFFIX)
+OBJODIR :=	$(CCPRE).$(machine).obj.$(BUILDPATH)
+MTOBJODIR :=	$(CCPRE).$(machine).obj.$(BUILDPATH)-mt
 EXEODIR :=	$(CCPRE).$(machine).exe.$(BUILDPATH)
 LDFLAGS	+=	-L$(LIBODIR)
 
@@ -212,6 +214,51 @@ ifeq ($(os),darwin)
  LDFLAGS +=  -lm
 endif
 
+# PThread-specific flags
+ifeq ($(os),linux)    # Linux
+ ifndef THREADS_ACTUALLY_WORK
+  PTHREAD_CFLAGS    += -D_THREAD_SUID_BROKEN
+ endif
+endif
+PTHREAD_CFLAGS    += -D_THREAD_SAFE -D_REENTRANT
+ifeq ($(os),freebsd)    # FreeBSD
+ PTHREAD_CFLAGS    += -DUSE_XP_SEMAPHORES
+ PTHREAD_LDFLAGS    +=    -pthread
+ XP_SEM    :=    1
+else
+ ifeq ($(os),openbsd)    # OpenBSD
+  PTHREAD_CFLAGS    += -DUSE_XP_SEMAPHORES
+  PTHREAD_LDFLAGS    +=    -pthread
+  XP_SEM    :=    1
+ else
+  ifeq ($(os),netbsd)    # NetBSD
+   PTHREAD_CFLAGS    += -D__unix__ -DUSE_XP_SEMAPHORES
+   PTHREAD_LDFLAGS    +=    -L/usr/pkg/lib -L/usr/pkg/pthreads/lib -lpthread
+   XP_SEM    :=    1
+  else
+   ifeq ($(os),qnx)    # QNX
+   else
+    ifeq ($(os),darwin)    # Darwin/Mac OS X
+     PTHREAD_CFLAGS    += -D__unix__ -DUSE_XP_SEMAPHORES -D__DARWIN__
+     PTHREAD_LDFLAGS    += -lpthread
+     XP_SEM    := 1
+    else
+     ifeq ($(os),sunos)  # Solaris
+      XP_SEM :=    1
+      PTHREAD_CFLAGS    +=    -D_POSIX_PTHREAD_SEMANTICS
+      PTHREAD_CFLAGS    += -DUSE_XP_SEMAPHORES
+      PTHREAD_LDFLAGS    +=    -lpthread
+     else            # Linux / Other UNIX
+      XP_SEM :=    1
+      PTHREAD_CFLAGS    += -DUSE_XP_SEMAPHORES
+      PTHREAD_LDFLAGS    +=    -lpthread
+     endif
+    endif
+   endif
+  endif
+ endif
+endif
+
 # Paths
 XPDEV_SRC	:=	$(SRC_ROOT)$(DIRSEP)xpdev
 CIOLIB_SRC	:=	$(SRC_ROOT)$(DIRSEP)conio
@@ -245,17 +292,30 @@ $(OBJODIR)/%.o : %.cpp $(BUILD_DEPENDS)
 	@echo $(COMPILE_MSG) $<
 	$(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) -o $@ -c $<
 
+# Implicit MT C Compile Rule
+$(MTOBJODIR)/%.o : %.c $(BUILD_DEPENDS)
+	@echo $(COMPILE_MSG) $<
+	$(QUIET)$(CC) $(CFLAGS) $(CCFLAGS) $(PTHREAD_CFLAGS) -o $@ -c $<
+
+# Implicit MT C++ Compile Rule
+$(MTOBJODIR)/%.o : %.cpp $(BUILD_DEPENDS)
+	@echo $(COMPILE_MSG) $<
+	$(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) $(PTHREAD_CFLAGS) -o $@ -c $<
+
 depend:
 	$(QUIET)$(DELETE) $(OBJODIR)/.depend
+	$(QUIET)$(DELETE) $(MTOBJODIR)/.depend
 	$(QUIET)$(DELETE) $(LIBODIR)/.depend
 	$(QUIET)$(DELETE) $(EXEODIR)/.depend
 	$(QUIET)$(MAKE) BUILD_DEPENDS=FORCE
 
 FORCE:
 
+-include $(MTOBJODIR)/.depend
 -include $(OBJODIR)/.depend
 -include $(LIBODIR)/.depend
 -include $(EXEODIR)/.depend
+-include $(MTOBJODIR)/*.d
 -include $(OBJODIR)/*.d
 -include $(LIBODIR)/*.d
 -include $(EXEODIR)/*.d
diff --git a/src/build/rules.mk b/src/build/rules.mk
index 969b14903081e3edfebba163b50dc9b0ed0aa72b..4b2092173f8721f53f5325e9ec4bd805d4f6071c 100644
--- a/src/build/rules.mk
+++ b/src/build/rules.mk
@@ -7,6 +7,9 @@
 $(OBJODIR):
 	$(QUIET)$(IFNOTEXIST) mkdir $(OBJODIR)
 
+$(MTOBJODIR):
+	$(QUIET)$(IFNOTEXIST) mkdir $(MTOBJODIR)
+
 $(LIBODIR):
 	$(QUIET)$(IFNOTEXIST) mkdir $(LIBODIR)
 
@@ -16,6 +19,8 @@ $(EXEODIR):
 clean:
 	@echo Deleting $(OBJODIR)$(DIRSEP)
 	$(QUIET)$(DELETE) $(OBJODIR)$(DIRSEP)*
+	@echo Deleting $(MTOBJODIR)$(DIRSEP)
+	$(QUIET)$(DELETE) $(MTOBJODIR)$(DIRSEP)*
 	@echo Deleting $(LIBODIR)$(DIRSEP)
 	$(QUIET)$(DELETE) $(LIBODIR)$(DIRSEP)*
 	@echo Deleting $(EXEODIR)$(DIRSEP)