diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea1d2e98921475f8f89f598bb455c3992419f239..1df240df14768fffcb0a007629e87342333da29a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,10 @@ set(VegaFEM_VERSION 2.0)
 cmake_minimum_required(VERSION 2.8)
 if(COMMAND CMAKE_POLICY)
   cmake_policy(SET CMP0003 NEW)
+  if (POLICY CMP0022)
+    # Use INTERFACE_LINK_LIBRARIES when available.
+    cmake_policy(SET CMP0022 NEW)
+  endif()
   if (POLICY CMP0042)
     cmake_policy(SET CMP0042 NEW)
   endif()
@@ -27,8 +31,9 @@ include(CMakePackageConfigHelpers)
 include(VegaFEMMacros)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE OFF)
+option(VegaFEM_BUILD_UTILITIES "Build utility applications in addition to libraries." ON)
 option(VegaFEM_BUILD_MODEL_REDUCTION "Should model-reduction techniques be included?" ON)
-option(VegaFEM_ENABLE_ExpoKit_SUPPORT "Should matrix classes use ExpoKit for exponentiation?" OFF) 
+option(VegaFEM_ENABLE_ExpoKit_SUPPORT "Should matrix classes use ExpoKit for exponentiation?" OFF)
 # TODO: define USE_EXPOKIT if enabled
 option(VegaFEM_ENABLE_OpenGL_SUPPORT "Should modules that require OpenGL be enabled?" ON)
 option(VegaFEM_ENABLE_PTHREADS_SUPPORT "Use multithreading (pthread)" ON)
@@ -66,9 +71,6 @@ set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 # directories outside the build tree to the install RPATH
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 
-# build utilities
-option(BUILD_UTILITIES "Build utility applications." ON)
-
 # Set directory variables
 if(NOT BIN_DIR)
   set(BIN_DIR bin)
@@ -172,16 +174,18 @@ if(VegaFEM_ENABLE_PTHREADS_SUPPORT)
 endif()
 
 if (VegaFEM_BUILD_MODEL_REDUCTION)
-  find_package(MKL)
-  if(MKL_FOUND)
-    set(BLA_VENDOR "Intel mkl")
-    include_directories(${INTEL_MKL_INCLUDE_DIR})
-    # TODO: set option for the paradiso solvers and define PARDISO_SOLVER_IS_AVAILABLE
-  else()
-    find_package(LAPACKE REQUIRED) # Also searches for cblas
-    include_directories(${LAPACKE_INCLUDE_DIR})
-    include_directories(${CBLAS_INCLUDE_DIR})
-  endif() 
+  if (NOT APPLE)
+    find_package(MKL)
+    if(MKL_FOUND)
+      set(BLA_VENDOR "Intel mkl")
+      include_directories(${INTEL_MKL_INCLUDE_DIR})
+      # TODO: set option for the paradiso solvers and define PARDISO_SOLVER_IS_AVAILABLE
+    else()
+      find_package(LAPACKE REQUIRED) # Also searches for cblas
+      include_directories(${LAPACKE_INCLUDE_DIR})
+      include_directories(${CBLAS_INCLUDE_DIR})
+    endif()
+  endif()
   find_package(LAPACK) # Also searches for blas
 endif()
 
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5c78af4c423b1753ff189e6fc73a351eb492debf
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,42 @@
+branches:
+  only:
+    - AddWindowsAndLapackFixes
+
+clone_depth: 16
+
+cache:
+ - cmake-inst
+
+environment:
+  matrix:
+    #- GENERATOR: "Visual Studio 10 2010"
+    #  VS_VERSION: "10.0"
+    - GENERATOR: "Ninja"
+      VS_VERSION: "10.0"
+
+platform:
+ - x86
+
+configuration:
+ - Release
+
+install:
+ - ps: cinst ninja
+ - ps: cinst cmake
+
+build_script:
+ - cmd: set PATH=C:/ProgramData/chocolatey/bin;C:/tools/ninja;%PATH%
+ - cmd: call "C:/Program Files (x86)/Microsoft Visual Studio %VS_VERSION%/Common7/Tools/vsvars32.bat"
+   # Get a list of generators and the CMake version
+ - cmd: cmake --version
+ - cmd: cmake --help
+   # Create a build directory inside the source tree
+ - cmd: mkdir build
+ - cmd: cd build
+   # Run CMake on the source and build
+ - cmd: cmake .. -Wdev --warn-uninitialized -G "%GENERATOR%" -D"VegaFEM_BUILD_MODEL_REDUCTION:BOOL=OFF" -D"VegaFEM_ENABLE_PTHREADS_SUPPORT:BOOL=OFF" -D"VegaFEM_ENABLE_OpenGL_SUPPORT:BOOL=OFF" -D"VegaFEM_BUILD_UTILITIES:BOOL=ON"
+ - cmd: cmake --build .
+
+test_script:
+# - cmd: ctest -C Debug --output-on-failure
+ - cmd: cd ..
diff --git a/src/libintegratorDense/centralDifferencesDense.cpp b/src/libintegratorDense/centralDifferencesDense.cpp
index 9a6392c1a697dee359782dd4e4e180f37960ae2b..15404b1e2e9803be4798143f62eb36fd545e1623 100644
--- a/src/libintegratorDense/centralDifferencesDense.cpp
+++ b/src/libintegratorDense/centralDifferencesDense.cpp
@@ -38,8 +38,8 @@
 #include "IPIVC.h"
 
 #ifdef __APPLE__
-//   #define DGETRF dgetrf_
-//   #define DGETRS dgetrs_
+   #define DGETRF dgetrf_
+   #define DGETRS dgetrs_
 #else
 //   #define DGETRF dgetrf
 //   #define DGETRS dgetrs
diff --git a/src/libintegratorDense/implicitBackwardEulerDense.cpp b/src/libintegratorDense/implicitBackwardEulerDense.cpp
index 073ed77efcb24005643c7635dc249d089c9aae21..951a166c688ea374152411633f8e1b0051318b81 100644
--- a/src/libintegratorDense/implicitBackwardEulerDense.cpp
+++ b/src/libintegratorDense/implicitBackwardEulerDense.cpp
@@ -251,11 +251,9 @@ int ImplicitBackwardEulerDense::DoTimestep()
         INTEGER LDB = r;
         INTEGER INFO;
 
-//         #ifdef __APPLE__
-//           #define DGESV dgesv_
-//         #else
-//           #define DGESV dgesv
-//         #endif
+         #ifdef __APPLE__
+           #define DGESV dgesv_
+         #endif
 
         DGESV ( &N, &NRHS, A, &LDA, IPIV->GetBuf(), B, &LDB, &INFO );
 
@@ -270,12 +268,10 @@ int ImplicitBackwardEulerDense::DoTimestep()
       case symmetricMatrixSolver:
       {
         // call dsysv ( uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
-  
-//         #ifdef __APPLE__
-//           #define DSYSV dsysv_
-//         #else
-//           #define DSYSV dsysv
-//         #endif
+
+         #ifdef __APPLE__
+           #define DSYSV dsysv_
+         #endif
 
         char uplo = 'U';
         INTEGER nrhs = 1;
@@ -297,12 +293,10 @@ int ImplicitBackwardEulerDense::DoTimestep()
       {
         // call dposv ( uplo, n, nrhs, a, lda, b, ldb, info)
 
-//         #ifdef __APPLE__
-//           #define DPOSV dposv_
-//         #else
-//           #define DPOSV dposv
-//         #endif
-  
+         #ifdef __APPLE__
+           #define DPOSV dposv_
+         #endif
+
         char uplo = 'U';
         INTEGER nrhs = 1;
         INTEGER info = 0;
diff --git a/src/libintegratorDense/implicitNewmarkDense.cpp b/src/libintegratorDense/implicitNewmarkDense.cpp
index 8a294a4081df264500d2d6e7ea2f51371b1fd5d4..703e812f4bafbbb39f8d954c880aae5398ee8e9e 100644
--- a/src/libintegratorDense/implicitNewmarkDense.cpp
+++ b/src/libintegratorDense/implicitNewmarkDense.cpp
@@ -248,11 +248,9 @@ int ImplicitNewmarkDense::DoTimestep()
         INTEGER LDB = r;
         INTEGER INFO;
 
-//         #ifdef __APPLE__
-//           #define DGESV dgesv_
-//         #else
-//           #define DGESV dgesv
-//         #endif
+         #ifdef __APPLE__
+           #define DGESV dgesv_
+         #endif
 
         DGESV ( &N, &NRHS, A, &LDA, IPIV->GetBuf(), B, &LDB, &INFO );
 
@@ -268,11 +266,9 @@ int ImplicitNewmarkDense::DoTimestep()
       {
         // call dsysv ( uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
   
-//         #ifdef __APPLE__
-//           #define DSYSV dsysv_
-//         #else
-//           #define DSYSV dsysv
-//         #endif
+         #ifdef __APPLE__
+           #define DSYSV dsysv_
+         #endif
 
         char uplo = 'U';
         INTEGER nrhs = 1;
@@ -294,11 +290,9 @@ int ImplicitNewmarkDense::DoTimestep()
       {
         // call dposv ( uplo, n, nrhs, a, lda, b, ldb, info)
 
-//         #ifdef __APPLE__
-//           #define DPOSV dposv_
-//         #else
-//           #define DPOSV dposv
-//         #endif
+         #ifdef __APPLE__
+           #define DPOSV dposv_
+         #endif
   
         char uplo = 'U';
         INTEGER nrhs = 1;
diff --git a/src/libintegratorDense/integratorBaseDense.cpp b/src/libintegratorDense/integratorBaseDense.cpp
index 73e940778e3a1b89c0dffb51d9d5357a9a894203..7e472445af0f11d23cde67a262cb0fe58df8b828 100644
--- a/src/libintegratorDense/integratorBaseDense.cpp
+++ b/src/libintegratorDense/integratorBaseDense.cpp
@@ -139,11 +139,9 @@ int IntegratorBaseDense::SetState(double * q_, double * qvel_)
   // solve M * x = qaccel
   // call dposv ( uplo, n, nrhs, a, lda, b, ldb, info)
 
-//   #ifdef __APPLE__
-//     #define DPOSV dposv_  
-//   #else
-//     #define DPOSV dposv
-//   #endif
+   #ifdef __APPLE__
+     #define DPOSV dposv_  
+   #endif
 
   memcpy(tangentStiffnessMatrix, massMatrix, sizeof(double) * r2); // must copy mass matrix to another buffer since DPOSV overwrites the system matrix
   char uplo = 'U';
diff --git a/src/libmassSpringSystem/CMakeLists.txt b/src/libmassSpringSystem/CMakeLists.txt
index 92f80e6b4e328a14e0ad33b6642c42daf811c037..a1d5f35358d9abb1b1785075fd672cc5f227094b 100644
--- a/src/libmassSpringSystem/CMakeLists.txt
+++ b/src/libmassSpringSystem/CMakeLists.txt
@@ -3,7 +3,6 @@ set(massspringsystem_srcs
   massSpringSystemFromObjMesh.cpp
   massSpringSystemFromTetMeshConfigFile.cpp
   massSpringSystemFromTetMesh.cpp
-  massSpringSystemMT.cpp
   massSpringSystem.cpp
   massSpringSystemFromCubicMesh.cpp
   massSpringSystemFromCubicMeshConfigFile.cpp
diff --git a/src/libmatrix/matrixLAPACK.cpp b/src/libmatrix/matrixLAPACK.cpp
index ec0e367aa2b8824d4a15396065079eb1f466a1de..64cf8f0a111d3f1dfcbcf5ee440ab0cdfb961186 100644
--- a/src/libmatrix/matrixLAPACK.cpp
+++ b/src/libmatrix/matrixLAPACK.cpp
@@ -31,24 +31,24 @@
 #include "matrixBLAS.h"
 
 #ifdef __APPLE__
-//   #define DGETRF dgetrf_
-//   #define DGETRI dgetri_
-//   #define SGETRF sgetrf_
-//   #define SGETRI sgetri_
-//   #define DGESVD dgesvd_
-//   #define SGESVD sgesvd_
-//   #define DGELSY dgelsy_
-//   #define SGELSY sgelsy_
-//   #define DGESV dgesv_
-//   #define SGESV sgesv_
-//   #define DSYEV dsyev_
-//   #define SSYEV ssyev_
-//   #define DSYGV dsygv_
-//   #define SSYGV ssygv_
-//   #define SGEEV sgeev_
-//   #define DGEEV dgeev_
-//   #define DGPADM dgpadm_
-//   #define SGPADM sgpadm_
+  #define DGETRF dgetrf_
+  #define DGETRI dgetri_
+  #define SGETRF sgetrf_
+  #define SGETRI sgetri_
+  #define DGESVD dgesvd_
+  #define SGESVD sgesvd_
+  #define DGELSY dgelsy_
+  #define SGELSY sgelsy_
+  #define DGESV dgesv_
+  #define SGESV sgesv_
+  #define DSYEV dsyev_
+  #define SSYEV ssyev_
+  #define DSYGV dsygv_
+  #define SSYGV ssygv_
+  #define SGEEV sgeev_
+  #define DGEEV dgeev_
+  #define DGPADM dgpadm_
+  #define SGPADM sgpadm_
   #define INTEGER __CLPK_integer
 #else
 //   #define DGETRF dgetrf
diff --git a/src/libmatrix/matrixPCA.cpp b/src/libmatrix/matrixPCA.cpp
index 49956773c761e6cc707b36d9a708a0f616bd0383..efe85021c2c532eb62de25ca9e2dc2d85dae540f 100644
--- a/src/libmatrix/matrixPCA.cpp
+++ b/src/libmatrix/matrixPCA.cpp
@@ -158,7 +158,7 @@ int MatrixPCA(ThresholdingSpecification * thresholdingSpecification,
   }
 
   #ifdef __APPLE__
-//     #define DGESVD dgesvd_
+    #define DGESVD dgesvd_
     #define INTEGER __CLPK_integer
   #else
 //     #define DGESVD dgesvd
diff --git a/src/libmodalMatrix/CMakeLists.txt b/src/libmodalMatrix/CMakeLists.txt
index d12007c024b69f7441edadb6a689d5a9636a33a2..9ae6444c541f0ce9cf6376c3bd95ae231a5388d0 100644
--- a/src/libmodalMatrix/CMakeLists.txt
+++ b/src/libmodalMatrix/CMakeLists.txt
@@ -7,6 +7,6 @@ vega_add_library(modalMatrix
 target_link_libraries(modalMatrix
   PUBLIC
     matrixIO
-#     ${LAPACK_LIBRARIES}
-#     ${BLAS_LIBRARY}
+     ${LAPACK_LIBRARIES}
+     ${BLAS_LIBRARY}
 )
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index e0ecbec4b6595464f0ca1f27672bc26e95db5444..08d85b8362c11b10d3040c85aa253ff883b601d0 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -1,10 +1,11 @@
-
-if(VegaFEM_BUILD_MODEL_REDUCTION)
+if (VegaFEM_BUILD_MODEL_REDUCTION)
   add_subdirectory(largeModalDeformationFactory)
-  if(VegaFEM_ENABLE_Cg_SUPPORT)
+  if (VegaFEM_ENABLE_Cg_SUPPORT)
     add_subdirectory(reducedDynamicSolver-rt)
   endif()
-endif(VegaFEM_BUILD_MODEL_REDUCTION)
-add_subdirectory(displayObj)
-add_subdirectory(interactiveDeformableSimulator)
+endif()
+if (VegaFEM_ENABLE_OpenGL_SUPPORT)
+  add_subdirectory(displayObj)
+  add_subdirectory(interactiveDeformableSimulator)
+endif()
 add_subdirectory(volumetricMeshUtilities)