diff --git a/CMakeLists.txt b/CMakeLists.txt
index 264d614b11bd7f260ac4644fb30987ac46e16794..803a0f9b2be19753c123078f78864b67b373bb40 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,12 +57,9 @@ if (NOT MSVC)
     set (THREADS_PREFER_PTHREAD_FLAG TRUE)
     find_package (Threads)
     find_package (PkgConfig REQUIRED)
-    find_package (GnuTLS 3.3 REQUIRED)
+    pkg_search_module (GnuTLS REQUIRED IMPORTED_TARGET gnutls)
     pkg_search_module (Nettle REQUIRED IMPORTED_TARGET nettle)
-    check_include_file_cxx(msgpack.hpp HAVE_MSGPACKCXX)
-    if (NOT HAVE_MSGPACKCXX)
-        find_package (msgpack REQUIRED)
-    endif()
+    find_package (msgpack REQUIRED NAMES msgpackc-cxx msgpack msgpack-cxx)
     if (OPENDHT_TOOLS)
         find_package (Readline 6 REQUIRED)
     endif ()
@@ -158,12 +155,6 @@ else ()
     add_definitions(-DOPENDHT_LOG=false)
 endif()
 
-if (MSGPACK_INCLUDE_DIRS)
-    include_directories (SYSTEM "${MSGPACK_INCLUDE_DIRS}")
-endif ()
-if (GNUTLS_INCLUDE_DIRS)
-    include_directories (SYSTEM "${GNUTLS_INCLUDE_DIRS}")
-endif ()
 if (ASIO_INCLUDE_DIR)
     include_directories (SYSTEM "${ASIO_INCLUDE_DIR}")
 endif ()
@@ -312,8 +303,11 @@ if (OPENDHT_STATIC)
         target_include_directories(opendht-static SYSTEM PRIVATE ${argon2_INCLUDE_DIRS})
         target_link_libraries(opendht-static
             PRIVATE PkgConfig::argon2
-            PUBLIC ${CMAKE_THREAD_LIBS_INIT} ${GNUTLS_LIBRARIES} PkgConfig::Nettle
-                PkgConfig::Jsoncpp ${FMT_LIBRARY} ${HTTP_PARSER_LIBRARY})
+            PUBLIC ${CMAKE_THREAD_LIBS_INIT} PkgConfig::GnuTLS PkgConfig::Nettle msgpackc-cxx
+                ${FMT_LIBRARY} ${HTTP_PARSER_LIBRARY})
+        if (Jsoncpp_FOUND)
+            target_link_libraries(opendht-static PUBLIC PkgConfig::Jsoncpp)
+        endif()
         if (OPENDHT_PROXY_OPENSSL)
             target_link_libraries(opendht-static PUBLIC PkgConfig::OPENSSL)
         endif()
@@ -380,9 +374,12 @@ if (OPENDHT_SHARED)
     set_target_properties (opendht PROPERTIES SOVERSION ${opendht_VERSION_MAJOR} VERSION ${opendht_VERSION})
     target_compile_definitions(opendht PRIVATE OPENDHT_BUILD)
     target_link_libraries(opendht
-        PUBLIC ${CMAKE_THREAD_LIBS_INIT}
-        PRIVATE ${GNUTLS_LIBRARIES} PkgConfig::Nettle PkgConfig::Jsoncpp
+        PUBLIC ${CMAKE_THREAD_LIBS_INIT} msgpackc-cxx
+        PRIVATE PkgConfig::GnuTLS PkgConfig::Nettle
                 ${FMT_LIBRARY} ${HTTP_PARSER_LIBRARY} PkgConfig::argon2)
+    if (Jsoncpp_FOUND)
+        target_link_libraries(opendht PUBLIC PkgConfig::Jsoncpp)
+    endif()
     if (OPENDHT_PROXY_OPENSSL)
         target_link_libraries(opendht PUBLIC PkgConfig::OPENSSL)
     endif()    
@@ -498,7 +495,6 @@ if (OPENDHT_TESTS)
        ${CMAKE_THREAD_LIBS_INIT}
        PkgConfig::Cppunit
        ${GNUTLS_LIBRARIES}
-       PkgConfig::Jsoncpp
     )
     if (OPENDHT_PROXY_OPENSSL)
         target_link_libraries(opendht_unit_tests PkgConfig::OPENSSL)