diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c1d0d7fff9154e8de04b71ed3fec4064eea89b6..6e8fc9e374e8d8be458d24c9ac530f93efed1b9a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,7 +104,7 @@ if(MSVC)
    ################################################################################
    if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
        set_target_properties(${PROJECT_NAME} PROPERTIES
-           OUTPUT_DIRECTORY_RELEASELIB_WIN32 "${CMAKE_CURRENT_SOURCE_DIR}/build-local/${CMAKE_VS_PLATFORM_NAME}/$<CONFIG>/bin/"
+           OUTPUT_DIRECTORY_RELEASELIB_WIN32 "${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_VS_PLATFORM_NAME}/$<CONFIG>/bin/"
        )
    endif()
    if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
@@ -121,7 +121,7 @@ if(MSVC)
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/include/upnp;"
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/ffmpeg/Build/win32/x64/include;"
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/sndfile/src;"
-               "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/inc32;"
+               "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/include;"
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/asio/asio/include;"
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/restinio/dev;"
                "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/fmt/include;"
@@ -148,6 +148,7 @@ if(MSVC)
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc;"
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/include;"
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/msgpack-c/include;"
+           "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/opendht/include;"
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/libarchive/libarchive;"
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/jsoncpp/include;"
            "${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/yaml-cpp/include;"
@@ -201,7 +202,8 @@ if(MSVC)
                /Oy-;
                /sdl-;
                /W0;
-               /FC
+               /FC;
+               /FS
            >
            /nologo;
            /Zi;
@@ -245,7 +247,7 @@ if(MSVC)
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/ffmpeg/Build/win32/x64/bin/swscale.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/lib/x64/libgnutls.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/lib/x64/lib_json.lib 
-   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/lib/x64/libopendht.lib 
+   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/opendht/build/Release/libopendht.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/argon2/vs2015/Argon2Ref/vs2015/build/Argon2Ref.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/msvc/lib/x64/secp256k1.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/yaml-cpp/msvc/Release/libyaml-cppmd.lib 
@@ -264,9 +266,8 @@ if(MSVC)
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/pjproject/pjnath/lib/pjnath-x86_64-x64-vc15-Release.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/fmt/msvc/Release/fmt.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/http_parser/x64/Release/http-parser.lib 
-   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/asio/asio/msvc/x64/Release/asio.lib 
-   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/out32dll/libeay32.lib 
-   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/out32dll/ssleay32.lib 
+   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/libcrypto.lib 
+   ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/openssl/libssl.lib 
    ${CMAKE_CURRENT_SOURCE_DIR}/contrib/build/speexdsp/lib/libspeexdsp.lib
    /ignore:4006 
    "
diff --git a/compat/msvc/winmake.py b/compat/msvc/winmake.py
index 9e8123ee2e532ae8729130db8366149fe29480ed..3ecf352b3ad2a537741d3918d11ddac8d640f3a5 100644
--- a/compat/msvc/winmake.py
+++ b/compat/msvc/winmake.py
@@ -1,3 +1,25 @@
+"""
+This tool is designed to facilitate downloading, patching, and building
+of library dependencies for the Jami daemon project on windows. MSBuild
+toolset and sdk versions can be supplied as parameters and will be sedded
+into vcxproj files accordingly.
+
+A package can be defined with a json like this:
+{
+    "name": "mylibrary",
+    "version": "76a5006623539a58262d33458a5605be096b3a10",
+    "url": "https://git.example.com/gorblok/mylibrary/archive/__VERSION__.tar.gz",
+    "deps": ["mydep"],
+    "use_cmake" : true,
+    "defines": ["SEGFAULTS=0", "MY_CMAKE_DEFINE=true"],
+    "patches": ["some_patch.patch"],
+    "win_patches": ["some_windows_line_ending_patch.patch"],
+    "project_paths": ["mylibrary-static.vcxproj"],
+    "with_env" : "10.0.16299.0",
+    "custom_scripts": { "pre_build": [], "build": [], "post_build": [] }
+}
+"""
+
 import sys
 import os
 import subprocess
@@ -26,7 +48,7 @@ log = None
 # project paths
 daemon_msvc_dir = os.path.dirname(os.path.realpath(__file__))
 daemon_dir = os.path.dirname(os.path.dirname(daemon_msvc_dir))
-daemon_msvc_build_local_dir = daemon_dir + r'\build-local'
+daemon_build_dir = daemon_dir + r'\build'
 contrib_src_dir = daemon_dir + r'\contrib\src'
 contrib_build_dir = daemon_dir + r'\contrib\build'
 contrib_tmp_dir = daemon_dir + r'\contrib\tarballs'
@@ -173,7 +195,7 @@ def make_plugin(pkg_info, force, sdk_version, toolset):
         cmake_script = "cmake -G " + getCMakeGenerator(getLatestVSVersion(
         )) + cmake_defines + "-S " + plugin_path + " -B " + plugin_path + "/msvc"
         root_logger.warning("Cmake generating vcxproj files")
-        result = getSHrunner().exec_batch(cmake_script)
+        _ = getSHrunner().exec_batch(cmake_script)
         build(pkg_name,
               plugin_path,
               pkg_info.get('project_paths', []),
@@ -187,7 +209,7 @@ def make_plugin(pkg_info, force, sdk_version, toolset):
 def make_daemon(pkg_info, force, sdk_version, toolset):
     cmake_script = 'cmake -DCMAKE_CONFIGURATION_TYPES="ReleaseLib_win32" -DCMAKE_SYSTEM_VERSION=' + sdk_version + \
         ' -DCMAKE_VS_PLATFORM_NAME="x64" -G ' + getCMakeGenerator(getLatestVSVersion(
-        )) + ' -T $(DefaultPlatformToolset) -S ../../ -B ../../build-local'
+        )) + ' -T $(DefaultPlatformToolset) -S ../../ -B ../../build'
     root_logger.warning("Cmake generating vcxproj files")
     result = getSHrunner().exec_batch(cmake_script)
     if result[0] is not 0:
@@ -200,7 +222,7 @@ def make_daemon(pkg_info, force, sdk_version, toolset):
     env_set = 'false' if pkg_info.get('with_env', '') == '' else 'true'
     sdk_to_use = sdk_version if env_set == 'false' else pkg_info.get(
         'with_env', '')
-    build('daemon', daemon_msvc_build_local_dir,
+    build('daemon', daemon_build_dir,
           pkg_info.get('project_paths', []),
           pkg_info.get('custom_scripts', {}),
           env_set,
@@ -254,13 +276,30 @@ def make(pkg_info, force, sdk_version, toolset):
         env_set = 'false' if pkg_info.get('with_env', '') == '' else 'true'
         sdk_to_use = sdk_version if env_set == 'false' else pkg_info.get(
             'with_env', '')
+
+        # configure with cmake ?
+        use_cmake = pkg_info.get('use_cmake', False)
+        if use_cmake:
+            cmake_defines = ""
+            for define in pkg_info.get('defines', []):
+                cmake_defines += " -D" + define + " "
+            if not pkg_up_to_date or current_version is None or force:
+                cmake_conf_script = "cmake -G " + getCMakeGenerator(getLatestVSVersion(
+                )) + cmake_defines + "-S '" + pkg_build_path + "' -B '" + pkg_build_path + "\\build'"
+                log.debug("Configuring with Cmake")
+                result = getSHrunner().exec_batch(cmake_conf_script)
+                if result[0] is not 0:
+                    log.error("Error configuring with CMake")
+                    exit(1)
+
         if build(pkg_name,
                  contrib_build_dir + '\\' + pkg_name,
                  pkg_info.get('project_paths', []),
                  pkg_info.get('custom_scripts', {}),
                  env_set,
                  sdk_to_use,
-                 toolset):
+                 toolset,
+                 use_cmake=use_cmake):
             track_build(pkg_name, version)
         else:
             log.error("Couldn't build contrib " + pkg_name)
@@ -428,7 +467,7 @@ def track_build(pkg_name, version):
 
 
 def build(pkg_name, pkg_dir, project_paths, custom_scripts, with_env, sdk,
-          toolset, arch='x64', conf='Release'):
+          toolset, arch='x64', conf='Release', use_cmake=False):
     getMSbuilder().set_msbuild_configuration(with_env, arch, conf, toolset)
     getMSbuilder().setup_vs_env(sdk)
 
@@ -458,12 +497,22 @@ def build(pkg_name, pkg_dir, project_paths, custom_scripts, with_env, sdk,
     # vcxproj files
     if project_paths:
         log.debug('Msbuild phase')
-    for pp in project_paths:
-        project_full_path = pkg_dir + '\\' + pp
-        log.debug('Building: ' + pkg_name + " with sdk version " +
-                  sdk + " and toolset " + toolset)
-        getMSbuilder().build(pkg_name, project_full_path, sdk, toolset)
-        build_operations += 1
+        for pp in project_paths:
+            project_full_path = pkg_dir + '\\' + pp
+            log.debug('Building: ' + pkg_name + " with sdk version " +
+                      sdk + " and toolset " + toolset)
+            getMSbuilder().build(pkg_name, project_full_path, sdk, toolset)
+            build_operations += 1
+    else:
+        # build directly with cmake
+        if use_cmake is True:
+            log.debug('CMake build phase')
+            cmake_build_script = "cmake --build '" + pkg_dir + \
+                "\\build' " + "--config " + conf
+            result = getSHrunner().exec_batch(cmake_build_script)
+            if result[0] is not 0:
+                log.error("Error building with CMake")
+                exit(1)
 
     os.chdir(tmp_dir)
 
diff --git a/contrib/src/asio/asio-vcxproj.patch b/contrib/src/asio/asio-vcxproj.patch
index 66fff580d165cfc14af5d8fe985efe415e3d7f38..916490d9d14eda32ad82be5b5ff31e9c13e1a735 100644
--- a/contrib/src/asio/asio-vcxproj.patch
+++ b/contrib/src/asio/asio-vcxproj.patch
@@ -79,7 +79,7 @@
 +      <Optimization>Disabled</Optimization>
 +      <SDLCheck>true</SDLCheck>
 +      <ConformanceMode>true</ConformanceMode>
-+      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>_WIN32_WINNT=0x0A00;ASIO_STANDALONE;ASIO_SEPARATE_COMPILATION;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +    </ClCompile>
 +    <Link>
@@ -95,7 +95,7 @@
 +      <Optimization>Disabled</Optimization>
 +      <SDLCheck>true</SDLCheck>
 +      <ConformanceMode>true</ConformanceMode>
-+      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>_WIN32_WINNT=0x0A00;ASIO_STANDALONE;ASIO_SEPARATE_COMPILATION;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +    </ClCompile>
 +    <Link>
@@ -113,7 +113,7 @@
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <SDLCheck>true</SDLCheck>
 +      <ConformanceMode>true</ConformanceMode>
-+      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>_WIN32_WINNT=0x0A00;ASIO_STANDALONE;ASIO_SEPARATE_COMPILATION;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +    </ClCompile>
 +    <Link>
@@ -131,7 +131,7 @@
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <SDLCheck>true</SDLCheck>
 +      <ConformanceMode>true</ConformanceMode>
-+      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++      <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>_WIN32_WINNT=0x0A00;ASIO_STANDALONE;ASIO_SEPARATE_COMPILATION;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +    </ClCompile>
 +    <Link>
diff --git a/contrib/src/asio/package.json b/contrib/src/asio/package.json
index 2f73b7d71d54145f4b60ded80adf00abfc8dfc21..23df6ff8ecfc11a812e06ffdf628e52268172a3f 100644
--- a/contrib/src/asio/package.json
+++ b/contrib/src/asio/package.json
@@ -7,9 +7,7 @@
     "win_patches": [
         "asio-vcxproj.patch"
     ],
-    "project_paths": [
-        "asio/msvc/asio.vcxproj"
-    ],
+    "project_paths": [],
     "with_env" : "",
     "custom_scripts": {
         "pre_build": [],
diff --git a/contrib/src/msgpack/package.json b/contrib/src/msgpack/package.json
index 17c4c40e52e953af8bc5408d59412dc67eb83fcb..9ccbdfb4f807ba7898ba88039450501ce9f0e67b 100644
--- a/contrib/src/msgpack/package.json
+++ b/contrib/src/msgpack/package.json
@@ -5,12 +5,10 @@
     "deps": [],
     "patches": [],
     "win_patches": [],
-    "project_paths": ["vs2017/msgpackc.vcxproj"],
+    "project_paths": [],
     "with_env" : "",
     "custom_scripts": {
-        "pre_build": [
-            "mkdir vs2017 & cd vs2017 & cmake .. -DMSGPACK_CXX11=ON -G %CMAKE_GENERATOR%"
-        ],
+        "pre_build": [],
         "build": [],
         "post_build": []
     }
diff --git a/contrib/src/opendht/package.json b/contrib/src/opendht/package.json
index cc5099f720e95bfd5bcc77fd7f674c06e9df557d..cccc6d48ce6ab417228c8d603a6c9d4cee3cf26e 100644
--- a/contrib/src/opendht/package.json
+++ b/contrib/src/opendht/package.json
@@ -1,6 +1,6 @@
 {
     "name": "opendht",
-    "version": "cf44bb608f220d8e592380e7fb0157aaa9f3a20d",
+    "version": "076a5006623539a58262d33458a5605be096b3a1",
     "url": "https://github.com/savoirfairelinux/opendht/archive/__VERSION__.tar.gz",
     "deps": [
         "argon2",
@@ -10,9 +10,17 @@
         "msgpack",
         "restinio"
     ],
+    "use_cmake" : true,
+    "defines": [
+        "OPENDHT_SHARED=0",
+        "OPENDHT_PROXY_CLIENT=1",
+        "OPENDHT_PROXY_SERVER=1",
+        "OPENDHT_PUSH_NOTIFICATIONS=1",
+        "OPENDHT_TOOLS=0"
+    ],
     "patches": [],
     "win_patches": [],
-    "project_paths": ["msvc/opendht.vcxproj"],
+    "project_paths": [],
     "with_env" : "",
     "custom_scripts": {
         "pre_build": [],
diff --git a/contrib/src/openssl/package.json b/contrib/src/openssl/package.json
index d1f6321365d9b750504955b4dfec22ec5fcf8679..d8e458e5ca0b3740dd19d727c043fe62e130a874 100644
--- a/contrib/src/openssl/package.json
+++ b/contrib/src/openssl/package.json
@@ -1,19 +1,11 @@
 {
     "name": "openssl",
-    "version": "5cc1e25bc76bcf0db03bc37bd64b3290727963b6",
-    "url": "https://github.com/Microsoft/openssl/archive/__VERSION__.tar.gz",
-    "deps": [],
-    "patches": [],
-    "win_patches": [],
-    "project_paths": [],
-    "with_env" : "10.0.16299.0",
+    "version": "OpenSSL_1_1_1-stable",
+    "url": "https://github.com/openssl/openssl/archive/__VERSION__.tar.gz",
     "custom_scripts": {
-        "pre_build": [],
         "build": [
-            "call perl Configure no-asm no-hw VC-WIN64A",
-            "call ms/do_win64a",
-            "set CL=/MP & call nmake -f ms/ntdll.mak"
-        ],
-        "post_build": []
+            "call perl Configure no-asm no-hw no-tests /Z7 /FS VC-WIN64A",
+            "if defined MAKE_TOOL (call %MAKE_TOOL%) else (call nmake)"
+        ]
     }
 }
\ No newline at end of file