diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt
index b169d708860f8c20698b3980e9160624bb40f286..a45f72c708045ba40692655ab6c18b3320216cc9 100644
--- a/bindings/CMakeLists.txt
+++ b/bindings/CMakeLists.txt
@@ -1,5 +1,3 @@
-
-
 if(ADIOS2_HAVE_Python)
   add_subdirectory(python)
 endif()
diff --git a/bindings/c/CMakeLists.txt b/bindings/c/CMakeLists.txt
index 515c0b74cd7461da3f33257e72d7d74ad69c2752..2384e16b795bfb838a6e7a016ff12fd1c620505f 100644
--- a/bindings/c/CMakeLists.txt
+++ b/bindings/c/CMakeLists.txt
@@ -9,7 +9,6 @@ add_library(adios2_c adios2_c.cpp)
 target_link_libraries(adios2_c PRIVATE adios2)
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_compile_definitions(adios2_c PUBLIC ADIOS2_HAVE_MPI_C)
   target_include_directories(adios2_c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${MPI_C_INCLUDE_PATH})
   target_link_libraries(adios2_c PRIVATE ${MPI_C_LIBRARIES})
@@ -34,4 +33,4 @@ install(
 install(
   FILES adios2/adios2_c_enums.h
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/adios2
-)
\ No newline at end of file
+)
diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt
index 90d030a55245ad5ee4e0d691a093d6e160567fa7..a6ced9fc20570ec0b41b0343ea705906cf1b284a 100644
--- a/bindings/python/CMakeLists.txt
+++ b/bindings/python/CMakeLists.txt
@@ -1,7 +1,3 @@
-set(Python_ADDITIONAL_VERSIONS 3 2.7)
-find_package(PythonInterp REQUIRED)
-find_package(PythonLibsNew REQUIRED)
-
 pybind11_add_module(adios2py MODULE
   ADIOSPy.h
   ADIOSPy.cpp
@@ -19,7 +15,6 @@ pybind11_add_module(adios2py MODULE
 )
 target_link_libraries(adios2py PRIVATE adios2)
 if(ADIOS2_HAVE_MPI)
-  find_package(PythonModule REQUIRED COMPONENTS mpi4py mpi4py/mpi4py.h)
   target_link_libraries(adios2py PRIVATE PythonModule::mpi4py)
 endif()
 
diff --git a/cmake/DetectOptions.cmake b/cmake/DetectOptions.cmake
index bc9d2aba3d626565c2858d842089010d96376dfb..990fc3f3cec5a8d171e701737eebf2eaa511e324 100644
--- a/cmake/DetectOptions.cmake
+++ b/cmake/DetectOptions.cmake
@@ -16,30 +16,30 @@ set(adios2_find_modules)
 # BZip2
 if(ADIOS2_USE_BZip2 STREQUAL AUTO)
   find_package(BZip2)
-  if(BZIP2_FOUND)
-    set(ADIOS2_HAVE_BZip2 TRUE)
-  endif()
 elseif(ADIOS2_USE_BZip2)
+  find_package(BZip2 REQUIRED)
+endif()
+if(BZIP2_FOUND)
   set(ADIOS2_HAVE_BZip2 TRUE)
 endif()
 
 # ZFP
 if(ADIOS2_USE_ZFP STREQUAL AUTO)
   find_package(ZFP)
-  if(ZFP_FOUND)
-    set(ADIOS2_HAVE_ZFP TRUE)
-  endif()
 elseif(ADIOS2_USE_ZFP)
+  find_package(ZFP REQUIRED)
+endif()
+if(ZFP_FOUND)
   set(ADIOS2_HAVE_ZFP TRUE)
 endif()
 
 # MPI
 if(ADIOS2_USE_MPI STREQUAL AUTO)
-  find_package(MPI COMPONENTS C)
-  if(MPI_FOUND)
-    set(ADIOS2_HAVE_MPI TRUE)
-  endif()
+  find_package(MPI)
 elseif(ADIOS2_USE_MPI)
+  find_package(MPI REQUIRED)
+endif()
+if(MPI_FOUND)
   set(ADIOS2_HAVE_MPI TRUE)
 endif()
 
@@ -49,47 +49,42 @@ if(ADIOS2_USE_C)
 endif()
 
 # DataMan
-if(ADIOS2_USE_DataMan STREQUAL AUTO)
-  if(SHARED_LIBS_SUPPORTED AND NOT MSVC)
-    set(ADIOS2_HAVE_DataMan TRUE)
-  endif()
-elseif(ADIOS2_USE_DataMan)
+if(SHARED_LIBS_SUPPORTED AND NOT MSVC)
   set(ADIOS2_HAVE_DataMan TRUE)
 endif()
 
 # ZeroMQ
 if(ADIOS2_USE_ZeroMQ STREQUAL AUTO)
   find_package(ZeroMQ)
-  if(ZeroMQ_FOUND)
-    set(ADIOS2_HAVE_ZeroMQ TRUE)
-  endif()
 elseif(ADIOS2_USE_ZeroMQ)
+  find_package(ZeroMQ REQUIRED)
+endif()
+if(ZeroMQ_FOUND)
   set(ADIOS2_HAVE_ZeroMQ TRUE)
 endif()
 
 # HDF5
 if(ADIOS2_USE_HDF5 STREQUAL AUTO)
   find_package(HDF5 COMPONENTS C)
-  if(HDF5_FOUND AND
-     ((ADIOS2_HAVE_MPI AND HDF5_IS_PARALLEL) OR
-      NOT (ADIOS2_HAVE_MPI OR HDF5_IS_PARALLEL)))
-    set(ADIOS2_HAVE_HDF5 TRUE)
-  endif()
 elseif(ADIOS2_USE_HDF5)
+  find_package(HDF5 REQUIRED COMPONENTS C)
+endif()
+if(HDF5_FOUND AND
+   ((ADIOS2_HAVE_MPI AND HDF5_IS_PARALLEL) OR
+    NOT (ADIOS2_HAVE_MPI OR HDF5_IS_PARALLEL)))
   set(ADIOS2_HAVE_HDF5 TRUE)
 endif()
 
 # ADIOS1
+if(NOT ADIOS2_HAVE_MPI)
+  set(adios1_find_args COMPONENTS sequential)
+endif()
 if(ADIOS2_USE_ADIOS1 STREQUAL AUTO)
-  if(NOT ADIOS2_HAVE_MPI)
-    set(adios1_args COMPONENTS sequential)
-  endif()
   find_package(ADIOS1 1.12.0 ${adios1_args})
-  unset(adios1_args)
-  if(ADIOS1_FOUND)
-    set(ADIOS2_HAVE_ADIOS1 TRUE)
-  endif()
 elseif(ADIOS2_USE_ADIOS1)
+  find_package(ADIOS1 1.12.0 REQUIRED ${adios1_args})
+endif()
+if(ADIOS1_FOUND)
   set(ADIOS2_HAVE_ADIOS1 TRUE)
 endif()
 
@@ -98,39 +93,35 @@ endif()
 list(INSERT CMAKE_MODULE_PATH 0
   "${ADIOS2_SOURCE_DIR}/thirdparty/pybind11/pybind11/tools"
 )
-if(ADIOS2_USE_Python STREQUAL AUTO)
+if(ADIOS2_USE_Python)
+  if(NOT (ADIOS2_USE_Python STREQUAL AUTO))
+    set(python_find_args REQUIRED)
+  endif()
   if(SHARED_LIBS_SUPPORTED AND ADIOS2_ENABLE_PIC)
     set(Python_ADDITIONAL_VERSIONS 3 2.7)
-    find_package(PythonInterp)
-    find_package(PythonLibsNew)
-    if(PYTHONLIBS_FOUND)
-      if(ADIOS2_HAVE_MPI)
-        find_package(PythonModule COMPONENTS mpi4py mpi4py/mpi4py.h)
-        if(PythonModule_mpi4py_FOUND)
-          set(ADIOS2_HAVE_Python TRUE)
-        endif()
-      else()
-        set(ADIOS2_HAVE_Python TRUE)
-      endif()
+    list(APPEND python_find_args COMPONENTS Interp Libs numpy)
+    if(ADIOS2_HAVE_MPI)
+      list(APPEND python_find_args "mpi4py\\\;mpi4py/mpi4py.h")
     endif()
+    find_package(PythonFull ${python_find_args})
   endif()
-elseif(ADIOS2_USE_Python)
-  set(ADIOS2_HAVE_Python TRUE)
+endif()
+if(PythonFull_FOUND)
+  set(ADIOS2_HAVE_Python ON)
 endif()
 
 #SysV IPC
-if(ADIOS2_USE_SysVShMem STREQUAL AUTO)
-  if(UNIX)
-    include(CheckSymbolExists)
-    CHECK_SYMBOL_EXISTS(shmget "sys/ipc.h;sys/shm.h" HAVE_shmget)
-    if(HAVE_shmget)
-      set(ADIOS2_HAVE_SysVShMem ON)
-    else()
-      set(ADIOS2_HAVE_SysVShMem OFF)
-    endif()
+if(UNIX)
+  include(CheckSymbolExists)
+  CHECK_SYMBOL_EXISTS(shmget "sys/ipc.h;sys/shm.h" HAVE_shmget)
+  if(HAVE_shmget)
+    set(ADIOS2_HAVE_SysVShMem ON)
   else()
     set(ADIOS2_HAVE_SysVShMem OFF)
   endif()
-elseif(ADIOS2_USE_SysVShMem)
-  set(ADIOS2_HAVE_SysVShMem TRUE)
+else()
+  set(ADIOS2_HAVE_SysVShMem OFF)
 endif()
+
+# Multithreading
+find_package(Threads REQUIRED)
diff --git a/cmake/FindPythonFull.cmake b/cmake/FindPythonFull.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..6b70423eaaf0fef9254c22c1a772569267eeef0a
--- /dev/null
+++ b/cmake/FindPythonFull.cmake
@@ -0,0 +1,56 @@
+#------------------------------------------------------------------------------#
+# Distributed under the OSI-approved Apache License, Version 2.0.  See
+# accompanying file Copyright.txt for details.
+#------------------------------------------------------------------------------#
+#
+# PythonFull
+# -----------
+#
+# Try to find various pieces needed for a full python environment including
+# python libs, interpreter, and modules
+#
+# This module defines the following variables:
+#
+#   PythonFull_FOUND
+#   PYTHONINTERP_FOUND
+#   PYTHON_EXECUTABLE
+#   PYTHONLIBS_FOUND
+#   PYTHON_LIBRARIES
+#   PythonModule_${module_NAME}_FOUND
+#   
+# This is intented to be called by specifying components for libraries,
+# interpreter, and modules.  So, for example, if you needed libraries, the
+# interpreter, mpi4py, and numpy then you would call:
+#
+#   find_package(PythonFull COMPONENTS Interp Libs mpi4py numpy)
+#
+
+include(CMakeFindDependencyMacro)
+set(_req_vars)
+foreach(comp IN LISTS PythonFull_FIND_COMPONENTS)
+  if(comp STREQUAL Interp)
+    find_package(PythonInterp)
+    set(PythonFull_${comp}_FOUND ${PYTHONINTERP_FOUND})
+    list(APPEND _req_vars PYTHON_EXECUTABLE)
+  elseif(comp STREQUAL Libs)
+    find_package(PythonLibsNew)
+    set(PythonFull_${comp}_FOUND ${PYTHONLIBS_FOUND})
+    list(APPEND _req_vars PYTHON_LIBRARIES)
+  else()
+    # Parse off any specified headers and libs for a given module
+    set(_comp ${comp})
+    list(GET _comp 0 _mod)
+    string(REGEX REPLACE "${_mod}\\\;[^;]*" "${_mod}"
+      PythonFull_FIND_COMPONENTS "${PythonFull_FIND_COMPONENTS}"
+    )
+    set(PythonFull_FIND_REQUIRED_${_mod} TRUE)
+    find_package(PythonModule COMPONENTS ${_comp})
+    set(PythonFull_${_mod}_FOUND ${PythonModule_${_mod}_FOUND})
+  endif()
+endforeach()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PythonFull
+  REQUIRED_VARS ${_req_vars}
+  HANDLE_COMPONENTS
+)
diff --git a/cmake/FindPythonModule.cmake b/cmake/FindPythonModule.cmake
index 492d1d28f4205b856903fae195fa9d9a208f042d..c47f71dbc19c6ae8ddcb3ee8618c69b79487802f 100644
--- a/cmake/FindPythonModule.cmake
+++ b/cmake/FindPythonModule.cmake
@@ -119,8 +119,9 @@ set( PythonModule_${module_NAME}_PATH
   endif()
 
   include(FindPackageHandleStandardArgs)
-  find_package_handle_standard_args(PythonModule_${module_NAME} DEFAULT_MSG
-    ${required_vars}
+  find_package_handle_standard_args(PythonModule_${module_NAME}
+    FOUND_VAR PythonModule_${module_NAME}_FOUND
+    REQUIRED_VARS ${required_vars}
   )
 endif()
 
diff --git a/examples/basics/globalArray/CMakeLists.txt b/examples/basics/globalArray/CMakeLists.txt
index f9a9b07dd5bbc1c0361f0fe4930f2b0efcf76280..62192593245e554fb315dc3d56c18994d4661905 100644
--- a/examples/basics/globalArray/CMakeLists.txt
+++ b/examples/basics/globalArray/CMakeLists.txt
@@ -7,7 +7,6 @@ add_executable(globalArray_write globalArray_write.cpp)
 target_link_libraries(globalArray_write adios2)
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_include_directories(globalArray_write PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(globalArray_write ${MPI_C_LIBRARIES})
 endif()
diff --git a/examples/basics/joinedArray/CMakeLists.txt b/examples/basics/joinedArray/CMakeLists.txt
index f8d775e84b3e6d09f3fb8aa2a8f8d67fc82e5c94..a0a7b06413911738666e6b968653cdb831ff9e26 100644
--- a/examples/basics/joinedArray/CMakeLists.txt
+++ b/examples/basics/joinedArray/CMakeLists.txt
@@ -7,7 +7,6 @@ add_executable(joinedArray_write joinedArray_write.cpp)
 target_link_libraries(joinedArray_write adios2)
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_include_directories(joinedArray_write PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(joinedArray_write ${MPI_C_LIBRARIES})
 endif()
diff --git a/examples/basics/localArray/CMakeLists.txt b/examples/basics/localArray/CMakeLists.txt
index 3f46669a629802cc351bded5f4b4deb5df5d2bed..a42506de02aa74c4f4fef3c99c5c1e50e49ad19a 100644
--- a/examples/basics/localArray/CMakeLists.txt
+++ b/examples/basics/localArray/CMakeLists.txt
@@ -7,7 +7,6 @@ add_executable(localArray_write localArray_write.cpp)
 target_link_libraries(localArray_write adios2)
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_include_directories(localArray_write PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(localArray_write ${MPI_C_LIBRARIES})
 endif()
diff --git a/examples/basics/values/CMakeLists.txt b/examples/basics/values/CMakeLists.txt
index 619fdc326200801d35c065ab42966996308600d3..79e27ea6077d0e3e04400245a5e3e13409ddb09b 100644
--- a/examples/basics/values/CMakeLists.txt
+++ b/examples/basics/values/CMakeLists.txt
@@ -7,7 +7,6 @@ add_executable(values_write values_write.cpp)
 target_link_libraries(values_write adios2)
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_include_directories(values_write PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(values_write ${MPI_C_LIBRARIES})
 endif()
diff --git a/examples/experimental/multistep/CMakeLists.txt b/examples/experimental/multistep/CMakeLists.txt
index b5f75bb22f3288c69952fbe19fdb49be2f1ef53e..546074f51d6dc87c55e5ba822778e792953ae093 100644
--- a/examples/experimental/multistep/CMakeLists.txt
+++ b/examples/experimental/multistep/CMakeLists.txt
@@ -6,19 +6,12 @@
 add_executable(writer_multistep writer_multistep.cpp)
 add_executable(reader_stepping reader_stepping.cpp)
 add_executable(reader_allsteps reader_allsteps.cpp)
-target_link_libraries(writer_multistep adios2)
-target_link_libraries(reader_stepping adios2)
-target_link_libraries(reader_allsteps adios2)
 
-if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
+foreach(tgt IN ITEMS writer_multistep reader_stepping reader_allsteps)
+  target_link_libraries(${tgt} adios2)
 
-  target_include_directories(writer_multistep PRIVATE ${MPI_C_INCLUDE_PATH})
-  target_link_libraries(writer_multistep ${MPI_C_LIBRARIES})
-
-  target_include_directories(reader_stepping PRIVATE ${MPI_C_INCLUDE_PATH})
-  target_link_libraries(reader_stepping ${MPI_C_LIBRARIES})
-
-  target_include_directories(reader_allsteps PRIVATE ${MPI_C_INCLUDE_PATH})
-  target_link_libraries(reader_allsteps ${MPI_C_LIBRARIES})
-endif()
+  if(ADIOS2_HAVE_MPI)
+    target_include_directories(${tgt} PRIVATE ${MPI_C_INCLUDE_PATH})
+    target_link_libraries(${tgt} ${MPI_C_LIBRARIES})
+  endif()
+endforeach()
diff --git a/examples/experimental/runtimeconfig/hello/CMakeLists.txt b/examples/experimental/runtimeconfig/hello/CMakeLists.txt
index 28adedce753ea338bbb3d6bea81987ab84f2de09..9770b299c4d377fdf6f0e8177c776db8dee817c5 100644
--- a/examples/experimental/runtimeconfig/hello/CMakeLists.txt
+++ b/examples/experimental/runtimeconfig/hello/CMakeLists.txt
@@ -1,6 +1,4 @@
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(helloBPWriterXML helloBPWriterXML.cpp)
   target_include_directories(helloBPWriterXML PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(helloBPWriterXML ${MPI_C_LIBRARIES})
diff --git a/examples/heatTransfer/read/CMakeLists.txt b/examples/heatTransfer/read/CMakeLists.txt
index d1b7e2853fe0dee152b0773f4ede495d359538e4..30797b43a01f63f8af4808f25d97ab50cfbeb772 100644
--- a/examples/heatTransfer/read/CMakeLists.txt
+++ b/examples/heatTransfer/read/CMakeLists.txt
@@ -4,20 +4,13 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
+  add_executable(heatTransfer_read_adios2 heatRead_adios2.cpp PrintData.h)
+  target_include_directories(heatTransfer_read_adios2
+    PRIVATE ${MPI_C_INCLUDE_PATH}
+  )
+  target_link_libraries(heatTransfer_read_adios2 adios2 ${MPI_C_LIBRARIES})
 
   if(ADIOS2_HAVE_ADIOS1)
-  
-    find_package(MPI COMPONENTS C REQUIRED)
-    find_package(ADIOS1 REQUIRED)
-    
-    add_executable(heatTransfer_read_adios2 heatRead_adios2.cpp PrintData.h)
-    target_include_directories(heatTransfer_read_adios2
-      PRIVATE ${MPI_C_INCLUDE_PATH}
-    )
-    target_link_libraries(heatTransfer_read_adios2
-      adios2 ${MPI_C_LIBRARIES}
-    )
-
     add_executable(heatTransfer_read_adios1 heatRead_adios1.cpp PrintData.h)
     target_include_directories(heatTransfer_read_adios1
       PRIVATE ${MPI_C_INCLUDE_PATH}
@@ -26,5 +19,4 @@ if(ADIOS2_HAVE_MPI)
       adios1::adios ${MPI_C_LIBRARIES}
     )
   endif()
-  
-endif()
\ No newline at end of file
+endif()
diff --git a/examples/heatTransfer/write/CMakeLists.txt b/examples/heatTransfer/write/CMakeLists.txt
index a40186bb05e6d8225d73d5d58fea4fc380de47b6..a6c459bca092e6f0c706f982e7b17a36f04caeab 100644
--- a/examples/heatTransfer/write/CMakeLists.txt
+++ b/examples/heatTransfer/write/CMakeLists.txt
@@ -4,9 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-  find_package(Threads REQUIRED)
-
   add_executable(heatTransfer_write_adios2
     main.cpp
     HeatTransfer.cpp
@@ -16,15 +13,14 @@ if(ADIOS2_HAVE_MPI)
   target_include_directories(heatTransfer_write_adios2
     PRIVATE ${MPI_C_INCLUDE_PATH}
   )
-  target_link_libraries(heatTransfer_write_adios2 adios2 ${MPI_C_LIBRARIES} 
-                        ${CMAKE_THREAD_LIBS_INIT})
+  target_link_libraries(heatTransfer_write_adios2
+    adios2 ${MPI_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+  )
   target_compile_definitions(heatTransfer_write_adios2 PRIVATE
-   -DDEFAULT_CONFIG=${CMAKE_CURRENT_SOURCE_DIR}/config.xml)
+   -DDEFAULT_CONFIG=${CMAKE_CURRENT_SOURCE_DIR}/config.xml
+  )
 
   if(ADIOS2_HAVE_ADIOS1)
-    find_package(ADIOS1 REQUIRED)
-    find_package(MPI COMPONENTS C REQUIRED)
-
     add_executable(heatTransfer_write_adios1
       main.cpp
       HeatTransfer.cpp
@@ -40,9 +36,6 @@ if(ADIOS2_HAVE_MPI)
   endif()
 
   if(ADIOS2_HAVE_HDF5)
-    find_package(HDF5 REQUIRED)
-    find_package(MPI COMPONENTS C REQUIRED)
-
     add_executable(heatTransfer_write_hdf5
       main.cpp
       HeatTransfer.cpp
@@ -53,14 +46,8 @@ if(ADIOS2_HAVE_MPI)
       PRIVATE ${MPI_C_INCLUDE_PATH} ${HDF5_C_INCLUDE_DIRS}
     )
     target_link_libraries(heatTransfer_write_hdf5
-      ${MPI_C_LIBRARIES} ${HDF5_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+      ${HDF5_C_LIBRARIES} ${MPI_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
     )
-  endif()
-
-
-  if(ADIOS2_HAVE_HDF5)
-    find_package(HDF5 REQUIRED)
-    find_package(MPI COMPONENTS C REQUIRED)
 
     add_executable(heatTransfer_write_ph5
       main.cpp
@@ -72,15 +59,10 @@ if(ADIOS2_HAVE_MPI)
       PRIVATE ${MPI_C_INCLUDE_PATH} ${HDF5_C_INCLUDE_DIRS}
     )
     target_link_libraries(heatTransfer_write_ph5
-      ${MPI_C_LIBRARIES} ${HDF5_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+      ${HDF5_C_LIBRARIES} ${MPI_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
     )
-  endif()
-
-
-  if(ADIOS2_HAVE_HDF5)
-     find_package(MPI COMPONENTS C REQUIRED)
 
-     add_executable(heatTransfer_write_a2h5
+    add_executable(heatTransfer_write_a2h5
       main.cpp
       HeatTransfer.cpp
       Settings.cpp
@@ -90,12 +72,8 @@ if(ADIOS2_HAVE_MPI)
     target_include_directories(heatTransfer_write_a2h5
       PRIVATE ${MPI_C_INCLUDE_PATH}
     )
-    #target_link_libraries(heatTransfer_write_a2h5
-    #  ${MPI_C_LIBRARIES} 
-    #)
-    target_link_libraries(heatTransfer_write_a2h5 PUBLIC adios2 
-                          ${CMAKE_THREAD_LIBS_INIT})
-
+    target_link_libraries(heatTransfer_write_a2h5
+      adios2 ${MPI_C_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+    )
   endif()
-
 endif()
diff --git a/examples/hello/adios1Writer/CMakeLists.txt b/examples/hello/adios1Writer/CMakeLists.txt
index f8e52ae9d22e385cf061ed92d8352f301e1815e0..3b5c016b66047fb21944652f17969120c67420c4 100644
--- a/examples/hello/adios1Writer/CMakeLists.txt
+++ b/examples/hello/adios1Writer/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_adios1Writer helloADIOS1Writer.cpp)
   target_include_directories(hello_adios1Writer PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_adios1Writer ${MPI_C_LIBRARIES})
diff --git a/examples/hello/bpBZip2Wrapper/CMakeLists.txt b/examples/hello/bpBZip2Wrapper/CMakeLists.txt
index 3803a998a7103673cdee602633c71a03a049da24..702d5aaeb3383508227210f076aec4f43b7b117b 100644
--- a/examples/hello/bpBZip2Wrapper/CMakeLists.txt
+++ b/examples/hello/bpBZip2Wrapper/CMakeLists.txt
@@ -4,15 +4,11 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_bpBZip2Wrapper helloBPBZip2Wrapper.cpp)
   target_include_directories(hello_bpBZip2Wrapper PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_bpBZip2Wrapper ${MPI_C_LIBRARIES})
-  
 else()
   add_executable(hello_bpBZip2Wrapper helloBPBZip2Wrapper_nompi.cpp)
-  
 endif()
 
 target_link_libraries(hello_bpBZip2Wrapper adios2)
diff --git a/examples/hello/bpFlushWriter/CMakeLists.txt b/examples/hello/bpFlushWriter/CMakeLists.txt
index ed554a4b4b9abfe17688da507e286371b10535b0..777704ef21ea820ac6d928dedb869fd323ea495c 100644
--- a/examples/hello/bpFlushWriter/CMakeLists.txt
+++ b/examples/hello/bpFlushWriter/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_bpFlushWriter helloBPFlushWriter.cpp)
   target_include_directories(hello_bpFlushWriter PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_bpFlushWriter ${MPI_C_LIBRARIES})
diff --git a/examples/hello/bpTimeWriter/CMakeLists.txt b/examples/hello/bpTimeWriter/CMakeLists.txt
index 30551c498bc783e88054ed85c1e90ef5acd51e19..68834e2887d52954186e6f5e6b9d20b70ed38ec9 100644
--- a/examples/hello/bpTimeWriter/CMakeLists.txt
+++ b/examples/hello/bpTimeWriter/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_bpTimeWriter helloBPTimeWriter.cpp)
   target_include_directories(hello_bpTimeWriter PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_bpTimeWriter ${MPI_C_LIBRARIES})
diff --git a/examples/hello/bpWriter/CMakeLists.txt b/examples/hello/bpWriter/CMakeLists.txt
index ba4172948b1a8ebf3ba28c831d1fe0fecc0ae275..2bd5b288146e09aec540ff4ada3dbad874d22783 100644
--- a/examples/hello/bpWriter/CMakeLists.txt
+++ b/examples/hello/bpWriter/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_bpWriter helloBPWriter.cpp)
   target_include_directories(hello_bpWriter PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_bpWriter ${MPI_C_LIBRARIES})
@@ -18,15 +16,14 @@ if(ADIOS2_HAVE_MPI)
   
 else()
   add_executable(hello_bpWriter helloBPWriter_nompi.cpp)
-  
+
   if(ADIOS2_HAVE_C)
     add_executable(hello_bpWriter_c helloBPWriter_nompi.c)
   endif()
-  
 endif()
 
 target_link_libraries(hello_bpWriter adios2)
 
 if(ADIOS2_HAVE_C)
   target_link_libraries(hello_bpWriter_c adios2_c adios2)
-endif()
\ No newline at end of file
+endif()
diff --git a/examples/hello/bpZfpWrapper/CMakeLists.txt b/examples/hello/bpZfpWrapper/CMakeLists.txt
index c5cb52b74f20dc3bdced1ea0e63a5a5373a33329..c6802384e091d450d900ddb90599ab707dde5a9c 100644
--- a/examples/hello/bpZfpWrapper/CMakeLists.txt
+++ b/examples/hello/bpZfpWrapper/CMakeLists.txt
@@ -4,15 +4,12 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_bpZfpWrapper helloBPZfpWrapper.cpp)
   target_include_directories(hello_bpZfpWrapper PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_bpZfpWrapper ${MPI_C_LIBRARIES})
   
 else()
   add_executable(hello_bpZfpWrapper helloBPZfpWrapper_nompi.cpp)
-  
 endif()
 
 target_link_libraries(hello_bpZfpWrapper adios2)
diff --git a/examples/hello/datamanReader/CMakeLists.txt b/examples/hello/datamanReader/CMakeLists.txt
index f180c9062b4c74d2b9a3cd21098c539cf1d3293f..1c1baa846fe64e3357d0a82b90354cca50cccde7 100644
--- a/examples/hello/datamanReader/CMakeLists.txt
+++ b/examples/hello/datamanReader/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_datamanReader helloDataManReader.cpp)
   target_include_directories(hello_datamanReader PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_datamanReader ${MPI_C_LIBRARIES})
diff --git a/examples/hello/datamanWriter/CMakeLists.txt b/examples/hello/datamanWriter/CMakeLists.txt
index 3e5c955837a67d596a6c515577ec52a6af466154..4a41f3e730d4032f05c09dffe7c381cf6d7cc917 100644
--- a/examples/hello/datamanWriter/CMakeLists.txt
+++ b/examples/hello/datamanWriter/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-  
   add_executable(hello_datamanWriter helloDataManWriter.cpp)
   target_include_directories(hello_datamanWriter PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_datamanWriter ${MPI_C_LIBRARIES})
diff --git a/examples/hello/hdf5Writer/CMakeLists.txt b/examples/hello/hdf5Writer/CMakeLists.txt
index a2f7e6abd8d2bb83c1eca0f4e0bc9219e9b99dc2..d5d4311250ddd6cd76a2909f88d53ea17da3eb81 100644
--- a/examples/hello/hdf5Writer/CMakeLists.txt
+++ b/examples/hello/hdf5Writer/CMakeLists.txt
@@ -4,8 +4,6 @@
 #------------------------------------------------------------------------------#
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
-
   add_executable(hello_hdf5Writer helloHDF5Writer.cpp)
   target_include_directories(hello_hdf5Writer PRIVATE ${MPI_C_INCLUDE_PATH})
   target_link_libraries(hello_hdf5Writer ${MPI_C_LIBRARIES})
diff --git a/source/adios2/CMakeLists.txt b/source/adios2/CMakeLists.txt
index 374bacb349b5bea89ffd9b114ac3daf79dd1d20a..5cca920095ce3fcb6c74e737182a4590a58d50b9 100644
--- a/source/adios2/CMakeLists.txt
+++ b/source/adios2/CMakeLists.txt
@@ -56,8 +56,6 @@ target_include_directories(adios2
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 )
 target_link_libraries(adios2 PRIVATE adios2sys pugixml)
-
-find_package(Threads REQUIRED)
 target_link_libraries(adios2 PUBLIC ${CMAKE_THREAD_LIBS_INIT})
 
 if(UNIX)
@@ -77,19 +75,16 @@ if(ADIOS2_HAVE_DataMan)
 endif()
   
 if(ADIOS2_HAVE_BZip2)
-  find_package(BZip2 REQUIRED)
   target_sources(adios2 PRIVATE transform/compress/CompressBZip2.cpp)
   target_link_libraries(adios2 PRIVATE BZip2::BZip2)
 endif()
 
 if(ADIOS2_HAVE_ZFP)
-  find_package(ZFP REQUIRED)
   target_sources(adios2 PRIVATE transform/compress/CompressZfp.cpp)
   target_link_libraries(adios2 PRIVATE zfp::zfp)
 endif()
 
 if(ADIOS2_HAVE_MPI)
-  find_package(MPI COMPONENTS C REQUIRED)
   target_include_directories(adios2 PUBLIC ${MPI_C_INCLUDE_PATH})
   target_link_libraries(adios2 PUBLIC ${MPI_C_LIBRARIES})
 else()
@@ -97,12 +92,6 @@ else()
 endif()
 
 if(ADIOS2_HAVE_ADIOS1)
-  if(ADIOS2_HAVE_MPI)
-    find_package(ADIOS1 1.12.0 REQUIRED)
-  else()
-    find_package(ADIOS1 1.12.0 COMPONENTS sequential REQUIRED)
-  endif()
-
   target_sources(adios2 PRIVATE
     engine/adios1/ADIOS1Reader.cpp
     engine/adios1/ADIOS1Writer.cpp
@@ -114,18 +103,6 @@ if(ADIOS2_HAVE_ADIOS1)
 endif()
 
 if(ADIOS2_HAVE_HDF5)
-  find_package(HDF5 REQUIRED)
-  if(ADIOS2_HAVE_MPI AND (NOT HDF5_IS_PARALLEL))
-    message(FATAL_ERROR
-      "A sequential version of HDF5 was detected but the parallel version "
-      "of ADIOS is being built, which requires a parallel HDF5."
-    )
-  elseif((NOT ADIOS2_HAVE_MPI) AND HDF5_IS_PARALLEL)
-    message(FATAL_ERROR
-      "A parallel version of HDF5 was detected but the sequential version "
-      "of ADIOS is being built, which requires a sequential HDF5."
-    )
-  endif()
   if(HDF5_C_INCLUDE_DIRS)
     target_include_directories(adios2 PRIVATE ${HDF5_C_INCLUDE_DIRS})
   else()
diff --git a/source/dataman/CMakeLists.txt b/source/dataman/CMakeLists.txt
index acd59dde91950ab570f1741a64b034ea7067ea55..11e4823c7da126aee5a4d635182d0c2f161cc28d 100644
--- a/source/dataman/CMakeLists.txt
+++ b/source/dataman/CMakeLists.txt
@@ -48,8 +48,6 @@ target_link_libraries(temporalman PRIVATE dataman)
 list(APPEND dataman_modules temporalman)
 
 if(ADIOS2_HAVE_ZeroMQ)
-  find_package(ZeroMQ REQUIRED)
-
   add_library(zmqman MODULE
     StreamMan.h StreamMan.cpp
     ZmqMan.h ZmqMan.cpp
@@ -66,8 +64,6 @@ if(ADIOS2_HAVE_ZeroMQ)
 endif()
 
 if(ADIOS2_HAVE_ZFP)
-  find_package(ZFP REQUIRED)
-
   add_library(zfpman MODULE ZfpMan.h ZfpMan.cpp)
   target_link_libraries(zfpman PRIVATE dataman zfp::zfp)
 
diff --git a/testing/adios2/engine/adios1/CMakeLists.txt b/testing/adios2/engine/adios1/CMakeLists.txt
index c31059b077e7d11a421775027e9dbabad540a4eb..ace06e557d1705e87449bc73972562005a035a1c 100644
--- a/testing/adios2/engine/adios1/CMakeLists.txt
+++ b/testing/adios2/engine/adios1/CMakeLists.txt
@@ -3,20 +3,15 @@
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
 
-if(NOT ADIOS2_HAVE_MPI)
-  find_package(ADIOS1 COMPONENTS sequential REQUIRED)
-else()
-  find_package(ADIOS1 REQUIRED)
-endif()
-
 add_executable(TestADIOS1WriteRead TestADIOS1WriteRead.cpp)
 target_link_libraries(TestADIOS1WriteRead adios2 gtest adios1::adios)
-
-if(NOT ADIOS2_HAVE_MPI)
-  gtest_add_tests(TARGET TestADIOS1WriteRead)
-else()
-  # MPI versions of the test
-  gtest_add_tests(TARGET TestADIOS1WriteRead EXEC_WRAPPER ${MPIEXEC}
-                                                        ${MPIEXEC_NUMPROC_FLAG}
-                                                        ${MPIEXEC_MAX_NUMPROCS})
+if(ADIOS2_HAVE_MPI)
+  target_include_directories(TestADIOS1WriteRead PRIVATE ${MPI_C_INCLUDE_PATH})
+  target_link_libraries(TestADIOS1WriteRead ${MPI_C_LIBRARIES})
+  set(extra_test_args
+    EXEC_WRAPPER
+      ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}
+  )
 endif()
+
+gtest_add_tests(TARGET TestADIOS1WriteRead ${extra_test_args})
diff --git a/testing/adios2/engine/bp/CMakeLists.txt b/testing/adios2/engine/bp/CMakeLists.txt
index 3153fd2ab8e638c45a2c10bf63ae5aaafcb21dc9..2d6c49e5be76f4a27757e3fe5c178ddfad5c453c 100644
--- a/testing/adios2/engine/bp/CMakeLists.txt
+++ b/testing/adios2/engine/bp/CMakeLists.txt
@@ -7,8 +7,6 @@
 if(NOT ADIOS2_HAVE_MPI)
   
   if(ADIOS2_HAVE_ADIOS1)
-    find_package(ADIOS1 COMPONENTS sequential REQUIRED)
-
     add_executable(TestBPWriteRead TestBPWriteRead.cpp)
     target_link_libraries(TestBPWriteRead adios2 gtest adios1::adios)
   
@@ -21,11 +19,12 @@ if(NOT ADIOS2_HAVE_MPI)
     gtest_add_tests(TARGET TestBPWriteRead)
     gtest_add_tests(TARGET TestBPWriteReadstdio)
     gtest_add_tests(TARGET TestBPWriteReadfstream)
-    
   endif()
     
   add_executable(TestBPWriteProfilingJSON TestBPWriteProfilingJSON.cpp)
-  target_link_libraries(TestBPWriteProfilingJSON adios2 gtest gtest_main NLohmannJson)
+  target_link_libraries(TestBPWriteProfilingJSON
+    adios2 gtest gtest_main NLohmannJson
+  )
   
   gtest_add_tests(TARGET TestBPWriteProfilingJSON)
 endif()
diff --git a/testing/adios2/engine/hdf5/CMakeLists.txt b/testing/adios2/engine/hdf5/CMakeLists.txt
index 9847eaee6b081946ccf2c98db47a23b587daa223..e13c17fb6760fe5169e6554696e403cd03a4de87 100644
--- a/testing/adios2/engine/hdf5/CMakeLists.txt
+++ b/testing/adios2/engine/hdf5/CMakeLists.txt
@@ -3,10 +3,14 @@
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
 
-find_package(HDF5 REQUIRED)
-
 add_executable(TestHDF5WriteRead TestHDF5WriteRead.cpp)
-target_include_directories(TestHDF5WriteRead PRIVATE ${HDF5_C_INCLUDE_DIRS})
+
+# Workaround for multiple versions of FindHDF5
+if(HDF5_C_INCLUDE_DIRS)
+  target_include_directories(TestHDF5WriteRead PRIVATE ${HDF5_C_INCLUDE_DIRS})
+else()
+  target_include_directories(TestHDF5WriteRead PRIVATE ${HDF5_INCLUDE_DIRS})
+endif()
 target_link_libraries(TestHDF5WriteRead adios2 gtest ${HDF5_C_LIBRARIES})
 
 gtest_add_tests(TARGET TestHDF5WriteRead)