diff --git a/apps/enclave/Makefile b/apps/enclave/Makefile
index 3805927028bfd06880d52080560faa6e98c5924b..c3e5b5527bebb650e4ee2415e7e200ae9754e0ca 100644
--- a/apps/enclave/Makefile
+++ b/apps/enclave/Makefile
@@ -34,7 +34,7 @@ CFLAGS = -g -march=i486 -pipe -Wall
 
 CFLAGS += -I$(SAMINCDIR) -I$(TOMCRYPTDIR)
 LDFLAGS = -L$(SAMLIBDIR) -L$(TOMCRYPTDIR)
-LIBS = -lsam -ltomcrypt
+LIBS = -lsam -ltomcrypt -lpthread
 
 #
 # Object files
@@ -45,6 +45,7 @@ OBJS =	$(OBJDIR)/bigint.o \
 		$(OBJDIR)/config.o \
 		$(OBJDIR)/logger.o \
 		$(OBJDIR)/main.o \
+		$(OBJDIR)/mutex.o \
 		$(OBJDIR)/peers.o \
 		$(OBJDIR)/random.o \
 		$(OBJDIR)/rpc.o \
diff --git a/apps/enclave/src/logger.cpp b/apps/enclave/src/logger.cpp
index 1458459950c0a8b50054222a5d610ed092e7981d..a0491f18c6b86fdd141af4f66f6414d4e2ab8e32 100644
--- a/apps/enclave/src/logger.cpp
+++ b/apps/enclave/src/logger.cpp
@@ -42,3 +42,20 @@ Logger::Logger(const string& file)
 		throw runtime_error("Error opening log file");
 	}
 }
+
+#ifdef WIN_STRERROR
+/*
+ * strerror() for primitive operating systems
+ */
+TCHAR* win_strerror(TCHAR* str, size_t size)
+{ 
+	LPVOID lpMsgBuf;
+	DWORD dw = GetLastError();
+	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+		NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf,
+		0, NULL);
+	snprintf(str, size, "%s", lpMsgBuf);
+	LocalFree(lpMsgBuf);
+	return str;
+}
+#endif
diff --git a/apps/enclave/src/logger.hpp b/apps/enclave/src/logger.hpp
index 75a5c289222dc965fd4b776d89588eee572ab89e..9ed809241f698a808ddec57f2ebfdd5b21e631f3 100644
--- a/apps/enclave/src/logger.hpp
+++ b/apps/enclave/src/logger.hpp
@@ -81,4 +81,8 @@ class Logger {
 		ofstream logf;
 };
 
+#ifdef WIN_STRERROR
+TCHAR* win_strerror(TCHAR* str, size_t size);
+#endif
+
 #endif  // LOGGER_HPP
diff --git a/apps/enclave/src/platform.hpp b/apps/enclave/src/platform.hpp
index bfdf40ae591a9751d05838f88fd8e89a9fca11ce..d4a8a201ae687ff4876036f1b505ca946154f57f 100644
--- a/apps/enclave/src/platform.hpp
+++ b/apps/enclave/src/platform.hpp
@@ -39,6 +39,11 @@
 #define LINUX   2  // Linux
 #define CYGWIN  3  // Cygwin
 
+#if OS == MINGW
+	#define WIN_STRERROR
+	#define WINTHREADS
+#endif
+
 /*
  * System includes
  */
@@ -49,6 +54,11 @@
 #include <iostream>
 #include <list>
 #include <map>
+#ifdef WINTHREADS
+	#include <windows.h>
+#else
+	#include <pthread.h>
+#endif
 #include <stdexcept>
 #include <stdint.h>
 #include <string>