diff --git a/cxxfem/CMakeLists.txt b/cxxfem/CMakeLists.txt
index 1dfe56c1486360a38b693ff901dd6d7fe52467f7..0f411750f2a427e01fa28fa7b17e0c660290076e 100644
--- a/cxxfem/CMakeLists.txt
+++ b/cxxfem/CMakeLists.txt
@@ -59,6 +59,14 @@ IF(FEM_USE_MKL)
     MESSAGE(STATUS "MKL_INCLUDE_DIRS=${MKL_INCLUDE_DIRS}")
     # library (mkl_rt.so) searched using LIBRARY_PATH (Linux/macOS) or LIB (windows)
     FIND_LIBRARY(MKL_LIBRARIES mkl_rt PATHS ENV LIBRARY_PATH)
+    IF(MSVC)
+        # with MSVC+MKL, we must link to intel OpenMP so that we have only 1 OpenMP lib
+        FIND_LIBRARY(INTEL_OPENMP libiomp5md)
+        MESSAGE(STATUS "INTEL_OPENMP=${INTEL_OPENMP}")
+        IF(NOT INTEL_OPENMP)
+            MESSAGE(FATAL_ERROR "libiomp5md library not found!")
+        ENDIF()
+    ENDIF()
     # IF(MINGW)
     #     FIND_LIBRARY(MKL_LIB1 mkl_intel_lp64_dll PATHS ENV LIBRARY_PATH)
     #     FIND_LIBRARY(MKL_LIB2 mkl_intel_thread_dll PATHS ENV LIBRARY_PATH)
@@ -88,9 +96,9 @@ ENDIF()
 # OpenMP --
 FIND_PACKAGE(OpenMP)
 IF(OPENMP_FOUND)
-    MESSAGE ("OpenMP enabled (CXX_FLAGS=${OpenMP_CXX_FLAGS})")
+    MESSAGE (STATUS "OpenMP enabled (CXX_FLAGS=${OpenMP_CXX_FLAGS})")
 ELSE()
-    MESSAGE ("OpenMP disabled.")
+    MESSAGE (STATUS "OpenMP disabled.")
 ENDIF()
 
 # Python --
diff --git a/cxxfem/src/CMakeLists.txt b/cxxfem/src/CMakeLists.txt
index cb63466ab1083dea6ad58cd6c302f730d5db3f35..70001b65f772570822ef55aafa6e14cf5fc7aa33 100644
--- a/cxxfem/src/CMakeLists.txt
+++ b/cxxfem/src/CMakeLists.txt
@@ -1,4 +1,3 @@
-
 FILE(GLOB SRCS *.cpp)
 ADD_LIBRARY(fem SHARED ${SRCS})
 TARGET_LINK_LIBRARIES(fem PUBLIC ${GMSH_LIBRARIES})
@@ -9,4 +8,9 @@ ENDIF()
 IF(FEM_USE_MKL)
     TARGET_LINK_LIBRARIES(fem PUBLIC ${MKL_LIBRARIES})
     TARGET_INCLUDE_DIRECTORIES(fem PUBLIC ${MKL_INCLUDE_DIRS})
+    # with MSVC+MKL, we must link to intel OpenMP so that we have only 1 OpenMP lib
+    IF(MSVC)
+        TARGET_LINK_OPTIONS(fem PUBLIC -NODEFAULTLIB:"vcomp" -NODEFAULTLIB:"vcompd")
+        TARGET_LINK_LIBRARIES(fem PUBLIC ${INTEL_OPENMP})
+    ENDIF()
 ENDIF()
\ No newline at end of file
diff --git a/envs/win-msvc.cmd b/envs/win-msvc.cmd
index 6b52ab171edde2c00d8997b3aed5ee3207ae4200..f6ab0f37d0cf6758e6c898d149792113fd82b910 100644
--- a/envs/win-msvc.cmd
+++ b/envs/win-msvc.cmd
@@ -1,65 +1,16 @@
 @echo off
 :: This file opens a terminal which allows you to compile the code with
-:: Microsoft Visual Studio 2017 (x64) on Windows
-::
-:: HOW TO USE THIS FILE?
-::   [run this file]
-::   mkdir build
-::   cd build
-::   cmake -A x64 ..
-::   cmake --build . --config Release
-::   [executables are built in the bin/Release folder]
-::   ctest -C Release
+:: Microsoft Visual Studio 2019 (x64) on Windows
 
-:: set the location of gmsh SDK / mingw compiler
-set "GMSHSDK=%~dp0..\lib\gmsh-sdk"
-set "EIGEN=%~dp0..\lib\eigen"
 set COMPILERPATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build"
 
-:: perform some tests...
-IF NOT EXIST "%GMSHSDK%" (
-    ECHO   - gmsh-sdk NOT found in %GMSHSDK%!!
-    PAUSE
-    EXIT /B
-) ELSE (
-    ECHO   - gmsh-sdk found.
-)
-
-IF NOT EXIST "%EIGEN%" (
-    ECHO   - eigen NOT found in %EIGEN%!!
-    PAUSE
-    EXIT /B
-) ELSE (
-    ECHO   - eigen found.
-)
-
-IF NOT EXIST %COMPILERPATH% (
-    ECHO   - compiler NOT found in %COMPILERPATH%!!
-    PAUSE
-    EXIT /B
-) ELSE (
-    ECHO   - compiler found.
-)
-
 :: Intel MKL
 set "INTELPATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.5.281\windows"
-set LIB=%INTELPATH%\mkl\lib\intel64_win;%INTELPATH%\compiler\lib\intel64_win;%LIB%
-set INCLUDE=%INTELPATH%\mkl\include;%INCLUDE%
-:: does not always work 
-@REM call %INTELPATH%\mkl\bin\mklvars.bat intel64 vs2019
-
-:: where is gmsh.exe and gmsh-**.dll ?
-set PATH=%GMSHSDK%\bin;%GMSHSDK%\lib;%PATH%
-:: where is gmsh.h ?
-set INCLUDE=%EIGEN%;%GMSHSDK%\include;%INCLUDE%
-:: where is gmsh.lib ?
-set LIB=%GMSHSDK%\lib;%LIB%
-:: where is gmsh.py ? (required only if you want to use the python API)
-set PYTHONPATH=%GMSHSDK%\lib;%PYTHONPATH%
+@REM set LIB=%INTELPATH%\mkl\lib\intel64_win;%INTELPATH%\compiler\lib\intel64_win;%LIB%
+@REM set INCLUDE=%INTELPATH%\mkl\include;%INCLUDE%
+call "%INTELPATH%\mkl\bin\mklvars.bat" intel64 vs2019
 
 :: set the environment of the msvc compiler
 CD /d "%~dp0"
 CD ..
-:: problem with mkl_rt (mkl_intel_thread cannot be loaded)
-:: %comspec% /k "%COMPILERPATH%\vcvars64.bat"
-%comspec% /k 
+%comspec% /k "%COMPILERPATH%\vcvars64.bat"
diff --git a/fossils.py b/fossils.py
index 098153cdb89d67f1a4d258e61480929475970419..ced959d4f716e345a1d361951cde709253ac9bf1 100644
--- a/fossils.py
+++ b/fossils.py
@@ -176,12 +176,12 @@ def setup_pythonpath():
                     'build', 'bin', 'Release'))  # msvc
 
     # allows this script to be run without setting env
-    rm_folder_from_path('gmsh')
-    rm_folder_from_pypath('gmsh')
-    add_folder2pypath(os.path.join(this_script_dir, 'lib',
-                    'gmsh-sdk', 'lib'))  # msvc 
-    add_folder2path(os.path.join(this_script_dir, 'lib',
-                    'gmsh-sdk', 'bin'))  # gmsh
+    # rm_folder_from_path('gmsh')
+    # rm_folder_from_pypath('gmsh')
+    # add_folder2pypath(os.path.join(this_script_dir, 'lib',
+    #                 'gmsh-sdk', 'lib'))  # msvc 
+    # add_folder2path(os.path.join(this_script_dir, 'lib',
+    #                 'gmsh-sdk', 'bin'))  # gmsh
     # print(f'sys.path={sys.path}')
 
 
@@ -217,10 +217,6 @@ if __name__ == "__main__":
     # add main program folder and binaries dir to the PYTHONPATH
     setup_pythonpath()
 
-    # preload some modules (vtk before gmsh)
-    import vtk
-    import gmsh
-
     # redirect C++ streams to Python
     import cxxfem
     redirect = cxxfem.StdOutErr2Py()