diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ce05e0fe..7671d7b1e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -431,7 +431,6 @@ IF(NC_EXTRA_DEPS)
     SET(EXTRA_DEPS ${EXTRA_DEPS} "${${_LIB}_DEP}")
   ENDFOREACH()
   MESSAGE("Extra deps: ${EXTRA_DEPS}")
-  LIST(REMOVE_DUPLICATES EXTRA_DEPS)
   SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${EXTRA_DEPS})
 ENDIF()
 ###
@@ -599,15 +599,6 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4)
     # we will use a static library.  This can be toggled
     # by explicitly modifying NC_FIND_SHARED_LIBS.
     ##
-    IF(NC_FIND_SHARED_LIBS)
-      SET(NC_HDF5_LINK_TYPE "shared")
-      SET(NC_HDF5_LINK_TYPE_UPPER "SHARED")
-      ADD_DEFINITIONS(-DH5_BUILT_AS_DYNAMIC_LIB)
-    ELSE(NC_FIND_SHARED_LIBS)
-      SET(NC_HDF5_LINK_TYPE "static")
-      SET(NC_HDF5_LINK_TYPE_UPPER "STATIC")
-      ADD_DEFINITIONS(-DH5_BUILT_AS_STATIC_LIB)
-    ENDIF(NC_FIND_SHARED_LIBS)
 
     #####
     # First, find the C and HL libraries.
@@ -620,9 +620,9 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4)
       SET(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME})
       FIND_PACKAGE(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE})
     ELSE(MSVC)
-      FIND_PACKAGE(HDF5 COMPONENTS C HL REQUIRED)
+      FIND_PACKAGE(HDF5 COMPONENTS C HL CONFIG REQUIRED)
     ENDIF(MSVC)
-
+    
     ##
     # Next, check the HDF5 version. This will inform which
     # HDF5 variables we need to munge.
@@ -695,6 +695,19 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4)
     ENDIF()
   ENDIF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
 
+  if(TARGET hdf5::hdf5-shared)
+    set(HDF5_C_LIBRARY hdf5::hdf5-shared)
+    set(HDF5_C_LIBRARY_hdf5 hdf5::hdf5-shared)
+    set(HDF5_HL_LIBRARIES hdf5::hdf5_hl-shared)
+    ADD_DEFINITIONS(-DH5_BUILT_AS_DYNAMIC_LIB)
+  else()
+    set(HDF5_C_LIBRARY hdf5::hdf5-static)
+    set(HDF5_C_LIBRARY_hdf5 hdf5::hdf5-static)
+    set(HDF5_HL_LIBRARIES hdf5::hdf5_hl-static)
+    ADD_DEFINITIONS(-DH5_BUILT_AS_STATIC_LIB)
+  endif()
+  list(APPEND CMAKE_REQUIRED_LIBRARIES ${HDF5_C_LIBRARY})
+
   FIND_PACKAGE(Threads)
 
   # There is a missing case in the above code so default it
@@ -721,16 +733,11 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4)
   CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS)
 
   #Check to see if H5Z_SZIP exists in HDF5_Libraries. If so, we must use szip.
-  CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Z_SZIP "" USE_SZIP)
+  set(USE_SZIP ${HDF5_ENABLE_SZIP_SUPPORT})
   IF(USE_SZIP)
-    FIND_LIBRARY(SZIP NAMES szip sz)
-    IF(SZIP)
+    #FIND_LIBRARY(SZIP NAMES szip sz)
+    #IF(SZIP)
       SET(HAVE_H5Z_SZIP 1)
-      SET(SZIP_LIBRARY ${SZIP})
-      SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${SZIP})
-    ELSE()
-      MESSAGE(FATAL_ERROR "HDF5 Requires SZIP, but cannot find libszip or libsz.")
-    ENDIF()
   ENDIF()
 
   CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_libver_bounds "" HAVE_H5PSET_LIBVER_BOUNDS)
@@ -764,8 +776,7 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4)
 ENDIF(USE_HDF5 OR ENABLE_NETCDF_4)
 
 # See if we have libcurl
-FIND_PACKAGE(CURL)
-ADD_DEFINITIONS(-DCURL_STATICLIB=1)
+FIND_PACKAGE(CURL CONFIG)
 INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
 
 # Check to see if CURLOPT_USERNAME is defined.
@@ -1890,7 +1902,6 @@ ENDIF()
 
 STRING(REPLACE ";" " " LINKFLAGS "${LINKFLAGS}")
 
-LIST(REMOVE_DUPLICATES NC_LIBS)
 LIST(REMOVE_DUPLICATES LINKFLAGS)
 
 SET(LIBS ${NC_LIBS})
diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt
index ea9b02949..ec7851f37 100644
--- a/liblib/CMakeLists.txt
+++ b/liblib/CMakeLists.txt
@@ -58,7 +58,7 @@ ENDIF()
 
 SET(TLL_LIBS "")
 
-SET(TLL_LIBS ${TLL_LIBS} ${HAVE_LIBM} ${ZLIB_LIBRARY})
+SET(TLL_LIBS ${TLL_LIBS} ${HAVE_LIBM} ZLIB::ZLIB)
 
 # Add extra dependencies specified via NC_EXTRA_DEPS
 SET(TLL_LIBS ${TLL_LIBS} ${EXTRA_DEPS})
@@ -68,27 +68,15 @@ IF(HAVE_LIBDL)
 ENDIF()
 
 IF(USE_HDF5 OR USE_NETCDF4)
-  IF(NOT MSVC)
-    # Some version of cmake define HDF5_hdf5_LIBRARY instead of
-    # HDF5_LIBRARY. Same with HDF5_HL_LIBRARIES
-    IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARIES)
-      SET(HDF5_C_LIBRARIES ${HDF5_hdf5_LIBRARY})
-    ENDIF()
-    IF(HDF5_hdf5_hl_LIBRARY AND NOT HDF5_HL_LIBRARIES)
-      SET(HDF5_HL_LIBRARIES ${HDF5_hdf5_hl_LIBRARY})
-    ENDIF()
-    # The order of the libraries is important here for static
-    # builds:
-    # Make sure that HDF5_C_LIBRARY appears *after*
-    # HDF5_HL_LIBRARY.
-    SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY})
-  ELSE() # Windows CMake defines HDF5_LIBRARIES.
-    SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY})
-  ENDIF()
+  if(TARGET hdf5::hdf5-shared)
+    SET(TLL_LIBS ${TLL_LIBS} hdf5::hdf5-shared hdf5::hdf5_hl-shared)
+  else()
+    SET(TLL_LIBS ${TLL_LIBS} hdf5::hdf5-static hdf5::hdf5_hl-static)
+  endif()
 ENDIF()
 
 IF(USE_DAP)
-  SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY})
+  SET(TLL_LIBS ${TLL_LIBS} CURL::libcurl)
 ENDIF()
 
 IF(USE_HDF4)
@@ -100,7 +88,6 @@ IF(ENABLE_PNETCDF AND PNETCDF)
 ENDIF()
 
 IF(TLL_LIBS)
-  LIST(REMOVE_DUPLICATES TLL_LIBS)
 ENDIF()
 
 TARGET_LINK_LIBRARIES(netcdf ${TLL_LIBS})
diff --git a/netCDFConfig.cmake.in b/netCDFConfig.cmake.in
index c89cf3e67..b81f35a1b 100644
--- a/netCDFConfig.cmake.in
+++ b/netCDFConfig.cmake.in
@@ -12,6 +12,10 @@ set_and_check(netCDF_LIB_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@")
 set(netCDF_LIBRARIES netcdf)
 
 # include target information
+include(CMakeFindDependencyMacro)
+find_dependency(ZLIB)
+find_dependency(HDF5 CONFIG)
+find_dependency(CURL CONFIG)
 include("${CMAKE_CURRENT_LIST_DIR}/netCDFTargets.cmake")
 
 # Compiling Options
