diff --git a/examples/heatTransfer/CMakeLists.txt b/examples/heatTransfer/CMakeLists.txt
index bca588c58d2509e99148fb0d384df8b7a6b916f6..02e4cd30c850a0af1b3cd322cd386cb61a766109 100644
--- a/examples/heatTransfer/CMakeLists.txt
+++ b/examples/heatTransfer/CMakeLists.txt
@@ -3,27 +3,5 @@
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
 
-add_executable(heatTransfer_adios main.cpp HeatTransfer.cpp Settings.cpp IO_adios2.cpp)
-
-if(ADIOS_USE_MPI)
-    find_package(MPI COMPONENTS C REQUIRED)
-    target_include_directories(heatTransfer_adios PRIVATE ${MPI_C_INCLUDE_PATH})
-    target_link_libraries(heatTransfer_adios adios2 ${MPI_C_LIBRARIES})
-else(ADIOS_USE_MPI) 
-    target_link_libraries(heatTransfer_adios adios2)
-endif()
-
-if(ADIOS_USE_ADIOS1)
-    find_package(ADIOS1 REQUIRED)
-    add_executable(heatTransfer_adios1 main.cpp HeatTransfer.cpp Settings.cpp IO_adios1.cpp)
-    if(ADIOS_USE_MPI)
-        target_include_directories(heatTransfer_adios1 PRIVATE ${MPI_C_INCLUDE_PATH})
-        target_link_libraries(heatTransfer_adios1  adios1::adios ${MPI_C_LIBRARIES})
-    else(ADIOS_USE_MPI) 
-        target_compile_definitions(heatTransfer_adios1 PRIVATE -D_NOMPI)
-        target_link_libraries(heatTransfer_adios1 adios1::adios)
-    endif()
-endif()
-
+add_subdirectory(write)
 add_subdirectory(read)
-
diff --git a/examples/heatTransfer/read/CMakeLists.txt b/examples/heatTransfer/read/CMakeLists.txt
index 993d1d0474d30711d04b45206f366efecee04fcc..c82cf01a868db9bfbd2b445abef274c5cb866ece 100644
--- a/examples/heatTransfer/read/CMakeLists.txt
+++ b/examples/heatTransfer/read/CMakeLists.txt
@@ -3,25 +3,25 @@
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
 
-#add_executable(heatRead_adios heatRead_adios.cpp)
-#
-#if(ADIOS_USE_MPI)
-#    find_package(MPI COMPONENTS C REQUIRED)
-#    target_include_directories(heatRead_adios PRIVATE ${MPI_C_INCLUDE_PATH})
-#    target_link_libraries(heatRead_adios adios2 ${MPI_C_LIBRARIES})
-#else(ADIOS_USE_MPI) 
-#    target_link_libraries(heatRead_adios adios2)
-#endif()
-
-if(ADIOS_USE_ADIOS1)
+if(ADIOS_USE_MPI)
+  if(ADIOS_USE_ADIOS1)
     find_package(ADIOS1 REQUIRED)
-    add_executable(heatRead_adios1 heatRead_adios1.cpp PrintData.cpp)
-    if(ADIOS_USE_MPI)
-        target_include_directories(heatRead_adios1 PRIVATE ${MPI_C_INCLUDE_PATH})
-        target_link_libraries(heatRead_adios1  adios1::adios ${MPI_C_LIBRARIES})
-    else(ADIOS_USE_MPI) 
-        target_compile_definitions(heatRead_adios1 PRIVATE -D_NOMPI)
-        target_link_libraries(heatRead_adios1 adios1::adios)
+    find_package(MPI COMPONENTS C REQUIRED)
+
+    add_executable(headTransfer_read_adios1 heatRead_adios1.cpp PrintData.cpp)
+    target_include_directories(headTransfer_read_adios1
+      PRIVATE ${MPI_C_INCLUDE_PATH}
+    )
+    target_link_libraries(headTransfer_read_adios1
+      adios1::adios ${MPI_C_LIBRARIES}
+    )
+
+    if(ADIOS_BUILD_TESTING)
+      add_test(
+        NAME Example::heatTransfer::read::adios1
+        COMMAND heatRead_adios1
+      )
     endif()
+  endif()
 endif()
 
diff --git a/examples/heatTransfer/read/heatRead_adios1.cpp b/examples/heatTransfer/read/heatRead_adios1.cpp
index d596d223efd8c5b11d06d42f0881ec85f15ffe34..bcedac6d5a84b700b9e7045eee1b222146b29341 100644
--- a/examples/heatTransfer/read/heatRead_adios1.cpp
+++ b/examples/heatTransfer/read/heatRead_adios1.cpp
@@ -1,7 +1,5 @@
 
-#define OMPI_SKIP_MPICXX 1 // workaround for OpenMPI forcing C++ bindings
 #include <mpi.h>
-#undef OMPI_SKIP_MPICXX
 
 #include "adios_read.h"
 #include <cstdint>
diff --git a/examples/heatTransfer/write/CMakeLists.txt b/examples/heatTransfer/write/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eb72a2af9bd234c09be42c8b00a69ffbca7114e4
--- /dev/null
+++ b/examples/heatTransfer/write/CMakeLists.txt
@@ -0,0 +1,51 @@
+#------------------------------------------------------------------------------#
+# Distributed under the OSI-approved Apache License, Version 2.0.  See
+# accompanying file Copyright.txt for details.
+#------------------------------------------------------------------------------#
+
+if(ADIOS_USE_MPI)
+  find_package(MPI COMPONENTS C REQUIRED)
+
+  add_executable(heatTransfer_write_adios2
+    main.cpp
+    HeatTransfer.cpp
+    Settings.cpp
+    IO_adios2.cpp
+  )
+  target_include_directories(heatTransfer_write_adios2
+    PRIVATE ${MPI_C_INCLUDE_PATH}
+  )
+  target_link_libraries(heatTransfer_write_adios2 adios2 ${MPI_C_LIBRARIES})
+
+  if(ADIOS_BUILD_TESTING)
+    add_test(
+      NAME Example::heatTransfer::write::adios2
+      COMMAND heatTransfer_write_adios2
+    )
+  endif()
+
+  if(ADIOS_USE_ADIOS1)
+    find_package(ADIOS1 REQUIRED)
+    find_package(MPI COMPONENTS C REQUIRED)
+
+    add_executable(heatTransfer_write_adios1
+      main.cpp
+      HeatTransfer.cpp
+      Settings.cpp
+      IO_adios1.cpp
+    )
+    target_include_directories(heatTransfer_write_adios1
+      PRIVATE ${MPI_C_INCLUDE_PATH}
+    )
+    target_link_libraries(heatTransfer_write_adios1
+      adios1::adios ${MPI_C_LIBRARIES}
+    )
+
+    if(ADIOS_BUILD_TESTING)
+      add_test(
+        NAME Example::heatTransfer::write::adios1
+        COMMAND heatTransfer_write_adios1
+      )
+    endif()
+  endif()
+endif()
diff --git a/examples/heatTransfer/HeatTransfer.cpp b/examples/heatTransfer/write/HeatTransfer.cpp
similarity index 100%
rename from examples/heatTransfer/HeatTransfer.cpp
rename to examples/heatTransfer/write/HeatTransfer.cpp
diff --git a/examples/heatTransfer/HeatTransfer.h b/examples/heatTransfer/write/HeatTransfer.h
similarity index 95%
rename from examples/heatTransfer/HeatTransfer.h
rename to examples/heatTransfer/write/HeatTransfer.h
index 5233d3f5f48fdbc200149b4423c9c3824a4006dc..a52acbb742ba6cd617bcd2b7f94e8ec760c13cb9 100644
--- a/examples/heatTransfer/HeatTransfer.h
+++ b/examples/heatTransfer/write/HeatTransfer.h
@@ -11,9 +11,7 @@
 #ifndef HEATTRANSFER_H_
 #define HEATTRANSFER_H_
 
-#define OMPI_SKIP_MPICXX 1 // workaround for OpenMPI forcing C++ bindings
 #include <mpi.h>
-#undef OMPI_SKIP_MPICXX
 
 #include <vector>
 
diff --git a/examples/heatTransfer/IO.h b/examples/heatTransfer/write/IO.h
similarity index 84%
rename from examples/heatTransfer/IO.h
rename to examples/heatTransfer/write/IO.h
index 0f774336f18e81cee951f4c5879f7733e2f21943..53caaf599fe4e1c2aac8f4cd58c216c7888adf6e 100644
--- a/examples/heatTransfer/IO.h
+++ b/examples/heatTransfer/write/IO.h
@@ -14,13 +14,10 @@
 #include "HeatTransfer.h"
 #include "Settings.h"
 
-#define OMPI_SKIP_MPICXX 1 // workaround for OpenMPI forcing C++ bindings
 #include <mpi.h>
-#undef OMPI_SKIP_MPICXX
 
 class IO
 {
-
 public:
     IO(const Settings &s, MPI_Comm comm);
     ~IO();
diff --git a/examples/heatTransfer/IO_adios1.cpp b/examples/heatTransfer/write/IO_adios1.cpp
similarity index 100%
rename from examples/heatTransfer/IO_adios1.cpp
rename to examples/heatTransfer/write/IO_adios1.cpp
diff --git a/examples/heatTransfer/IO_adios2.cpp b/examples/heatTransfer/write/IO_adios2.cpp
similarity index 100%
rename from examples/heatTransfer/IO_adios2.cpp
rename to examples/heatTransfer/write/IO_adios2.cpp
diff --git a/examples/heatTransfer/IO_ascii.cpp b/examples/heatTransfer/write/IO_ascii.cpp
similarity index 100%
rename from examples/heatTransfer/IO_ascii.cpp
rename to examples/heatTransfer/write/IO_ascii.cpp
diff --git a/examples/heatTransfer/IO_hdf5_a.cpp b/examples/heatTransfer/write/IO_hdf5_a.cpp
similarity index 100%
rename from examples/heatTransfer/IO_hdf5_a.cpp
rename to examples/heatTransfer/write/IO_hdf5_a.cpp
diff --git a/examples/heatTransfer/Settings.cpp b/examples/heatTransfer/write/Settings.cpp
similarity index 98%
rename from examples/heatTransfer/Settings.cpp
rename to examples/heatTransfer/write/Settings.cpp
index 4337a00a33f7b3865bceb1feeb569537f1e6271c..4922afd5fdf640d258c110a8b1f3adc38ef613f0 100644
--- a/examples/heatTransfer/Settings.cpp
+++ b/examples/heatTransfer/write/Settings.cpp
@@ -11,6 +11,8 @@
 #include <cstdlib>
 #include <errno.h>
 
+#include <stdexcept>
+
 #include "Settings.h"
 
 static unsigned int convertToUint(std::string varName, char *arg)
@@ -80,5 +82,3 @@ Settings::Settings(int argc, char *argv[], int rank, int nproc) : rank{rank}
     else
         rank_down = rank + npx;
 }
-
-Settings::~Settings() {}
diff --git a/examples/heatTransfer/Settings.h b/examples/heatTransfer/write/Settings.h
similarity index 98%
rename from examples/heatTransfer/Settings.h
rename to examples/heatTransfer/write/Settings.h
index 97e85ea310adcd55a2ccc10ca8333346461b3949..20f83f395ce322b97da39edfff0afdd121c2d9e5 100644
--- a/examples/heatTransfer/Settings.h
+++ b/examples/heatTransfer/write/Settings.h
@@ -11,7 +11,7 @@
 #ifndef SETTINGS_H_
 #define SETTINGS_H_
 
-#include <memory>
+#include <string>
 
 class Settings
 {
@@ -48,7 +48,6 @@ public:
     int rank_down;
 
     Settings(int argc, char *argv[], int rank, int nproc);
-    ~Settings();
 };
 
 #endif /* SETTINGS_H_ */
diff --git a/examples/heatTransfer/main.cpp b/examples/heatTransfer/write/main.cpp
similarity index 100%
rename from examples/heatTransfer/main.cpp
rename to examples/heatTransfer/write/main.cpp
diff --git a/include/engine/adios1/ADIOS1Reader.h b/include/engine/adios1/ADIOS1Reader.h
index 64566ec4edbdebda353e531560f2857ccbf7e45f..041887ba9150ea625da4dc92548188130e5067cb 100644
--- a/include/engine/adios1/ADIOS1Reader.h
+++ b/include/engine/adios1/ADIOS1Reader.h
@@ -23,10 +23,13 @@
 namespace adios
 {
 
-#ifdef ADIOS_NOMPI
+#ifndef ADIOS_HAVE_MPI
 #define _NOMPI 1
 #endif
 #include "adios_read_v2.h" // this is adios 1.x header file
+#ifndef ADIOS_HAVE_MPI
+#undef _NOMPI
+#endif
 
 class ADIOS1Reader : public Engine
 {
diff --git a/include/engine/adios1/ADIOS1Writer.h b/include/engine/adios1/ADIOS1Writer.h
index a8c114b28121aa9d23d3c179a2ddf70caae723cc..0a3ebff9b83bbb99e53d9d49196834c5944ddb06 100644
--- a/include/engine/adios1/ADIOS1Writer.h
+++ b/include/engine/adios1/ADIOS1Writer.h
@@ -18,11 +18,11 @@
 namespace adios
 {
 
-#ifdef ADIOS_NOMPI
+#ifndef ADIOS_HAVE_MPI
 #define _NOMPI
 #endif
 #include "adios.h" // this is adios 1.x header file
-#ifdef ADIOS_NOMPI
+#ifndef ADIOS_HAVE_MPI
 #undef _NOMPI
 #endif
 
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index d3340d88ae711916eb5b02d6fef3173c3533abf3..41db2ec29d4f6f633e55da15b7c8e55597b3660b 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -82,31 +82,3 @@ if(ADIOS_USE_MPI)
 else()
   target_sources(adios2 PRIVATE mpidummy.cpp)
 endif()
-
-if(ADIOS_USE_ADIOS1)
-  find_package(ADIOS1 REQUIRED)
-  target_sources(adios2 PRIVATE
-    engine/adios1/ADIOS1Reader.cpp
-    engine/adios1/ADIOS1Writer.cpp
-  )
-  target_compile_definitions(adios2 PRIVATE ADIOS_HAVE_ADIOS1)
-  target_link_libraries(adios2 PRIVATE adios1::adios)
-endif()
-
-if(ADIOS_USE_DataMan)
-  find_package(DataMan REQUIRED)
-  target_sources(adios2 PRIVATE
-    engine/dataman/DataManReader.cpp
-    engine/dataman/DataManWriter.cpp
-    transport/wan/MdtmMan.cpp
-  )
-  target_compile_definitions(adios2 PRIVATE ADIOS_HAVE_DATAMAN)
-  target_link_libraries(adios2 PRIVATE DataMan::DataMan)
-endif()
-
-if(ADIOS_USE_BZip2)
-  find_package(BZip2 REQUIRED)
-  target_sources(adios2 PRIVATE transform/BZip2.cpp)
-  target_compile_definitions(adios2 PRIVATE ADIOS_HAVE_BZIP2)
-  target_link_libraries(adios2 PRIVATE BZip2::BZip2)
-endif()