diff --git a/CMakeLists.txt b/CMakeLists.txt
index ca5a692..e0651b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -161,12 +161,9 @@ if (WITH_TESTS)
 endif()
 add_subdirectory(dimbuilder)
 add_subdirectory(vendor/arbiter)
-add_subdirectory(vendor/schema-validator)
 add_subdirectory(vendor/kazhdan)
 add_subdirectory(vendor/lazperf)
-add_subdirectory(vendor/utfcpp)
 add_subdirectory(vendor/lepcc)
-add_subdirectory(vendor/h3)
 add_subdirectory(tools)
 add_subdirectory(apps)
 
@@ -230,12 +227,13 @@ add_library(PDAL::PDAL ALIAS ${PDAL_LIB_NAME})
 
 
 
+find_package(Eigen3 CONFIG REQUIRED)
+target_link_libraries(${PDAL_LIB_NAME} PRIVATE Eigen3::Eigen)
 target_include_directories(${PDAL_LIB_NAME}
     SYSTEM BEFORE PRIVATE
-        ${PDAL_VENDOR_EIGEN_DIR}
         ${PDAL_VENDOR_DIR}/kazhdan
-        ${PDAL_VENDOR_DIR}/h3/include
 )
+target_link_libraries(${PDAL_LIB_NAME} PRIVATE h3::h3)
 target_include_directories(${PDAL_LIB_NAME}
     PRIVATE
         ${ROOT_DIR}
@@ -269,6 +267,8 @@ target_link_libraries(${PDAL_LIB_NAME}
         ${PDAL_LIBDIR}
         ${WINSOCK_LIBRARY}
 )
+find_package(nanoflann CONFIG REQUIRED)
+target_link_libraries(${PDAL_LIB_NAME} PRIVATE nanoflann::nanoflann)
 
 if (ZSTD_FOUND)
     target_link_libraries(${PDAL_LIB_NAME}
@@ -304,9 +304,6 @@ target_include_directories(${PDAL_LIB_NAME}
     INTERFACE
         $<INSTALL_INTERFACE:include>)
 
-target_compile_definitions(${PDAL_LIB_NAME}
-    PRIVATE
-    H3_PREFIX=PDALH3)
 
 if(WIN32)
     target_compile_definitions(${PDAL_LIB_NAME}
diff --git a/cmake/h3.cmake b/cmake/h3.cmake
index 398ad6d..fb3c9ad 100644
--- a/cmake/h3.cmake
+++ b/cmake/h3.cmake
@@ -2,5 +2,6 @@
 # H3 configuration.
 #
 
-set(PDAL_H3_LIB_NAME pdal_h3)
+find_package(h3 CONFIG REQUIRED)
+set(PDAL_H3_LIB_NAME h3::h3)
 
diff --git a/cmake/schema-validator.cmake b/cmake/schema-validator.cmake
index 1f9f996..aeb598c 100644
--- a/cmake/schema-validator.cmake
+++ b/cmake/schema-validator.cmake
@@ -1,5 +1,5 @@
 #
 # N Lohmann JSON schema validator handler
 #
-include(${PDAL_CMAKE_DIR}/nlohmann.cmake)
-set(JSON_SCHEMA_LIB_NAME pdal_json_schema)
+find_package(nlohmann_json_schema_validator CONFIG REQUIRED)
+set(JSON_SCHEMA_LIB_NAME nlohmann_json_schema_validator::validator)
diff --git a/cmake/utfcpp.cmake b/cmake/utfcpp.cmake
index 6543ff6..dc6fac8 100644
--- a/cmake/utfcpp.cmake
+++ b/cmake/utfcpp.cmake
@@ -1,6 +1,7 @@
 #
 # UTF CPP
 #
-set(UTFCPP_INCLUDE_DIR ${PDAL_VENDOR_DIR}/utfcpp/source)
+find_package(utf8cpp CONFIG REQUIRED)
+set(UTFCPP_INCLUDE_DIR "")
 set(UTFCPP_LIB_NAME utf8::cpp)
 
diff --git a/pdal/JsonFwd.hpp b/pdal/JsonFwd.hpp
index 507c456..6b502d0 100644
--- a/pdal/JsonFwd.hpp
+++ b/pdal/JsonFwd.hpp
@@ -1,3 +1,4 @@
+#include <nlohmann/json_fwd.hpp>
 #ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
 #define INCLUDE_NLOHMANN_JSON_FWD_HPP_
 
diff --git a/pdal/private/KDImpl.hpp b/pdal/private/KDImpl.hpp
index 473ffba..a69431f 100644
--- a/pdal/private/KDImpl.hpp
+++ b/pdal/private/KDImpl.hpp
@@ -34,7 +34,8 @@
 
 #pragma once
 
-#include <nanoflann/nanoflann.hpp>
+#include <nanoflann.hpp>
+#define SearchParams SearchParameters
 
 namespace pdal
 {
@@ -116,7 +117,7 @@ public:
     PointIdList radius(double const& x, double const& y, double const& r) const
     {
         PointIdList output;
-        std::vector<std::pair<std::size_t, double>> ret_matches;
+        std::vector<nanoflann::ResultItem<std::size_t, double>> ret_matches;
         nanoflann::SearchParams params;
         params.sorted = true;
 
@@ -247,7 +248,7 @@ public:
     PointIdList radius(double x, double y, double z, double r) const
     {
         PointIdList output;
-        std::vector<std::pair<std::size_t, double>> ret_matches;
+        std::vector<nanoflann::ResultItem<std::size_t, double>> ret_matches;
         nanoflann::SearchParams params;
         params.sorted = true;
 
@@ -330,7 +331,7 @@ public:
     PointIdList radius(PointId idx, double r) const
     {
         PointIdList output;
-        std::vector<std::pair<std::size_t, double>> ret_matches;
+        std::vector<nanoflann::ResultItem<std::size_t, double>> ret_matches;
         nanoflann::SearchParams params;
         params.sorted = true;
 
diff --git a/tools/lasdump/CMakeLists.txt b/tools/lasdump/CMakeLists.txt
index d0d4d64..595d724 100644
--- a/tools/lasdump/CMakeLists.txt
+++ b/tools/lasdump/CMakeLists.txt
@@ -11,6 +11,7 @@ add_executable(lasdump
 )
 
 target_link_libraries(lasdump PRIVATE
+    ${UTFCPP_LIB_NAME}
     ${PDAL_LAZPERF_LIB_NAME}
     GDAL::GDAL
     "$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:-lstdc++fs>"
