diff --git a/.clang-format b/.clang-format
index b684a9d53eb8568ec9dd9656cbeb954219932d55..93948cf8bf1dd1f382c635e8cb44f812db0170f4 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,5 +1,8 @@
 Language:  Cpp
 BasedOnStyle:  LLVM
 BreakBeforeBraces:  Allman
-IndentCaseLabels:  true
 ConstructorInitializerIndentWidth:  0
+IndentWidth: 4
+ContinuationIndentWidth: 4
+AccessModifierOffset: -4
+AlwaysBreakTemplateDeclarations:  true
diff --git a/bindings/python/include/ADIOSPy.h b/bindings/python/include/ADIOSPy.h
index 925e7f24455ae4ef605447ed5d551c1778f7c104..f6d6ebb742ce1144a2c93dbf1f2db41ee504392b 100644
--- a/bindings/python/include/ADIOSPy.h
+++ b/bindings/python/include/ADIOSPy.h
@@ -48,25 +48,25 @@ class ADIOSPy : public ADIOS
 {
 
 public:
-  ADIOSPy(MPI_Comm mpiComm, const bool debug);
-  ~ADIOSPy();
+    ADIOSPy(MPI_Comm mpiComm, const bool debug);
+    ~ADIOSPy();
 
-  void HelloMPI(); ///< says hello from rank/size for testing
+    void HelloMPI(); ///< says hello from rank/size for testing
 
-  VariablePy DefineVariablePy(const std::string name,
-                              const pyList localDimensionsPy = pyList(),
-                              const pyList globalDimensionsPy = pyList(),
-                              const pyList globalOffsetsPy = pyList());
+    VariablePy DefineVariablePy(const std::string name,
+                                const pyList localDimensionsPy = pyList(),
+                                const pyList globalDimensionsPy = pyList(),
+                                const pyList globalOffsetsPy = pyList());
 
-  MethodPy &DeclareMethodPy(const std::string methodName);
+    MethodPy &DeclareMethodPy(const std::string methodName);
 
-  EnginePy OpenPy(const std::string name, const std::string accessMode,
-                  const MethodPy &method, pyObject py_comm = pyObject());
+    EnginePy OpenPy(const std::string name, const std::string accessMode,
+                    const MethodPy &method, pyObject py_comm = pyObject());
 
-  void DefineVariableType(VariablePy &variablePy);
+    void DefineVariableType(VariablePy &variablePy);
 
 private:
-  std::set<std::string> m_VariablesPyNames;
+    std::set<std::string> m_VariablesPyNames;
 };
 
 } // end namespace
diff --git a/bindings/python/include/EnginePy.h b/bindings/python/include/EnginePy.h
index 8e4be5c15e44f4f4a2a100eb2f72042cb7b02dc4..29d65cb0042b3d28834d9061fd10b3fa095c63d5 100644
--- a/bindings/python/include/EnginePy.h
+++ b/bindings/python/include/EnginePy.h
@@ -42,39 +42,41 @@ class EnginePy
 {
 
 public:
-  EnginePy(ADIOSPy &adiosPy);
+    EnginePy(ADIOSPy &adiosPy);
 
-  ~EnginePy();
+    ~EnginePy();
 
-  std::shared_ptr<Engine> m_Engine;
+    std::shared_ptr<Engine> m_Engine;
 
-  void WritePy(VariablePy &variable, const pyArray &array);
+    void WritePy(VariablePy &variable, const pyArray &array);
 
-  void Advance();
+    void Advance();
 
-  void Close();
+    void Close();
 
-  void GetEngineType() const;
+    void GetEngineType() const;
 
 private:
-  ADIOSPy &m_ADIOSPy;
-  bool m_IsVariableTypeDefined = false;
-
-  template <class T> void DefineVariableInADIOS(VariablePy &variable)
-  {
-    auto &var = m_ADIOSPy.DefineVariable<T>(
-        variable.m_Name, variable.m_LocalDimensions,
-        variable.m_GlobalDimensions, variable.m_GlobalOffsets);
-    variable.m_VariablePtr = &var;
-    variable.m_IsVariableDefined = true;
-  }
-
-  template <class T>
-  void WriteVariableInADIOS(VariablePy &variable, const pyArray &array)
-  {
-    m_Engine->Write(*reinterpret_cast<Variable<T> *>(variable.m_VariablePtr),
-                    PyArrayToPointer<T>(array));
-  }
+    ADIOSPy &m_ADIOSPy;
+    bool m_IsVariableTypeDefined = false;
+
+    template <class T>
+    void DefineVariableInADIOS(VariablePy &variable)
+    {
+        auto &var = m_ADIOSPy.DefineVariable<T>(
+            variable.m_Name, variable.m_LocalDimensions,
+            variable.m_GlobalDimensions, variable.m_GlobalOffsets);
+        variable.m_VariablePtr = &var;
+        variable.m_IsVariableDefined = true;
+    }
+
+    template <class T>
+    void WriteVariableInADIOS(VariablePy &variable, const pyArray &array)
+    {
+        m_Engine->Write(
+            *reinterpret_cast<Variable<T> *>(variable.m_VariablePtr),
+            PyArrayToPointer<T>(array));
+    }
 };
 
 } // end namespace
diff --git a/bindings/python/include/MethodPy.h b/bindings/python/include/MethodPy.h
index 3ab8b003196b9443e0338ede51a25b34d4ddb3ed..5bdb9a3aa082aeccd2c5d254e0036e36e981066d 100644
--- a/bindings/python/include/MethodPy.h
+++ b/bindings/python/include/MethodPy.h
@@ -41,21 +41,21 @@ class MethodPy : public Method
 {
 
 public:
-  MethodPy(const std::string type, const bool debugMode);
+    MethodPy(const std::string type, const bool debugMode);
 
-  ~MethodPy();
+    ~MethodPy();
 
 #ifdef HAVE_BOOSTPYTHON
-  static pyObject SetParametersPy(pyTuple args, pyDict kwargs);
-  static pyObject AddTransportPy(pyTuple args, pyDict kwargs);
+    static pyObject SetParametersPy(pyTuple args, pyDict kwargs);
+    static pyObject AddTransportPy(pyTuple args, pyDict kwargs);
 #endif
 
 #ifdef HAVE_PYBIND11
-  void SetParametersPyBind11(pybind11::kwargs kwargs);
-  void AddTransportPyBind11(const std::string type, pybind11::kwargs kwargs);
+    void SetParametersPyBind11(pybind11::kwargs kwargs);
+    void AddTransportPyBind11(const std::string type, pybind11::kwargs kwargs);
 #endif
 
-  void PrintAll() const;
+    void PrintAll() const;
 };
 }
 
diff --git a/bindings/python/include/VariablePy.h b/bindings/python/include/VariablePy.h
index 8d843bae20b5a0a2a4c36f230ebe38a809a8659b..91b71be593dac143c5505111ac525aa4e2f5cc69 100644
--- a/bindings/python/include/VariablePy.h
+++ b/bindings/python/include/VariablePy.h
@@ -29,25 +29,25 @@ class VariablePy
 {
 
 public:
-  VariablePy(const std::string name, const pyList localDimensionsPy,
-             const pyList globalDimensionsPy, const pyList globalOffsetsPy);
+    VariablePy(const std::string name, const pyList localDimensionsPy,
+               const pyList globalDimensionsPy, const pyList globalOffsetsPy);
 
-  ~VariablePy();
+    ~VariablePy();
 
-  void SetLocalDimensions(const pyList list);
+    void SetLocalDimensions(const pyList list);
 
-  void SetGlobalDimensionsAndOffsets(const pyList globalDimensions,
-                                     const pyList globalOffsets);
+    void SetGlobalDimensionsAndOffsets(const pyList globalDimensions,
+                                       const pyList globalOffsets);
 
-  Dims GetLocalDimensions();
+    Dims GetLocalDimensions();
 
-  void *m_VariablePtr = nullptr;
-  bool m_IsVariableDefined = false;
+    void *m_VariablePtr = nullptr;
+    bool m_IsVariableDefined = false;
 
-  const std::string m_Name;
-  Dims m_LocalDimensions;
-  Dims m_GlobalDimensions;
-  Dims m_GlobalOffsets;
+    const std::string m_Name;
+    Dims m_LocalDimensions;
+    Dims m_GlobalDimensions;
+    Dims m_GlobalOffsets;
 };
 
 } // end namespace
diff --git a/bindings/python/include/adiosPyFunctions.h b/bindings/python/include/adiosPyFunctions.h
index e64a798b4a6513679b195437c053dc6cf4da3689..b47e02d7b4e1c8b656b22a6b4f21a993c0dc0098 100644
--- a/bindings/python/include/adiosPyFunctions.h
+++ b/bindings/python/include/adiosPyFunctions.h
@@ -64,40 +64,43 @@ std::map<std::string, std::string>
 KwargsToMap(const pybind11::kwargs &dictionary);
 #endif
 
-template <class T> const T *PyArrayToPointer(const pyArray &array)
+template <class T>
+const T *PyArrayToPointer(const pyArray &array)
 {
 #ifdef HAVE_BOOSTPYTHON
-  return reinterpret_cast<const T *>(array.get_data());
+    return reinterpret_cast<const T *>(array.get_data());
 #endif
 
 #ifdef HAVE_PYBIND11
-  return reinterpret_cast<const T *>(array.data());
+    return reinterpret_cast<const T *>(array.data());
 #endif
 }
 
-template <class T> bool IsType(const pyArray &array)
+template <class T>
+bool IsType(const pyArray &array)
 {
 #ifdef HAVE_BOOSTPYTHON
-  if (array.get_dtype() == dtype::get_builtin<T>())
-    return true;
+    if (array.get_dtype() == dtype::get_builtin<T>())
+        return true;
 #endif
 
 #ifdef HAVE_PYBIND11
-  if (pybind11::isinstance<pybind11::array_t<T>>(array))
-    return true;
+    if (pybind11::isinstance<pybind11::array_t<T>>(array))
+        return true;
 #endif
 
-  return false;
+    return false;
 }
 
-template <class T, class U> T PyCast(U object)
+template <class T, class U>
+T PyCast(U object)
 {
 #ifdef HAVE_BOOSTPYTHON
-  return boost::python::extract<T>(object);
+    return boost::python::extract<T>(object);
 #endif
 
 #ifdef HAVE_PYBIND11
-  return pybind11::cast<T>(object);
+    return pybind11::cast<T>(object);
 #endif
 }
 
diff --git a/bindings/python/src/ADIOSPy.cpp b/bindings/python/src/ADIOSPy.cpp
index e8dd0e0a0f22df439ab850348156566717272649..6e45ce3970e59404c5b979b20418cd2f71e50141 100644
--- a/bindings/python/src/ADIOSPy.cpp
+++ b/bindings/python/src/ADIOSPy.cpp
@@ -27,14 +27,14 @@ ADIOSPy::~ADIOSPy() {}
 
 void ADIOSPy::HelloMPI()
 {
-  std::cout << "Hello ADIOSPy from rank " << m_RankMPI << "/" << m_SizeMPI
-            << "\n";
+    std::cout << "Hello ADIOSPy from rank " << m_RankMPI << "/" << m_SizeMPI
+              << "\n";
 }
 
 MethodPy &ADIOSPy::DeclareMethodPy(const std::string methodName)
 {
-  Method &method = DeclareMethod(methodName);
-  return *reinterpret_cast<MethodPy *>(&method);
+    Method &method = DeclareMethod(methodName);
+    return *reinterpret_cast<MethodPy *>(&method);
 }
 
 VariablePy ADIOSPy::DefineVariablePy(const std::string name,
@@ -42,16 +42,16 @@ VariablePy ADIOSPy::DefineVariablePy(const std::string name,
                                      const pyList globalDimensionsPy,
                                      const pyList globalOffsetsPy)
 {
-  if (m_DebugMode == true)
-  {
-    if (m_VariablesPyNames.count(name) == 1)
-      throw std::invalid_argument("ERROR: Variable " + name +
-                                  " is already defined\n");
-  }
-
-  m_VariablesPyNames.insert(name);
-  return VariablePy(name, localDimensionsPy, globalDimensionsPy,
-                    globalOffsetsPy);
+    if (m_DebugMode == true)
+    {
+        if (m_VariablesPyNames.count(name) == 1)
+            throw std::invalid_argument("ERROR: Variable " + name +
+                                        " is already defined\n");
+    }
+
+    m_VariablesPyNames.insert(name);
+    return VariablePy(name, localDimensionsPy, globalDimensionsPy,
+                      globalOffsetsPy);
 }
 
 void ADIOSPy::DefineVariableType(VariablePy &variablePy) {}
@@ -59,28 +59,29 @@ void ADIOSPy::DefineVariableType(VariablePy &variablePy) {}
 EnginePy ADIOSPy::OpenPy(const std::string name, const std::string accessMode,
                          const MethodPy &method, pyObject py_comm)
 {
-  EnginePy enginePy(*this);
-
-  bool isEmpty = IsEmpty(py_comm);
-
-  if (isEmpty == true) // None
-  {
-    enginePy.m_Engine = Open(name, accessMode, method);
-  }
-  else
-  {
-    if (import_mpi4py() < 0)
-      throw std::logic_error(
-          "ERROR: could not import mpi4py communicator in Open " + name + "\n");
-    MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
-    if (comm_p == nullptr)
-      throw std::invalid_argument(
-          "ERROR: MPI communicator is nullptr in Open " + name + "\n");
-
-    enginePy.m_Engine = Open(name, accessMode, *comm_p, method);
-  }
-
-  return enginePy;
+    EnginePy enginePy(*this);
+
+    bool isEmpty = IsEmpty(py_comm);
+
+    if (isEmpty == true) // None
+    {
+        enginePy.m_Engine = Open(name, accessMode, method);
+    }
+    else
+    {
+        if (import_mpi4py() < 0)
+            throw std::logic_error(
+                "ERROR: could not import mpi4py communicator in Open " + name +
+                "\n");
+        MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
+        if (comm_p == nullptr)
+            throw std::invalid_argument(
+                "ERROR: MPI communicator is nullptr in Open " + name + "\n");
+
+        enginePy.m_Engine = Open(name, accessMode, *comm_p, method);
+    }
+
+    return enginePy;
 }
 
 } // end namespace
diff --git a/bindings/python/src/EnginePy.cpp b/bindings/python/src/EnginePy.cpp
index 581d0580d98c74700c908a30491d5f41b3272287..20826731f42d8916a8be02d01eadd123df6005dd 100644
--- a/bindings/python/src/EnginePy.cpp
+++ b/bindings/python/src/EnginePy.cpp
@@ -24,74 +24,74 @@ EnginePy::~EnginePy() {}
 void EnginePy::WritePy(VariablePy &variable, const pyArray &array)
 {
 
-  if (variable.m_IsVariableDefined == false) // here define variable
-  {
+    if (variable.m_IsVariableDefined == false) // here define variable
+    {
+        if (IsType<char>(array))
+            DefineVariableInADIOS<char>(variable);
+        else if (IsType<unsigned char>(array))
+            DefineVariableInADIOS<unsigned char>(variable);
+        else if (IsType<short>(array))
+            DefineVariableInADIOS<short>(variable);
+        else if (IsType<unsigned short>(array))
+            DefineVariableInADIOS<unsigned short>(variable);
+        else if (IsType<int>(array))
+            DefineVariableInADIOS<int>(variable);
+        else if (IsType<unsigned int>(array))
+            DefineVariableInADIOS<unsigned int>(variable);
+        else if (IsType<long int>(array))
+            DefineVariableInADIOS<long int>(variable);
+        else if (IsType<unsigned long int>(array))
+            DefineVariableInADIOS<unsigned long int>(variable);
+        else if (IsType<long long int>(array))
+            DefineVariableInADIOS<long long int>(variable);
+        else if (IsType<unsigned long long int>(array))
+            DefineVariableInADIOS<unsigned long long int>(variable);
+        else if (IsType<float>(array))
+            DefineVariableInADIOS<float>(variable);
+        else if (IsType<double>(array))
+            DefineVariableInADIOS<double>(variable);
+        else if (IsType<long double>(array))
+            DefineVariableInADIOS<long double>(variable);
+        else if (IsType<std::complex<float>>(array))
+            DefineVariableInADIOS<std::complex<float>>(variable);
+        else if (IsType<std::complex<double>>(array))
+            DefineVariableInADIOS<std::complex<double>>(variable);
+        else if (IsType<std::complex<long double>>(array))
+            DefineVariableInADIOS<std::complex<long double>>(variable);
+    }
+
     if (IsType<char>(array))
-      DefineVariableInADIOS<char>(variable);
+        WriteVariableInADIOS<char>(variable, array);
     else if (IsType<unsigned char>(array))
-      DefineVariableInADIOS<unsigned char>(variable);
+        WriteVariableInADIOS<unsigned char>(variable, array);
     else if (IsType<short>(array))
-      DefineVariableInADIOS<short>(variable);
+        WriteVariableInADIOS<short>(variable, array);
     else if (IsType<unsigned short>(array))
-      DefineVariableInADIOS<unsigned short>(variable);
+        WriteVariableInADIOS<unsigned short>(variable, array);
     else if (IsType<int>(array))
-      DefineVariableInADIOS<int>(variable);
+        WriteVariableInADIOS<int>(variable, array);
     else if (IsType<unsigned int>(array))
-      DefineVariableInADIOS<unsigned int>(variable);
+        WriteVariableInADIOS<unsigned int>(variable, array);
     else if (IsType<long int>(array))
-      DefineVariableInADIOS<long int>(variable);
+        WriteVariableInADIOS<long int>(variable, array);
     else if (IsType<unsigned long int>(array))
-      DefineVariableInADIOS<unsigned long int>(variable);
+        WriteVariableInADIOS<unsigned long int>(variable, array);
     else if (IsType<long long int>(array))
-      DefineVariableInADIOS<long long int>(variable);
+        WriteVariableInADIOS<long long int>(variable, array);
     else if (IsType<unsigned long long int>(array))
-      DefineVariableInADIOS<unsigned long long int>(variable);
+        WriteVariableInADIOS<unsigned long long int>(variable, array);
     else if (IsType<float>(array))
-      DefineVariableInADIOS<float>(variable);
+        WriteVariableInADIOS<float>(variable, array);
     else if (IsType<double>(array))
-      DefineVariableInADIOS<double>(variable);
+        WriteVariableInADIOS<double>(variable, array);
     else if (IsType<long double>(array))
-      DefineVariableInADIOS<long double>(variable);
+        WriteVariableInADIOS<long double>(variable, array);
     else if (IsType<std::complex<float>>(array))
-      DefineVariableInADIOS<std::complex<float>>(variable);
+        WriteVariableInADIOS<std::complex<float>>(variable, array);
     else if (IsType<std::complex<double>>(array))
-      DefineVariableInADIOS<std::complex<double>>(variable);
+        WriteVariableInADIOS<std::complex<double>>(variable, array);
     else if (IsType<std::complex<long double>>(array))
-      DefineVariableInADIOS<std::complex<long double>>(variable);
-  }
-
-  if (IsType<char>(array))
-    WriteVariableInADIOS<char>(variable, array);
-  else if (IsType<unsigned char>(array))
-    WriteVariableInADIOS<unsigned char>(variable, array);
-  else if (IsType<short>(array))
-    WriteVariableInADIOS<short>(variable, array);
-  else if (IsType<unsigned short>(array))
-    WriteVariableInADIOS<unsigned short>(variable, array);
-  else if (IsType<int>(array))
-    WriteVariableInADIOS<int>(variable, array);
-  else if (IsType<unsigned int>(array))
-    WriteVariableInADIOS<unsigned int>(variable, array);
-  else if (IsType<long int>(array))
-    WriteVariableInADIOS<long int>(variable, array);
-  else if (IsType<unsigned long int>(array))
-    WriteVariableInADIOS<unsigned long int>(variable, array);
-  else if (IsType<long long int>(array))
-    WriteVariableInADIOS<long long int>(variable, array);
-  else if (IsType<unsigned long long int>(array))
-    WriteVariableInADIOS<unsigned long long int>(variable, array);
-  else if (IsType<float>(array))
-    WriteVariableInADIOS<float>(variable, array);
-  else if (IsType<double>(array))
-    WriteVariableInADIOS<double>(variable, array);
-  else if (IsType<long double>(array))
-    WriteVariableInADIOS<long double>(variable, array);
-  else if (IsType<std::complex<float>>(array))
-    WriteVariableInADIOS<std::complex<float>>(variable, array);
-  else if (IsType<std::complex<double>>(array))
-    WriteVariableInADIOS<std::complex<double>>(variable, array);
-  else if (IsType<std::complex<long double>>(array))
-    WriteVariableInADIOS<std::complex<long double>>(variable, array);
+        WriteVariableInADIOS<std::complex<long double>>(variable, array);
 }
 
 void EnginePy::Advance() { m_Engine->Advance(); }
@@ -100,7 +100,7 @@ void EnginePy::Close() { m_Engine->Close(-1); }
 
 void EnginePy::GetEngineType() const
 {
-  std::cout << "Engine type " << m_Engine->m_EngineType << "\n";
+    std::cout << "Engine type " << m_Engine->m_EngineType << "\n";
 }
 
 } // end namespace
diff --git a/bindings/python/src/MethodPy.cpp b/bindings/python/src/MethodPy.cpp
index 4310de6739be79c1495574d36e54e0229af0fa34..937df58fb72a55456b0f65b6e0be0c0820994793 100644
--- a/bindings/python/src/MethodPy.cpp
+++ b/bindings/python/src/MethodPy.cpp
@@ -34,66 +34,68 @@ MethodPy::~MethodPy() {}
 #ifdef HAVE_BOOSTPYTHON
 pyObject MethodPy::SetParametersPy(pyTuple args, pyDict kwargs)
 {
-  if (py::len(args) > 1)
-    throw std::invalid_argument("ERROR: syntax of Method SetParameters "
-                                "function is incorrect, only use dictionary\n");
-
-  MethodPy &self = PyCast<MethodPy &>(args[0]);
-  self.m_Parameters = DictToMap(kwargs);
-  return args[0];
+    if (py::len(args) > 1)
+        throw std::invalid_argument(
+            "ERROR: syntax of Method SetParameters "
+            "function is incorrect, only use dictionary\n");
+
+    MethodPy &self = PyCast<MethodPy &>(args[0]);
+    self.m_Parameters = DictToMap(kwargs);
+    return args[0];
 }
 
 pyObject MethodPy::AddTransportPy(pyTuple args, pyDict kwargs)
 {
-  if (py::len(args) != 2)
-    throw std::invalid_argument(
-        "ERROR: syntax of Method AddTransport function is incorrect, only use "
-        "one string for transport followed by a dictionary for parameters\n");
-
-  MethodPy &self = PyCast<MethodPy &>(args[0]);
-  const std::string type = PyCast<std::string>(args[1]);
-
-  auto parameters = DictToMap(kwargs);
-  parameters.insert(std::make_pair("transport", type));
-  self.m_TransportParameters.push_back(parameters);
-  return args[0];
+    if (py::len(args) != 2)
+        throw std::invalid_argument("ERROR: syntax of Method AddTransport "
+                                    "function is incorrect, only use "
+                                    "one string for transport followed by a "
+                                    "dictionary for parameters\n");
+
+    MethodPy &self = PyCast<MethodPy &>(args[0]);
+    const std::string type = PyCast<std::string>(args[1]);
+
+    auto parameters = DictToMap(kwargs);
+    parameters.insert(std::make_pair("transport", type));
+    self.m_TransportParameters.push_back(parameters);
+    return args[0];
 }
 #endif
 
 #ifdef HAVE_PYBIND11
 void MethodPy::SetParametersPyBind11(pybind11::kwargs kwargs)
 {
-  this->m_Parameters = KwargsToMap(kwargs);
+    this->m_Parameters = KwargsToMap(kwargs);
 }
 
 void MethodPy::AddTransportPyBind11(const std::string type,
                                     pybind11::kwargs kwargs)
 {
-  auto parameters = KwargsToMap(kwargs);
-  parameters.insert(std::make_pair("transport", type));
-  this->m_TransportParameters.push_back(parameters);
+    auto parameters = KwargsToMap(kwargs);
+    parameters.insert(std::make_pair("transport", type));
+    this->m_TransportParameters.push_back(parameters);
 }
 #endif
 
 void MethodPy::PrintAll() const
 {
-  std::cout << "Method parameters\n";
-  for (const auto &param : m_Parameters)
-    std::cout << "Parameter: " << param.first << "\t Value: " << param.second
-              << "\n";
+    std::cout << "Method parameters\n";
+    for (const auto &param : m_Parameters)
+        std::cout << "Parameter: " << param.first
+                  << "\t Value: " << param.second << "\n";
 
-  std::cout << "\n";
-  std::cout << "Transport Parameters\n";
+    std::cout << "\n";
+    std::cout << "Transport Parameters\n";
 
-  for (const auto &transportParameters : m_TransportParameters)
-  {
-    std::cout << "Transport:\n";
-    for (const auto &param : transportParameters)
-      std::cout << "Parameter: " << param.first << "\t Value: " << param.second
-                << "\n";
+    for (const auto &transportParameters : m_TransportParameters)
+    {
+        std::cout << "Transport:\n";
+        for (const auto &param : transportParameters)
+            std::cout << "Parameter: " << param.first
+                      << "\t Value: " << param.second << "\n";
 
-    std::cout << "\n";
-  }
+        std::cout << "\n";
+    }
 }
 
 } // end namespace
diff --git a/bindings/python/src/VariablePy.cpp b/bindings/python/src/VariablePy.cpp
index 7d677d567e1f3a645490300d5bbf90a3fc744117..09d92899e844848a723284f2900b5c6f48ad7076 100644
--- a/bindings/python/src/VariablePy.cpp
+++ b/bindings/python/src/VariablePy.cpp
@@ -26,14 +26,14 @@ VariablePy::~VariablePy() {}
 
 void VariablePy::SetLocalDimensions(const pyList list)
 {
-  //      this->m_Dimensions = ListToVector( list );
+    //      this->m_Dimensions = ListToVector( list );
 }
 
 void VariablePy::SetGlobalDimensionsAndOffsets(const pyList globalDimensions,
                                                const pyList globalOffsets)
 {
-  //        this->m_GlobalDimensions = ListToVector( globalDimensions );
-  //        this->m_GlobalOffsets = ListToVector( globalOffsets );
+    //        this->m_GlobalDimensions = ListToVector( globalDimensions );
+    //        this->m_GlobalOffsets = ListToVector( globalOffsets );
 }
 
 Dims VariablePy::GetLocalDimensions() { return this->m_LocalDimensions; }
diff --git a/bindings/python/src/adiosPyFunctions.cpp b/bindings/python/src/adiosPyFunctions.cpp
index 778134179a353f2ba64b2552c24866c8fd199170..92d18b4c0dfe0fe37e959fb4eccafc10632f869f 100644
--- a/bindings/python/src/adiosPyFunctions.cpp
+++ b/bindings/python/src/adiosPyFunctions.cpp
@@ -24,64 +24,64 @@ namespace py = pybind11;
 
 Dims ListToVector(const pyList &list)
 {
-  const unsigned int length = py::len(list);
-  Dims vec;
-  vec.reserve(length);
+    const unsigned int length = py::len(list);
+    Dims vec;
+    vec.reserve(length);
 
-  for (unsigned int i = 0; i < length; i++)
-    vec.push_back(PyCast<std::size_t>(list[i]));
+    for (unsigned int i = 0; i < length; i++)
+        vec.push_back(PyCast<std::size_t>(list[i]));
 
-  return vec;
+    return vec;
 }
 
 #ifdef HAVE_BOOSTPYTHON
 std::map<std::string, std::string> DictToMap(const pyDict &dictionary)
 {
-  std::map<std::string, std::string> parameters;
+    std::map<std::string, std::string> parameters;
 
-  pyList keys = dictionary.keys();
-  const unsigned int length = py::len(keys);
+    pyList keys = dictionary.keys();
+    const unsigned int length = py::len(keys);
 
-  for (unsigned int k = 0; k < length; ++k)
-  {
-    const std::string key(PyCast<std::string>(keys[k]));
-    const std::string value(PyCast<std::string>(dictionary[keys[k]]));
-    parameters.insert(std::make_pair(key, value));
-  }
+    for (unsigned int k = 0; k < length; ++k)
+    {
+        const std::string key(PyCast<std::string>(keys[k]));
+        const std::string value(PyCast<std::string>(dictionary[keys[k]]));
+        parameters.insert(std::make_pair(key, value));
+    }
 
-  return parameters;
+    return parameters;
 }
 #endif
 
 #ifdef HAVE_PYBIND11
 std::map<std::string, std::string> KwargsToMap(const pybind11::kwargs &kwargs)
 {
-  std::map<std::string, std::string> parameters;
-
-  for (const auto &pair : kwargs)
-  {
-    const std::string key(PyCast<std::string>(pair.first));
-    const std::string value(PyCast<std::string>(pair.second));
-    parameters.insert(std::make_pair(key, value));
-  }
-  return parameters;
+    std::map<std::string, std::string> parameters;
+
+    for (const auto &pair : kwargs)
+    {
+        const std::string key(PyCast<std::string>(pair.first));
+        const std::string value(PyCast<std::string>(pair.second));
+        parameters.insert(std::make_pair(key, value));
+    }
+    return parameters;
 }
 #endif
 
 bool IsEmpty(pyObject object)
 {
-  bool isEmpty = false;
+    bool isEmpty = false;
 
 #ifdef HAVE_BOOSTPYTHON
-  if (object == boost::python::object())
-    isEmpty = true;
+    if (object == boost::python::object())
+        isEmpty = true;
 #endif
 
 #ifdef HAVE_PYBIND11
-  if (object == pybind11::none())
-    isEmpty = true;
+    if (object == pybind11::none())
+        isEmpty = true;
 #endif
-  return isEmpty;
+    return isEmpty;
 }
 
 } // end namespace
diff --git a/bindings/python/src/glueBoostPython.cpp b/bindings/python/src/glueBoostPython.cpp
index 532cec900ed71e7c16266e4974f5e36cf65c81c1..1718700b47dbcfa66a29524b7a437a6aae3eedb4 100644
--- a/bindings/python/src/glueBoostPython.cpp
+++ b/bindings/python/src/glueBoostPython.cpp
@@ -24,10 +24,10 @@ namespace np = boost::python::numpy;
 
 adios::ADIOSPy ADIOSPy(py::object py_comm, const bool debug)
 {
-  MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
-  if (comm_p == NULL)
-    py::throw_error_already_set();
-  return adios::ADIOSPy(*comm_p, debug);
+    MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
+    if (comm_p == NULL)
+        py::throw_error_already_set();
+    return adios::ADIOSPy(*comm_p, debug);
 }
 
 using ReturnInternalReference = py::return_internal_reference<>;
@@ -36,39 +36,39 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(open_overloads, adios::ADIOSPy::OpenPy,
 
 BOOST_PYTHON_MODULE(ADIOSPy)
 {
-  if (import_mpi4py() < 0)
-    return; /* Python 2.X */
+    if (import_mpi4py() < 0)
+        return; /* Python 2.X */
 
-  Py_Initialize();
-  np::initialize();
+    Py_Initialize();
+    np::initialize();
 
-  py::class_<adios::Dims>("Dims").def(
-      boost::python::vector_indexing_suite<adios::Dims>());
-  // functions
-  py::def("ADIOSPy", ADIOSPy);
+    py::class_<adios::Dims>("Dims").def(
+        boost::python::vector_indexing_suite<adios::Dims>());
+    // functions
+    py::def("ADIOSPy", ADIOSPy);
 
-  // classes
-  py::class_<adios::ADIOSPy>("ADIOS", py::no_init)
-      .def("HelloMPI", &adios::ADIOSPy::HelloMPI)
-      .def("DefineVariable", &adios::ADIOSPy::DefineVariablePy)
-      .def("DeclareMethod", &adios::ADIOSPy::DeclareMethodPy,
-           ReturnInternalReference())
-      .def("Open", &adios::ADIOSPy::OpenPy, open_overloads());
+    // classes
+    py::class_<adios::ADIOSPy>("ADIOS", py::no_init)
+        .def("HelloMPI", &adios::ADIOSPy::HelloMPI)
+        .def("DefineVariable", &adios::ADIOSPy::DefineVariablePy)
+        .def("DeclareMethod", &adios::ADIOSPy::DeclareMethodPy,
+             ReturnInternalReference())
+        .def("Open", &adios::ADIOSPy::OpenPy, open_overloads());
 
-  py::class_<adios::VariablePy>("Variable", py::no_init)
-      .def("SetLocalDimensions", &adios::VariablePy::SetLocalDimensions)
-      .def("GetLocalDimensions", &adios::VariablePy::GetLocalDimensions);
+    py::class_<adios::VariablePy>("Variable", py::no_init)
+        .def("SetLocalDimensions", &adios::VariablePy::SetLocalDimensions)
+        .def("GetLocalDimensions", &adios::VariablePy::GetLocalDimensions);
 
-  py::class_<adios::MethodPy>("Method", py::no_init)
-      .def("SetParameters",
-           py::raw_function(&adios::MethodPy::SetParametersPy, 1))
-      .def("AddTransport",
-           py::raw_function(&adios::MethodPy::AddTransportPy, 1))
-      .def("PrintAll", &adios::MethodPy::PrintAll);
+    py::class_<adios::MethodPy>("Method", py::no_init)
+        .def("SetParameters",
+             py::raw_function(&adios::MethodPy::SetParametersPy, 1))
+        .def("AddTransport",
+             py::raw_function(&adios::MethodPy::AddTransportPy, 1))
+        .def("PrintAll", &adios::MethodPy::PrintAll);
 
-  // Engine
-  py::class_<adios::EnginePy>("EnginePy", py::no_init)
-      .def("Write", &adios::EnginePy::WritePy)
-      .def("Advance", &adios::EnginePy::WritePy)
-      .def("Close", &adios::EnginePy::Close);
+    // Engine
+    py::class_<adios::EnginePy>("EnginePy", py::no_init)
+        .def("Write", &adios::EnginePy::WritePy)
+        .def("Advance", &adios::EnginePy::WritePy)
+        .def("Close", &adios::EnginePy::Close);
 }
diff --git a/bindings/python/src/gluePyBind11.cpp b/bindings/python/src/gluePyBind11.cpp
index cd3cc32f700a07d853eb479e53c21d4b10a4228c..dd76c295c061c1b7ae81d776612de46d8412b821 100644
--- a/bindings/python/src/gluePyBind11.cpp
+++ b/bindings/python/src/gluePyBind11.cpp
@@ -21,43 +21,43 @@ namespace py = pybind11;
 
 adios::ADIOSPy ADIOSPy(py::object py_comm, const bool debug)
 {
-  MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
-  if (comm_p == NULL)
-    py::error_already_set();
-  return adios::ADIOSPy(*comm_p, debug);
+    MPI_Comm *comm_p = PyMPIComm_Get(py_comm.ptr());
+    if (comm_p == NULL)
+        py::error_already_set();
+    return adios::ADIOSPy(*comm_p, debug);
 }
 
 PYBIND11_PLUGIN(ADIOSPy)
 {
-  if (import_mpi4py() < 0)
-    throw std::runtime_error(
-        "ERROR: mpi4py not loaded correctly\n"); /* Python 2.X */
+    if (import_mpi4py() < 0)
+        throw std::runtime_error(
+            "ERROR: mpi4py not loaded correctly\n"); /* Python 2.X */
 
-  py::module m("ADIOSPy", "ADIOS Python bindings using pybind11");
+    py::module m("ADIOSPy", "ADIOS Python bindings using pybind11");
 
-  m.def("ADIOSPy", &ADIOSPy, "Function that creates an ADIOS object");
+    m.def("ADIOSPy", &ADIOSPy, "Function that creates an ADIOS object");
 
-  py::class_<adios::ADIOSPy>(m, "ADIOS")
-      .def("HelloMPI", &adios::ADIOSPy::HelloMPI)
-      .def("DefineVariable", &adios::ADIOSPy::DefineVariablePy)
-      .def("DeclareMethod", &adios::ADIOSPy::DeclareMethodPy,
-           py::return_value_policy::reference_internal)
-      .def("Open", &adios::ADIOSPy::OpenPy);
+    py::class_<adios::ADIOSPy>(m, "ADIOS")
+        .def("HelloMPI", &adios::ADIOSPy::HelloMPI)
+        .def("DefineVariable", &adios::ADIOSPy::DefineVariablePy)
+        .def("DeclareMethod", &adios::ADIOSPy::DeclareMethodPy,
+             py::return_value_policy::reference_internal)
+        .def("Open", &adios::ADIOSPy::OpenPy);
 
-  py::class_<adios::VariablePy>(m, "Variable")
-      .def("SetLocalDimensions", &adios::VariablePy::SetLocalDimensions)
-      .def("GetLocalDimensions", &adios::VariablePy::GetLocalDimensions);
+    py::class_<adios::VariablePy>(m, "Variable")
+        .def("SetLocalDimensions", &adios::VariablePy::SetLocalDimensions)
+        .def("GetLocalDimensions", &adios::VariablePy::GetLocalDimensions);
 
-  py::class_<adios::MethodPy>(m, "Method")
-      .def("SetParameters", &adios::MethodPy::SetParametersPyBind11)
-      .def("AddTransport", &adios::MethodPy::AddTransportPyBind11)
-      .def("PrintAll", &adios::MethodPy::PrintAll);
+    py::class_<adios::MethodPy>(m, "Method")
+        .def("SetParameters", &adios::MethodPy::SetParametersPyBind11)
+        .def("AddTransport", &adios::MethodPy::AddTransportPyBind11)
+        .def("PrintAll", &adios::MethodPy::PrintAll);
 
-  // Engine
-  py::class_<adios::EnginePy>(m, "Engine")
-      .def("Write", &adios::EnginePy::WritePy)
-      .def("Advance", &adios::EnginePy::WritePy)
-      .def("Close", &adios::EnginePy::Close);
+    // Engine
+    py::class_<adios::EnginePy>(m, "Engine")
+        .def("Write", &adios::EnginePy::WritePy)
+        .def("Advance", &adios::EnginePy::WritePy)
+        .def("Close", &adios::EnginePy::Close);
 
-  return m.ptr();
+    return m.ptr();
 }
diff --git a/doc/API_design/API_example_use.cpp b/doc/API_design/API_example_use.cpp
index af3fbdbdd7e5db586166bc696f40b3ac9df9cadd..a35146935cf564dea610accee6ad67efdfbe6ce6 100644
--- a/doc/API_design/API_example_use.cpp
+++ b/doc/API_design/API_example_use.cpp
@@ -6,428 +6,458 @@
 
 void cb_AsyncWriteAdvanceCompleted(std::shared_ptr<adios::Engine> writer)
 {
-  std::cout
-      << "AdvanceAsync() completed. We can modify our zero-copy variables\n";
+    std::cout << "AdvanceAsync() completed. We can modify our zero-copy "
+                 "variables\n";
 }
 
 void cb_AsyncReadAdvanceCompleted(std::shared_ptr<adios::Engine> writer)
 {
-  std::cout << "AdvanceAsync() completed. We have new data to read and we have "
-               "the lock on it\n";
+    std::cout
+        << "AdvanceAsync() completed. We have new data to read and we have "
+           "the lock on it\n";
 }
 
 int main(int argc, char *argv[])
 {
-  // Application variables
-  MPI_Comm comm = MPI_COMM_WORLD;
-  const unsigned int NX = 10;
-  double Temperature[1][NX + 2]; // We will want to write only Nx elements,
-                                 // skipping the first and last (think ghost
-                                 // cells)
-  std::vector<float> RaggedArray;
-
-  int Nparts, nproc;
-
-  // Global class/object that serves for init, finalize and provides ADIOS
-  // functions
-  adios::ADIOS adios("config.xml", comm, /*verbose=*/adios::INFO,
-                     /*debugflag=*/false);
-
-  /*************
-   * WRITE API
-   *************/
-
-  /* Method
-   * We associate Engines and Transports and user settings into an object called
-   * Method.
-   * ADIOS checks if it is defined by the user in the config file, and fills it
-   * out if it is.
-   */
-
-  adios::Method &wmethod = adios.DeclareMethod("WriteMethod");
-  if (!wmethod.isUserDefined())
-  {
-    // if not defined by user, we can change the default settings
-    wmethod.SetEngine("BP"); // BP is the default engine
-    wmethod.AllowThreads(
-        1); // no threading for data processing (except for staging)
-    wmethod.AddTransport(
-        "File", "lucky=yes");        // ISO-POSIX file is the default transport
-    wmethod.AddTransport("Staging"); //"The" staging method developed in ECP
-    wmethod.SetParameters("have_metadata_file",
-                          "yes"); // Passing parameters to the engine
-    wmethod.SetParameters("Aggregation",
-                          (nproc + 1) / 2); // number of aggregators
-    wmethod.SetParameters("verbose", adios::Verbose::WARN); // Verbosity level
-                                                            // for this engine
-                                                            // and what it calls
-  }
-
-  // Define variables with transformations.
-  adios::Variable<unsigned int> &varNX = adios.DefineVariable<unsigned int>(
-      "NX"); // global single-value across processes
-  auto &varNproc = adios.DefineVariable<int>(
-      "nproc", adios::Dims{adios::GLOBAL_VALUE}); // same def for global value
-  adios::Variable<int> &varNparts = adios.DefineVariable<int>(
-      "Nparts",
-      adios::Dims{
-          adios::LOCAL_VALUE}); // a single-value different on every process
-  adios::Variable<double> &var2D = adios.DefineVariable<double>(
-      "Temperature",
-      adios::Dims{nproc, NX}); // 2D global array, 1D decomposition
-  adios::Variable<float> &varRagged = adios.DefineVariable<float>(
-      "Ragged", adios::Dims{nproc, adios::VARYING_DIMENSION}); // ragged array
-
-  // add transform to variable
-  adios::Transform zfp = adios::transform::ZFP();
-  var2D.AddTransform(zfp, "accuracy=0.001");
-
-  // open...write.write.write...advance...write.write.write...advance...
-  // ...close  cycle
-  // "w" create/overwrite on open, "a" append at open, "u" open for update (does
-  // not increase step), "r" open for read.
-  std::shared_ptr<adios::Engine> writer = adios.Open(
-      "myNumbers.bp", "w", comm, wmethod, adios::IOMode::INDEPENDENT);
-
-  if (writer == nullptr)
-    throw std::ios_base::failure("ERROR: failed to open ADIOS writer\n");
-
-  // Zero-Copy API: Define a variable with local dimensions now, and make ADIOS
-  // allocate it inside its buffers
-  // This requires an engine created. The variable will be deallocated in
-  // writer->Close()
-  // Calling varZeroCopy.SetSelection() later should throw an exception, i.e.
-  // modification is not allowed
-  // 2D global array, 1D decomposition
-  adios::Variable<double> &varZeroCopy = adios.DefineVariable<double>(
-      "ZC", adios::Dims{nproc, NX}, adios::Dims{1, NX}, adios::Dims{rank, 0});
-  double fillValue = -1.0;
-  double *const myVarZC =
-      writer->AllocateVariable<double>(varZeroCopy, fillValue);
-
-  for (int step = 0; step < 10; ++step)
-  {
-    // write scalar value
-    writer->Write<int>(varNparts, Nparts);
-
-    // Make a selection to describe the local dimensions of the variable we
-    // write and
-    // its offsets in the global spaces. This could have been done in
-    // adios.DefineVariable()
-    adios::Selection sel = adios.SelectionBoundingBox(
-        {1, NX}, {rank, NX}); // local dims and offsets; both as list
-    var2D.SetSelection(
-        sel); // Shall we call it SetSpaceSelection, SetOutputSelection?
-
-    // Select the area that we want to write from the data pointer we pass to
-    // the writer
-    // Think HDF5 memspace, just not hyperslabs yet, only a bounding box
-    // selection
-    // Engine will copy this bounding box from the data pointer into the buffer.
-    // Size of the bounding box should match the
-    // "space" selection which was given above. Default memspace is the full
-    // selection.
-    adios::Selection memspace = adios.SelectionBoundingBox(
-        {1, NX}, {0, 1}); // local dims and offsets; both as list
-    var2D.SetMemorySelection(memspace);
-
-    writer->Write<double>(var2D, *Temperature);
-
-    // Indicate we are done for this step.
-    // N-to-M Aggregation, disk I/O will be performed during this call, unless
-    // time aggregation postpones all of that to some later step.
-    // When Advance() returns, user can overwrite its Zero Copy variables.
-    // Internal buffer is freed only if there are no Zero Copy variables and
-    // there is no time aggregation going on
-    writer->Advance();                   // same as AppendMode
-    writer->Advance(adios::APPEND, 0.0); // append new step at next write
-    writer->Advance(adios::UPDATE);      // do not increase step;
-
-    // When AdvanceAsync returns, user need to wait for notification that he can
-    // overwrite the Zero Copy variables.
-    writer->AdvanceAsync(adios::APPEND, cb_AsyncWriteAdvanceCompleted);
-  }
-
-  // Called once: indicate that we are done with this output for the run
-  // Zero Copy variables will be deallocated
-  writer->Close();
-
-  /*************
-   * READ API
-   *************/
-  adios::Method &rmethod = adios.DeclareMethod("ReadMethod");
-  if (!rmethod.isUserDefined())
-  {
-    // if not defined by user, we can change the default settings
-    rmethod.SetEngine("BP");         // BP is the default engine
-    rmethod.AddTransport("Staging"); //"The" staging method developed in ECP
-    rmethod.SetParameters("Aggregation",
-                          (nproc + 1) / 2); // number of aggregators
-    rmethod.SetParameters("verbose", adios::Verbose::WARN); // Verbosity level
-                                                            // for this engine
-                                                            // and what it calls
-  }
-
-  // 1. Open a stream, where every reader can see everything in a stream (so
-  // that they can read a global array)
-  // Blocking read of a variable
-  try
-  {
-    // These method settings are developer-only, not available to the user
-    rmethod.SetReadMultiplexPattern(adios::GLOBAL_READERS); // Each reader
-                                                            // process sees
-                                                            // everything from
-                                                            // the stream
-    rmethod.SetStreamOpenMode(adios::WAITFORSTREAM); // In Open(), wait for the
-                                                     // first step appear
-                                                     // (default)
-
-    // Open a stream
-    std::shared_ptr<adios::Engine> reader =
-        adios.Open("filename.bp", "r", comm, rmethod, adios::IOMode::COLLECTIVE,
-                   /*timeout_sec=*/300.0); // wait this long for the stream,
-                                           // return error afterwards
-
-    /* Variable names are available as a vector of strings */
-    std::cout << "List of variables in file: " << reader->VariableNames()
-              << "\n";
-    /* read a Global scalar which has a single value in a step */
-    reader->Read<unsigned int>("NX", NX);
-
-    // inquiry about a variable, whose name we know
-    adios::Variable<double> var2D =
-        reader->InquireVariableDouble("Temperature");
-    std::vector<std::size_t> gdims = var2D.GetGlobalDimensions();
-    int nsteps = var2D.GetSteps();
-
-    struct adios::BlockInfo blocks = reader.InquiryVariableBlockInfo(
-        reader, var2D); // get per-writer size info
-    // this is adios1 ADIOS_VARBLOCK
-    struct adios::Statistics stats = reader.InquiryVariableStat(
-        reader, var2D, perstepstat, perblockstat); // get min/max statistics
-    // this is adios1 ADIOS_VARSTAT
-
-    while (true)
+    // Application variables
+    MPI_Comm comm = MPI_COMM_WORLD;
+    const unsigned int NX = 10;
+    double Temperature[1][NX + 2]; // We will want to write only Nx elements,
+                                   // skipping the first and last (think ghost
+                                   // cells)
+    std::vector<float> RaggedArray;
+
+    int Nparts, nproc;
+
+    // Global class/object that serves for init, finalize and provides ADIOS
+    // functions
+    adios::ADIOS adios("config.xml", comm, /*verbose=*/adios::INFO,
+                       /*debugflag=*/false);
+
+    /*************
+     * WRITE API
+     *************/
+
+    /* Method
+     * We associate Engines and Transports and user settings into an object
+     * called
+     * Method.
+     * ADIOS checks if it is defined by the user in the config file, and fills
+     * it
+     * out if it is.
+     */
+
+    adios::Method &wmethod = adios.DeclareMethod("WriteMethod");
+    if (!wmethod.isUserDefined())
     {
-      // Make a selection to describe the local dimensions of the variable we
-      // READ and
-      // its offsets in the global spaces
-      adios::Selection bbsel = adios.SelectionBoundingBox(
-          {1, NX}, {0, 0}); // local dims and offsets; both as list
-      var2D.SetSelection(bbsel);
-      adios::Selection memspace = adios.SelectionBoundingBox(
-          {1, NX}, {0, 1}); // local dims and offsets; both as list
-      var2D.SetMemorySelection(memspace);
-      reader->Read<double>(var2D, *Temperature);
-      // var2D, Temperature );
-
-      // Better for staging to schedule several reads at once
-      reader->ScheduleRead<double>(var2D, *Temperature);
-      reader->PerformReads(adios::BLOCKINGREAD);
-
-      // promise to not read more from this step/item
-      reader->Release();
-
-      // want to move on to the next available step/item
-      reader->Advance(adios::NEXT_AVAILABLE); // default
-      reader->Advance(
-          adios::LATEST_AVAILABLE); // interested only in the latest data
+        // if not defined by user, we can change the default settings
+        wmethod.SetEngine("BP"); // BP is the default engine
+        wmethod.AllowThreads(
+            1); // no threading for data processing (except for staging)
+        wmethod.AddTransport(
+            "File", "lucky=yes"); // ISO-POSIX file is the default transport
+        wmethod.AddTransport("Staging"); //"The" staging method developed in ECP
+        wmethod.SetParameters("have_metadata_file",
+                              "yes"); // Passing parameters to the engine
+        wmethod.SetParameters("Aggregation",
+                              (nproc + 1) / 2); // number of aggregators
+        wmethod.SetParameters("verbose",
+                              adios::Verbose::WARN); // Verbosity level
+                                                     // for this engine
+                                                     // and what it calls
     }
-    // Close file/stream
-    reader->Close();
-  }
-  catch (adios::end_of_stream &e)
-  {
-    //  Reached end of stream, end processing loop
-    // Close file/stream
-    reader->Close();
-  }
-  catch (adios::file_not_found &e)
-  {
-    // File/stream does not exist, quit
-  }
-
-  // 2. Open a stream, where each item from the writers will get to a single
-  // reader only
-  // If the writers are collective, that means a whole steps go to different
-  // readers
-  // If the writers are independent, that means each writer's output goes to
-  // different readers
-  // Also show here ScheduleRead/PerformRead
-  // try
-  {
-    rmethod.SetReadMultiplexPattern(adios::FIFO_READERS); // Each reader process
-                                                          // sees everything
-                                                          // from the stream
-    rmethod.SetStreamOpenMode(adios::WAITFORSTREAM); // In Open(), wait for the
-                                                     // first step appear
-                                                     // (default)
-
-    // Open a stream
-    std::shared_ptr<adios::Engine> reader = adios.Open(
-        "filename.bp", "r", comm, rmethod, adios::IOMode::INDEPENDENT,
-        /*timeout_sec=*/300.0); // wait this long for the stream, return error
-                                // afterwards
-
-    while (true)
+
+    // Define variables with transformations.
+    adios::Variable<unsigned int> &varNX = adios.DefineVariable<unsigned int>(
+        "NX"); // global single-value across processes
+    auto &varNproc = adios.DefineVariable<int>(
+        "nproc", adios::Dims{adios::GLOBAL_VALUE}); // same def for global value
+    adios::Variable<int> &varNparts = adios.DefineVariable<int>(
+        "Nparts", adios::Dims{adios::LOCAL_VALUE}); // a single-value
+                                                    // different on every
+                                                    // process
+    adios::Variable<double> &var2D = adios.DefineVariable<double>(
+        "Temperature",
+        adios::Dims{nproc, NX}); // 2D global array, 1D decomposition
+    adios::Variable<float> &varRagged = adios.DefineVariable<float>(
+        "Ragged", adios::Dims{nproc, adios::VARYING_DIMENSION}); // ragged array
+
+    // add transform to variable
+    adios::Transform zfp = adios::transform::ZFP();
+    var2D.AddTransform(zfp, "accuracy=0.001");
+
+    // open...write.write.write...advance...write.write.write...advance...
+    // ...close  cycle
+    // "w" create/overwrite on open, "a" append at open, "u" open for update
+    // (does
+    // not increase step), "r" open for read.
+    std::shared_ptr<adios::Engine> writer = adios.Open(
+        "myNumbers.bp", "w", comm, wmethod, adios::IOMode::INDEPENDENT);
+
+    if (writer == nullptr)
+        throw std::ios_base::failure("ERROR: failed to open ADIOS writer\n");
+
+    // Zero-Copy API: Define a variable with local dimensions now, and make
+    // ADIOS
+    // allocate it inside its buffers
+    // This requires an engine created. The variable will be deallocated in
+    // writer->Close()
+    // Calling varZeroCopy.SetSelection() later should throw an exception, i.e.
+    // modification is not allowed
+    // 2D global array, 1D decomposition
+    adios::Variable<double> &varZeroCopy = adios.DefineVariable<double>(
+        "ZC", adios::Dims{nproc, NX}, adios::Dims{1, NX}, adios::Dims{rank, 0});
+    double fillValue = -1.0;
+    double *const myVarZC =
+        writer->AllocateVariable<double>(varZeroCopy, fillValue);
+
+    for (int step = 0; step < 10; ++step)
     {
-      // Make a selection to describe the local dimensions of the variable we
-      // READ and
-      // its offsets in the global spaces if we know this somehow
-      adios::Selection bbsel = adios.SelectionBoundingBox(
-          {1, NX}, {0, 0}); // local dims and offsets; both as list
-      var2D->SetSelection(bbsel);
-      reader->Read<double>(var2D, *Temperature);
-
-      // Let ADIOS allocate space for the incoming (per-writer) item
-      double *data = reader->Read<double>(var2D);
-
-      // promise to not read more from this step/item
-      reader->Release();
-
-      // want to move on to the next available step/item
-      reader->Advance();                        // default
-      reader->Advance(adios::LATEST_AVAILABLE); // This should be an error, or
-                                                // could it make sense?
+        // write scalar value
+        writer->Write<int>(varNparts, Nparts);
+
+        // Make a selection to describe the local dimensions of the variable we
+        // write and
+        // its offsets in the global spaces. This could have been done in
+        // adios.DefineVariable()
+        adios::Selection sel = adios.SelectionBoundingBox(
+            {1, NX}, {rank, NX}); // local dims and offsets; both as list
+        var2D.SetSelection(
+            sel); // Shall we call it SetSpaceSelection, SetOutputSelection?
+
+        // Select the area that we want to write from the data pointer we pass
+        // to
+        // the writer
+        // Think HDF5 memspace, just not hyperslabs yet, only a bounding box
+        // selection
+        // Engine will copy this bounding box from the data pointer into the
+        // buffer.
+        // Size of the bounding box should match the
+        // "space" selection which was given above. Default memspace is the full
+        // selection.
+        adios::Selection memspace = adios.SelectionBoundingBox(
+            {1, NX}, {0, 1}); // local dims and offsets; both as list
+        var2D.SetMemorySelection(memspace);
+
+        writer->Write<double>(var2D, *Temperature);
+
+        // Indicate we are done for this step.
+        // N-to-M Aggregation, disk I/O will be performed during this call,
+        // unless
+        // time aggregation postpones all of that to some later step.
+        // When Advance() returns, user can overwrite its Zero Copy variables.
+        // Internal buffer is freed only if there are no Zero Copy variables and
+        // there is no time aggregation going on
+        writer->Advance();                   // same as AppendMode
+        writer->Advance(adios::APPEND, 0.0); // append new step at next write
+        writer->Advance(adios::UPDATE);      // do not increase step;
+
+        // When AdvanceAsync returns, user need to wait for notification that he
+        // can
+        // overwrite the Zero Copy variables.
+        writer->AdvanceAsync(adios::APPEND, cb_AsyncWriteAdvanceCompleted);
     }
-    reader->Close();
-  }
-
-  // 3. Open a stream and return immediately, not waiting for data to appear
-  // In this mode we cannot inquiry variables, but can schedule reads
-  // try
-  {
-    rmethod.SetReadMultiplexPattern(adios::GLOBAL_READERS); // Each reader
-                                                            // process sees
-                                                            // everything from
-                                                            // the stream
-    rmethod.SetStreamOpenMode(adios::NOWAITFORSTREAM); // In Open(), wait for
-                                                       // the first step appear
-                                                       // (default)
-
-    // Open a stream
-    std::shared_ptr<adios::Engine> reader = adios.Open(
-        "filename.bp", "r", comm, rmethod, adios::IOMode::INDEPENDENT);
-
-    while (true)
+
+    // Called once: indicate that we are done with this output for the run
+    // Zero Copy variables will be deallocated
+    writer->Close();
+
+    /*************
+     * READ API
+     *************/
+    adios::Method &rmethod = adios.DeclareMethod("ReadMethod");
+    if (!rmethod.isUserDefined())
     {
+        // if not defined by user, we can change the default settings
+        rmethod.SetEngine("BP");         // BP is the default engine
+        rmethod.AddTransport("Staging"); //"The" staging method developed in ECP
+        rmethod.SetParameters("Aggregation",
+                              (nproc + 1) / 2); // number of aggregators
+        rmethod.SetParameters("verbose",
+                              adios::Verbose::WARN); // Verbosity level
+                                                     // for this engine
+                                                     // and what it calls
+    }
 
-      // Let ADIOS allocate space for the incoming (per-writer) item
-      reader->ScheduleRead(); // read whatever comes
-
-      // One way is to handle the incoming data through a callback (which will
-      // be called in a thread)
-      // void cb( const void *data, std::string doid, std::string var,
-      // std::string dtype, std::vector<std::size_t> varshape );
-      // void cb( adios::VARCHUNK * chunk ); // see adios1 for VARCHUNK
-      reader->SetReadCallback(cb);
-      reader->PerformReads(adios::NONBLOCKINGREAD);
-
-      // Another way is checking back manually like in adios1 and processing
-      // chunks
-      reader->PerformReads(adios::NONBLOCKINGREAD);
-      int ck;
-      adios::VARCHUNK *chunk;
-      try
-      {
-        while ((ck = reader->CheckReads(&chunk)) > 0)
+    // 1. Open a stream, where every reader can see everything in a stream (so
+    // that they can read a global array)
+    // Blocking read of a variable
+    try
+    {
+        // These method settings are developer-only, not available to the user
+        rmethod.SetReadMultiplexPattern(adios::GLOBAL_READERS); // Each reader
+                                                                // process sees
+        // everything from
+        // the stream
+        rmethod.SetStreamOpenMode(
+            adios::WAITFORSTREAM); // In Open(), wait for the
+                                   // first step appear
+                                   // (default)
+
+        // Open a stream
+        std::shared_ptr<adios::Engine> reader = adios.Open(
+            "filename.bp", "r", comm, rmethod, adios::IOMode::COLLECTIVE,
+            /*timeout_sec=*/300.0); // wait this long for the stream,
+                                    // return error afterwards
+
+        /* Variable names are available as a vector of strings */
+        std::cout << "List of variables in file: " << reader->VariableNames()
+                  << "\n";
+        /* read a Global scalar which has a single value in a step */
+        reader->Read<unsigned int>("NX", NX);
+
+        // inquiry about a variable, whose name we know
+        adios::Variable<double> var2D =
+            reader->InquireVariableDouble("Temperature");
+        std::vector<std::size_t> gdims = var2D.GetGlobalDimensions();
+        int nsteps = var2D.GetSteps();
+
+        struct adios::BlockInfo blocks = reader.InquiryVariableBlockInfo(
+            reader, var2D); // get per-writer size info
+        // this is adios1 ADIOS_VARBLOCK
+        struct adios::Statistics stats =
+            reader.InquiryVariableStat(reader, var2D, perstepstat,
+                                       perblockstat); // get min/max statistics
+        // this is adios1 ADIOS_VARSTAT
+
+        while (true)
         {
-          if (chunk)
-          {
-            // process the chunk first
-            // ...
-            // free memory of chunk (not the data!)
-            adios::FreeChunk(chunk);
-          }
-          else
-          {
-            // no chunk was returned, slow down a little
-            sleep(1);
-          }
+            // Make a selection to describe the local dimensions of the variable
+            // we
+            // READ and
+            // its offsets in the global spaces
+            adios::Selection bbsel = adios.SelectionBoundingBox(
+                {1, NX}, {0, 0}); // local dims and offsets; both as list
+            var2D.SetSelection(bbsel);
+            adios::Selection memspace = adios.SelectionBoundingBox(
+                {1, NX}, {0, 1}); // local dims and offsets; both as list
+            var2D.SetMemorySelection(memspace);
+            reader->Read<double>(var2D, *Temperature);
+            // var2D, Temperature );
+
+            // Better for staging to schedule several reads at once
+            reader->ScheduleRead<double>(var2D, *Temperature);
+            reader->PerformReads(adios::BLOCKINGREAD);
+
+            // promise to not read more from this step/item
+            reader->Release();
+
+            // want to move on to the next available step/item
+            reader->Advance(adios::NEXT_AVAILABLE);   // default
+            reader->Advance(adios::LATEST_AVAILABLE); // interested only in the
+                                                      // latest data
         }
-      }
-      catch (std::exception &e)
-      {
-        // some error happened while getting a chunk
-      }
-
-      reader->Release();
-
-      // When AdvanceAsync returns new data is not yet available.
-      // A callback will tell us when we have the new data (and we have the lock
-      // on it to read)
-      writer->AdvanceAsync(adios::NEXT_AVAILABLE, cb_AsyncReadAdvanceCompleted);
-      // Do we need more fine grained control? Like this function does not get
-      // the lock and so
-      // do we need to call Advance() to get the lock?
+        // Close file/stream
+        reader->Close();
     }
-    reader->Close();
-  }
-  // Note: chunk reading also works if scheduling reads for specific variables
-
-  // 4. Open it as file and see all steps at once.
-  // Allow for reading multiple steps of a variable into a contiguous array
-  try
-  {
-    rmethod.AddTransport(
-        "BP"); // Set a file engine here. Shall we have RemoveTransport() too?
-
-    // Open a file with all steps immediately available
-    std::shared_ptr<adios::Engine> reader = adios.OpenFileReader(
-        "filename.bp", comm, rmethod, adios::COLLECTIVE_IO);
-
-    /* NX */
-    /* There is a single value for each step. We can read all into a 1D array
-     * with a step selection.
-     * Steps are not automatically presented as an array dimension and read does
-     * not read it as array.
-     */
-    // We can also just conveniently get the first step with a simple read
-    // statement.
-    reader->Read<unsigned int>(
-        "NX", &NX); // read a Global scalar which has a single value in a step
-    reader->Read<unsigned int>(
-        varNX, &NX); // read a Global scalar which has a single value in a step
-
-    adios::Variable<void> varNXread = reader->InquireVariable("NX");
-    adios::Variable<unsigned int> varNXreadint =
-        reader->InquireVariableInt("NX");
-    std::vector<unsigned int> Nxs(
-        varNXread.GetSteps()); // number of steps available
-    // make a StepSelection to select multiple steps. Args: From, #of
-    // consecutive steps
-    adios::StepSelection stepsNx(0, varNXread.GetSteps());
-    // ? How do we make a selection for an arbitrary list of steps ?
-    varNXread.SetStepSelection(stepsNx);
-    reader->Read<unsigned int>(varNXreadint, Nxs.data());
-    reader->Read<void>(varNXread, Nxs.data());
-
-    auto itmax = std::max_element(std::begin(Nxs), std::end(Nxs));
-    auto itmin = std::min_element(std::begin(Nxs), std::end(Nxs));
-    if (*itmin != *itmax)
+    catch (adios::end_of_stream &e)
+    {
+        //  Reached end of stream, end processing loop
+        // Close file/stream
+        reader->Close();
+    }
+    catch (adios::file_not_found &e)
+    {
+        // File/stream does not exist, quit
+    }
+
+    // 2. Open a stream, where each item from the writers will get to a single
+    // reader only
+    // If the writers are collective, that means a whole steps go to different
+    // readers
+    // If the writers are independent, that means each writer's output goes to
+    // different readers
+    // Also show here ScheduleRead/PerformRead
+    // try
+    {
+        rmethod.SetReadMultiplexPattern(
+            adios::FIFO_READERS); // Each reader process
+                                  // sees everything
+                                  // from the stream
+        rmethod.SetStreamOpenMode(
+            adios::WAITFORSTREAM); // In Open(), wait for the
+                                   // first step appear
+                                   // (default)
+
+        // Open a stream
+        std::shared_ptr<adios::Engine> reader = adios.Open(
+            "filename.bp", "r", comm, rmethod, adios::IOMode::INDEPENDENT,
+            /*timeout_sec=*/300.0); // wait this long for the stream, return
+                                    // error
+                                    // afterwards
+
+        while (true)
+        {
+            // Make a selection to describe the local dimensions of the variable
+            // we
+            // READ and
+            // its offsets in the global spaces if we know this somehow
+            adios::Selection bbsel = adios.SelectionBoundingBox(
+                {1, NX}, {0, 0}); // local dims and offsets; both as list
+            var2D->SetSelection(bbsel);
+            reader->Read<double>(var2D, *Temperature);
+
+            // Let ADIOS allocate space for the incoming (per-writer) item
+            double *data = reader->Read<double>(var2D);
+
+            // promise to not read more from this step/item
+            reader->Release();
+
+            // want to move on to the next available step/item
+            reader->Advance(); // default
+            reader->Advance(
+                adios::LATEST_AVAILABLE); // This should be an error, or
+                                          // could it make sense?
+        }
+        reader->Close();
+    }
+
+    // 3. Open a stream and return immediately, not waiting for data to appear
+    // In this mode we cannot inquiry variables, but can schedule reads
+    // try
+    {
+        rmethod.SetReadMultiplexPattern(adios::GLOBAL_READERS); // Each reader
+                                                                // process sees
+        // everything from
+        // the stream
+        rmethod.SetStreamOpenMode(
+            adios::NOWAITFORSTREAM); // In Open(), wait for
+                                     // the first step appear
+                                     // (default)
+
+        // Open a stream
+        std::shared_ptr<adios::Engine> reader = adios.Open(
+            "filename.bp", "r", comm, rmethod, adios::IOMode::INDEPENDENT);
+
+        while (true)
+        {
+
+            // Let ADIOS allocate space for the incoming (per-writer) item
+            reader->ScheduleRead(); // read whatever comes
+
+            // One way is to handle the incoming data through a callback (which
+            // will
+            // be called in a thread)
+            // void cb( const void *data, std::string doid, std::string var,
+            // std::string dtype, std::vector<std::size_t> varshape );
+            // void cb( adios::VARCHUNK * chunk ); // see adios1 for VARCHUNK
+            reader->SetReadCallback(cb);
+            reader->PerformReads(adios::NONBLOCKINGREAD);
+
+            // Another way is checking back manually like in adios1 and
+            // processing
+            // chunks
+            reader->PerformReads(adios::NONBLOCKINGREAD);
+            int ck;
+            adios::VARCHUNK *chunk;
+            try
+            {
+                while ((ck = reader->CheckReads(&chunk)) > 0)
+                {
+                    if (chunk)
+                    {
+                        // process the chunk first
+                        // ...
+                        // free memory of chunk (not the data!)
+                        adios::FreeChunk(chunk);
+                    }
+                    else
+                    {
+                        // no chunk was returned, slow down a little
+                        sleep(1);
+                    }
+                }
+            }
+            catch (std::exception &e)
+            {
+                // some error happened while getting a chunk
+            }
+
+            reader->Release();
+
+            // When AdvanceAsync returns new data is not yet available.
+            // A callback will tell us when we have the new data (and we have
+            // the lock
+            // on it to read)
+            writer->AdvanceAsync(adios::NEXT_AVAILABLE,
+                                 cb_AsyncReadAdvanceCompleted);
+            // Do we need more fine grained control? Like this function does not
+            // get
+            // the lock and so
+            // do we need to call Advance() to get the lock?
+        }
+        reader->Close();
+    }
+    // Note: chunk reading also works if scheduling reads for specific variables
+
+    // 4. Open it as file and see all steps at once.
+    // Allow for reading multiple steps of a variable into a contiguous array
+    try
+    {
+        rmethod.AddTransport("BP"); // Set a file engine here. Shall we have
+                                    // RemoveTransport() too?
+
+        // Open a file with all steps immediately available
+        std::shared_ptr<adios::Engine> reader = adios.OpenFileReader(
+            "filename.bp", comm, rmethod, adios::COLLECTIVE_IO);
+
+        /* NX */
+        /* There is a single value for each step. We can read all into a 1D
+         * array
+         * with a step selection.
+         * Steps are not automatically presented as an array dimension and read
+         * does
+         * not read it as array.
+         */
+        // We can also just conveniently get the first step with a simple read
+        // statement.
+        reader->Read<unsigned int>(
+            "NX",
+            &NX); // read a Global scalar which has a single value in a step
+        reader->Read<unsigned int>(
+            varNX,
+            &NX); // read a Global scalar which has a single value in a step
+
+        adios::Variable<void> varNXread = reader->InquireVariable("NX");
+        adios::Variable<unsigned int> varNXreadint =
+            reader->InquireVariableInt("NX");
+        std::vector<unsigned int> Nxs(
+            varNXread.GetSteps()); // number of steps available
+        // make a StepSelection to select multiple steps. Args: From, #of
+        // consecutive steps
+        adios::StepSelection stepsNx(0, varNXread.GetSteps());
+        // ? How do we make a selection for an arbitrary list of steps ?
+        varNXread.SetStepSelection(stepsNx);
+        reader->Read<unsigned int>(varNXreadint, Nxs.data());
+        reader->Read<void>(varNXread, Nxs.data());
+
+        auto itmax = std::max_element(std::begin(Nxs), std::end(Nxs));
+        auto itmin = std::min_element(std::begin(Nxs), std::end(Nxs));
+        if (*itmin != *itmax)
+        {
+            throw std::ios_base::failure(
+                "ERROR: NX is not the same at all steps!\n");
+        }
+
+        /* Nparts */
+        // Nparts local scalar is presented as a 1D array of nproc elements.
+        // We can read all steps into a 2D array of nproc * nsteps
+        adios::Variable<void> varNpartsread = reader->InquireVariable("Nparts");
+        std::vector<int> partsV(Nproc * varNpartsread->GetSteps());
+        varNpartsread->SetStepSelection(
+            adios.StepSelection(0, varNpartsread.GetSteps()));
+        reader->Read<int>("Nparts", partsV.data());
+        reader->Read<void>(varNpartsread,
+                           partsV.data()); // missing spatial selection = whole
+                                           // array at each step
+
+        // Close file/stream
+        reader->Close();
+    }
+    catch (adios::file_not_found &e)
     {
-      throw std::ios_base::failure("ERROR: NX is not the same at all steps!\n");
+        // File/stream does not exist, quit
     }
 
-    /* Nparts */
-    // Nparts local scalar is presented as a 1D array of nproc elements.
-    // We can read all steps into a 2D array of nproc * nsteps
-    adios::Variable<void> varNpartsread = reader->InquireVariable("Nparts");
-    std::vector<int> partsV(Nproc * varNpartsread->GetSteps());
-    varNpartsread->SetStepSelection(
-        adios.StepSelection(0, varNpartsread.GetSteps()));
-    reader->Read<int>("Nparts", partsV.data());
-    reader->Read<void>(
-        varNpartsread,
-        partsV.data()); // missing spatial selection = whole array at each step
-
-    // Close file/stream
-    reader->Close();
-  }
-  catch (adios::file_not_found &e)
-  {
-    // File/stream does not exist, quit
-  }
-
-  return 0;
+    return 0;
 }
diff --git a/examples/globalArray/globalArrayNoXML.cpp b/examples/globalArray/globalArrayNoXML.cpp
index e8f96975ee3f22a19ec21cc8389edc2b967088bc..64f33e42dce0cf2e0b66427b17d6abf7661477d0 100644
--- a/examples/globalArray/globalArrayNoXML.cpp
+++ b/examples/globalArray/globalArrayNoXML.cpp
@@ -19,105 +19,108 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, size;
-  const int NX = 10;
-  double t[NX];
-  std::vector<double> p(NX);
-  MPI_Comm comm = MPI_COMM_WORLD;
+    int rank, size;
+    const int NX = 10;
+    double t[NX];
+    std::vector<double> p(NX);
+    MPI_Comm comm = MPI_COMM_WORLD;
 
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
 
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios("globalArrayNoXML.xml", comm, true);
-
-    // set a maximum buffersize that ADIOS can use (for one group).
-    // multiple groups may use each such buffersize if they are overlapped or
-    // use time-aggregation or use zero-copy staging
-
-    // Define Group and its variables
-    // The group's transport can be defined at runtime in the input XML file
-    adios.CreateGroup("arrays");
-
-    // Set the maximum buffersize for this group. This must happen before
-    // defining a zero copy variable, which will cause the group's internal
-    // buffer
-    // allocated (during the variable definition call)
-    // adios.SetMaxBuffersize ("arrays", 10000000);
-
-    adios.CreateVariable("arrays", "NX", "int"); // scalar variable
-    adios.CreateVariable("arrays", "size", "int");
-    adios.CreateVariable("arrays", "size", "rank");
-
-    // define a 2D array with 1D decomposition
-    adios.CreateVariable("arrays", "temperature", "double", "1,NX", "NONE",
-                         "size,NX", "rank,0");
-
-    //        // set a variable-level transformation for this variable
-    //        adios.SetVariableTransform ("arrays", "temperature", "none");
-
-    adios.CreateVariable("arrays", "pressure", "std::vector<double>", "1,NX",
-                         "size,NX", "rank,0");
-
-    // set a group-level transport
-    adios.SetTransport("arrays", "time-aggregate"); // no options passed here
-
-    // Get Monitor info
-    std::ofstream logStream("info_" + std::to_string(rank) + ".log");
-    adios.MonitorGroups(logStream);
-
-    adios.Open("arrays", "globalArray.bp", "w", 100000000);
-
-    for (int it = 1; it <= 13; it++)
+    try
     {
-
-      for (int i = 0; i < NX; i++)
-      {
-        t[i] = it * 100.0 + rank * NX + i;
-        p[i] = it * 1000.0 + rank * NX + i;
-      }
-
-      //            if (it==1)
-      //
-      //            else
-      //                adios.Open("arrays", "globalArray.bp", "a", 100000000 );
-
-      // uint64_t    adios_groupsize, adios_totalsize;
-      // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
-      // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
-
-      adios.Write("arrays", "NX", &NX);
-      adios.Write("arrays", "size", &size);
-      adios.Write("arrays", "rank", &rank);
-      adios.Write("arrays", "temperature", t);
-      adios.Write("arrays", "pressure", &p);
-
-      MPI_Barrier(comm);
-      if (rank == 0)
-        printf("Timestep %d written\n", it);
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios("globalArrayNoXML.xml", comm, true);
+
+        // set a maximum buffersize that ADIOS can use (for one group).
+        // multiple groups may use each such buffersize if they are overlapped
+        // or
+        // use time-aggregation or use zero-copy staging
+
+        // Define Group and its variables
+        // The group's transport can be defined at runtime in the input XML file
+        adios.CreateGroup("arrays");
+
+        // Set the maximum buffersize for this group. This must happen before
+        // defining a zero copy variable, which will cause the group's internal
+        // buffer
+        // allocated (during the variable definition call)
+        // adios.SetMaxBuffersize ("arrays", 10000000);
+
+        adios.CreateVariable("arrays", "NX", "int"); // scalar variable
+        adios.CreateVariable("arrays", "size", "int");
+        adios.CreateVariable("arrays", "size", "rank");
+
+        // define a 2D array with 1D decomposition
+        adios.CreateVariable("arrays", "temperature", "double", "1,NX", "NONE",
+                             "size,NX", "rank,0");
+
+        //        // set a variable-level transformation for this variable
+        //        adios.SetVariableTransform ("arrays", "temperature", "none");
+
+        adios.CreateVariable("arrays", "pressure", "std::vector<double>",
+                             "1,NX", "size,NX", "rank,0");
+
+        // set a group-level transport
+        adios.SetTransport("arrays",
+                           "time-aggregate"); // no options passed here
+
+        // Get Monitor info
+        std::ofstream logStream("info_" + std::to_string(rank) + ".log");
+        adios.MonitorGroups(logStream);
+
+        adios.Open("arrays", "globalArray.bp", "w", 100000000);
+
+        for (int it = 1; it <= 13; it++)
+        {
+
+            for (int i = 0; i < NX; i++)
+            {
+                t[i] = it * 100.0 + rank * NX + i;
+                p[i] = it * 1000.0 + rank * NX + i;
+            }
+
+            //            if (it==1)
+            //
+            //            else
+            //                adios.Open("arrays", "globalArray.bp", "a",
+            //                100000000 );
+
+            // uint64_t    adios_groupsize, adios_totalsize;
+            // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
+            // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
+
+            adios.Write("arrays", "NX", &NX);
+            adios.Write("arrays", "size", &size);
+            adios.Write("arrays", "rank", &rank);
+            adios.Write("arrays", "temperature", t);
+            adios.Write("arrays", "pressure", &p);
+
+            MPI_Barrier(comm);
+            if (rank == 0)
+                printf("Timestep %d written\n", it);
+        }
+
+        adios.Close("arrays");
+
+        MPI_Barrier(comm);
+        // need barrier before we destroy the ADIOS object here automatically
+        if (rank == 0)
+            printf("Finalize adios\n");
     }
-
-    adios.Close("arrays");
-
-    MPI_Barrier(comm);
-    // need barrier before we destroy the ADIOS object here automatically
-    if (rank == 0)
-      printf("Finalize adios\n");
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  if (rank == 0)
-    printf("Finalize MPI\n");
-  MPI_Finalize();
-  return 0;
+    if (rank == 0)
+        printf("Finalize MPI\n");
+    MPI_Finalize();
+    return 0;
 }
diff --git a/examples/globalArray/globalArrayXML.cpp b/examples/globalArray/globalArrayXML.cpp
index 9d3285df6295b0d6b605bcfc0f92b8d49872a779..c25d046e32cb1fcef4a77c8049d3ebef6444108b 100644
--- a/examples/globalArray/globalArrayXML.cpp
+++ b/examples/globalArray/globalArrayXML.cpp
@@ -19,80 +19,81 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, size;
-  const int NX = 10;
-  double t[NX];
-  std::vector<double> p(NX);
-  MPI_Comm comm = MPI_COMM_WORLD;
+    int rank, size;
+    const int NX = 10;
+    double t[NX];
+    std::vector<double> p(NX);
+    MPI_Comm comm = MPI_COMM_WORLD;
 
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
 
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios("globalArrayXML.xml", comm, true);
+    try
+    {
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios("globalArrayXML.xml", comm, true);
 
-    adios::ADIOS_OUTPUT &ckptfile =
-        adios.Open("globalArray.bp", comm, "a", "POSIX");
+        adios::ADIOS_OUTPUT &ckptfile =
+            adios.Open("globalArray.bp", comm, "a", "POSIX");
 
-    adios::ADIOS_OUTPUT ckptfile("globalArray.bp", subcomm, "a", "POSIX");
-    // adios::ADIOS_OUTPUT *ckptfile = adios.Open( "globalArray.bp", "POSIX");
+        adios::ADIOS_OUTPUT ckptfile("globalArray.bp", subcomm, "a", "POSIX");
+        // adios::ADIOS_OUTPUT *ckptfile = adios.Open( "globalArray.bp",
+        // "POSIX");
 
-    // Get Monitor info
-    std::ofstream logStream("info_" + std::to_string(rank) + ".log");
-    adios.MonitorGroups(logStream);
+        // Get Monitor info
+        std::ofstream logStream("info_" + std::to_string(rank) + ".log");
+        adios.MonitorGroups(logStream);
 
-    for (int it = 1; it <= 13; it++)
-    {
+        for (int it = 1; it <= 13; it++)
+        {
 
-      for (int i = 0; i < NX; i++)
-      {
-        t[i] = it * 100.0 + rank * NX + i;
-        p[i] = it * 1000.0 + rank * NX + i;
-      }
+            for (int i = 0; i < NX; i++)
+            {
+                t[i] = it * 100.0 + rank * NX + i;
+                p[i] = it * 1000.0 + rank * NX + i;
+            }
 
-      //            if (it==1)
-      //                adios.Open("arrays", "globalArray.bp", "w");
-      //            else
-      //                adios.Open("arrays", "globalArray.bp", "a");
+            //            if (it==1)
+            //                adios.Open("arrays", "globalArray.bp", "w");
+            //            else
+            //                adios.Open("arrays", "globalArray.bp", "a");
 
-      // uint64_t    adios_groupsize, adios_totalsize;
-      // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
-      // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
+            // uint64_t    adios_groupsize, adios_totalsize;
+            // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
+            // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
 
-      ckptfile.Write("NX", &NX);
-      ckptfile.Write("pressure", &p);
-      // adios.Write ("arrays", "NX", &NX);
-      // adios.Write ("arrays", "size", &size);
-      // adios.Write ("arrays", "rank", &rank);
-      // adios.Write ("arrays", "temperature", t);
-      // adios.Write ("arrays", "pressure", &p);
+            ckptfile.Write("NX", &NX);
+            ckptfile.Write("pressure", &p);
+            // adios.Write ("arrays", "NX", &NX);
+            // adios.Write ("arrays", "size", &size);
+            // adios.Write ("arrays", "rank", &rank);
+            // adios.Write ("arrays", "temperature", t);
+            // adios.Write ("arrays", "pressure", &p);
 
-      // adios.Close ("arrays");
-      ckptfile.PerformIO();
-      MPI_Barrier(comm);
-      if (rank == 0)
-        printf("Timestep %d written\n", it);
+            // adios.Close ("arrays");
+            ckptfile.PerformIO();
+            MPI_Barrier(comm);
+            if (rank == 0)
+                printf("Timestep %d written\n", it);
+        }
+        MPI_Barrier(comm);
+        ckptfile.Close();
+        // need barrier before we destroy the ADIOS object here automatically
+        if (rank == 0)
+            printf("Finalize adios\n");
     }
-    MPI_Barrier(comm);
-    ckptfile.Close();
-    // need barrier before we destroy the ADIOS object here automatically
-    if (rank == 0)
-      printf("Finalize adios\n");
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  if (rank == 0)
-    printf("Finalize MPI\n");
-  MPI_Finalize();
-  return 0;
+    if (rank == 0)
+        printf("Finalize MPI\n");
+    MPI_Finalize();
+    return 0;
 }
diff --git a/examples/globalArray/globalArrayZeroCopy.cpp b/examples/globalArray/globalArrayZeroCopy.cpp
index 8206c131aa9388f39618f064c8b98ecdfacf2c42..a85b5dc56e77f55430e8c21920248cf196c22a2f 100644
--- a/examples/globalArray/globalArrayZeroCopy.cpp
+++ b/examples/globalArray/globalArrayZeroCopy.cpp
@@ -19,109 +19,111 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, size;
-  const int NX = 10;
-  MPI_Comm comm = MPI_COMM_WORLD;
-
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
-
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios("globalArrayNoXML.xml", comm, true);
-
-    // set a maximum buffersize that ADIOS can use (for one group).
-    // multiple groups may use each such buffersize if they are overlapped or
-    // use time-aggregation or use zero-copy staging
-    adios.SetMaxBuffersize(100000000);
-
-    // Define Group and its variables
-    // The group's transport can be defined at runtime in the input XML file
-    adios.CreateGroup("arrays", adios_stat_default);
-
-    // Set the maximum buffersize for this group. This must happen before
-    // defining a zero copy variable, which will cause the group's internal
-    // buffer
-    // allocated (during the variable definition call)
-    adios.SetMaxBuffersize("arrays", 10000000);
-
-    adios.DefineVariable("arrays", "NX", "int"); // scalar variable
-    adios.DefineVariable("arrays", "size", "int");
-    adios.DefineVariable("arrays", "size", "rank");
-
-    // Define and allocate a 2D array with 1D decomposition and get back a
-    // pre-allocated typed pointer.
-    // The size of the array must be known at this point, so no scalar variables
-    // can
-    // be used for its dimensions.
-    std::string ldim = "1," + std::to_string(NX); // == "1,10" if NX==10
-    std::string gdim = std::to_string(size) + "," + std::to_string(NX);
-    std::string offs = std::to_string(rank) + ",0";
-
-    double *t = adios.DefineZeroCopyVariable("arrays", "temperature", "double",
-                                             ldim, gdim, offs);
-
-    // set a variable-level transformation for this variable
-    adios.SetVariableTransform("arrays", "temperature", "none");
-
-    std::vector<double> p = adios.DefineZeroCopyVariable(
-        "arrays", "pressure", "std::vector<double>", ldim, gdim, offs);
-
-    // set a group-level transformation
-    adios.SetGroupTransform("arrays", "time-aggregate",
-                            ""); // no options passed here
-
-    // Get Monitor info
-    std::ofstream logStream("info_" + std::to_string(rank) + ".log");
-    adios.MonitorGroups(logStream);
-
-    for (int it = 1; it <= 13; it++)
-    {
+    int rank, size;
+    const int NX = 10;
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
 
-      for (int i = 0; i < NX; i++)
-      {
-        t[i] = it * 100.0 + rank * NX + i;
-        p[i] = it * 1000.0 + rank * NX + i;
-      }
-
-      if (it == 1)
-        adios.Open("arrays", "globalArray.bp", "w");
-      else
-        adios.Open("arrays", "globalArray.bp", "a");
-
-      // uint64_t    adios_groupsize, adios_totalsize;
-      // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
-      // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
-
-      adios.Write("arrays", "NX", &NX);
-      adios.Write("arrays", "size", &size);
-      adios.Write("arrays", "rank", &rank);
-      adios.Write("arrays", "temperature", t);
-      adios.Write("arrays", "pressure", &p);
-
-      adios.Close("arrays");
-      MPI_Barrier(comm);
-      if (rank == 0)
-        printf("Timestep %d written\n", it);
+    try
+    {
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios("globalArrayNoXML.xml", comm, true);
+
+        // set a maximum buffersize that ADIOS can use (for one group).
+        // multiple groups may use each such buffersize if they are overlapped
+        // or
+        // use time-aggregation or use zero-copy staging
+        adios.SetMaxBuffersize(100000000);
+
+        // Define Group and its variables
+        // The group's transport can be defined at runtime in the input XML file
+        adios.CreateGroup("arrays", adios_stat_default);
+
+        // Set the maximum buffersize for this group. This must happen before
+        // defining a zero copy variable, which will cause the group's internal
+        // buffer
+        // allocated (during the variable definition call)
+        adios.SetMaxBuffersize("arrays", 10000000);
+
+        adios.DefineVariable("arrays", "NX", "int"); // scalar variable
+        adios.DefineVariable("arrays", "size", "int");
+        adios.DefineVariable("arrays", "size", "rank");
+
+        // Define and allocate a 2D array with 1D decomposition and get back a
+        // pre-allocated typed pointer.
+        // The size of the array must be known at this point, so no scalar
+        // variables
+        // can
+        // be used for its dimensions.
+        std::string ldim = "1," + std::to_string(NX); // == "1,10" if NX==10
+        std::string gdim = std::to_string(size) + "," + std::to_string(NX);
+        std::string offs = std::to_string(rank) + ",0";
+
+        double *t = adios.DefineZeroCopyVariable("arrays", "temperature",
+                                                 "double", ldim, gdim, offs);
+
+        // set a variable-level transformation for this variable
+        adios.SetVariableTransform("arrays", "temperature", "none");
+
+        std::vector<double> p = adios.DefineZeroCopyVariable(
+            "arrays", "pressure", "std::vector<double>", ldim, gdim, offs);
+
+        // set a group-level transformation
+        adios.SetGroupTransform("arrays", "time-aggregate",
+                                ""); // no options passed here
+
+        // Get Monitor info
+        std::ofstream logStream("info_" + std::to_string(rank) + ".log");
+        adios.MonitorGroups(logStream);
+
+        for (int it = 1; it <= 13; it++)
+        {
+
+            for (int i = 0; i < NX; i++)
+            {
+                t[i] = it * 100.0 + rank * NX + i;
+                p[i] = it * 1000.0 + rank * NX + i;
+            }
+
+            if (it == 1)
+                adios.Open("arrays", "globalArray.bp", "w");
+            else
+                adios.Open("arrays", "globalArray.bp", "a");
+
+            // uint64_t    adios_groupsize, adios_totalsize;
+            // adios_groupsize = 4 + 4 + 4 + 2*NX*sizeof(double);
+            // adios_totalsize = adios.GroupSize("arrays", adios_groupsize);
+
+            adios.Write("arrays", "NX", &NX);
+            adios.Write("arrays", "size", &size);
+            adios.Write("arrays", "rank", &rank);
+            adios.Write("arrays", "temperature", t);
+            adios.Write("arrays", "pressure", &p);
+
+            adios.Close("arrays");
+            MPI_Barrier(comm);
+            if (rank == 0)
+                printf("Timestep %d written\n", it);
+        }
+        MPI_Barrier(comm);
+        // need barrier before we destroy the ADIOS object here automatically
+        if (rank == 0)
+            printf("Finalize adios\n");
     }
-    MPI_Barrier(comm);
-    // need barrier before we destroy the ADIOS object here automatically
-    if (rank == 0)
-      printf("Finalize adios\n");
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  if (rank == 0)
-    printf("Finalize MPI\n");
-  MPI_Finalize();
-  return 0;
+    if (rank == 0)
+        printf("Finalize MPI\n");
+    MPI_Finalize();
+    return 0;
 }
diff --git a/examples/groupless/basic/reader.cpp b/examples/groupless/basic/reader.cpp
index ea8832438a92fc97b1ceb5c78efe033079d18b4c..1e91476b27d48444819de5f303b1f1dcdf82f576 100644
--- a/examples/groupless/basic/reader.cpp
+++ b/examples/groupless/basic/reader.cpp
@@ -16,178 +16,183 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  std::vector<double> NiceArray;
-  std::vector<float> RaggedArray;
-  unsigned int Nx;
-  int Nparts;
-  int Nwriters;
-
-  try
-  {
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpReaderSettings = adios.GetMethod("input");
-    if (bpReaderSettings.undeclared())
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    // Application variable
+    std::vector<double> NiceArray;
+    std::vector<float> RaggedArray;
+    unsigned int Nx;
+    int Nparts;
+    int Nwriters;
+
+    try
     {
-      // if not defined by user, we can change the default settings
-      bpReaderSettings.SetEngine("BP"); // BP is the default engine
-    }
-
-    // Create engine smart pointer due to polymorphism,
-    // Default behavior
-    // auto bpReader = adios.Open( "myNumbers.bp", "r" );
-    // this would just open with a default transport, which is "BP"
-    auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
-
-    // All the above is same as default use:
-    // auto bpReader = adios.Open( "myNumbers.bp", "r");
-
-    if (bpReader == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpReader\n");
-
-    /* Variable names are available as a vector of strings */
-    std::cout << "List of variables in file: " << bpReader->VariableNames
-              << "\n";
-
-    /* NX */
-    bpReader->Read<unsigned int>(
-        "NX", Nx); // read a Global scalar which has a single value in a step
-
-    /* nproc */
-    bpReader->Read<int>("nproc", Nwriters); // also a global scalar
-
-    /* Nparts */
-    // Nparts local scalar is presented as a 1D array of Nwriters elements.
-    // We need to read a specific value the same way as reading from any 1D
-    // array.
-    // Make a single-value selection to describe our rank's position in the
-    // 1D array of Nwriters values.
-    if (rank < Nwriters)
-    {
-      std::shared_ptr<adios::Variable> varNparts =
-          bpReader.InquiryVariable("Nparts");
-      std::unique_ptr<adios::Selection> selNparts =
-          adios.SelectionBoundingBox({1}, {rank});
-      varNparts->SetSelection(selNparts);
-      bpReader->Read<int>(varNparts, Nparts);
-    }
-    // or we could just read the whole array by every process
-    std::vector<int> partsV(Nwriters);
-    bpReader->Read<int>(
-        "Nparts",
-        partsV
-            .data()); // read with string name, no selection => read whole array
-
-    std::vector<int> partsV;
-    bpReader->Read<int>(
-        "Nparts",
-        partsV); // read with string name, no selection => read whole array
-    (Nwriters == partsV.size())
-
-        /* Nice */
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpReaderSettings = adios.GetMethod("input");
+        if (bpReaderSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpReaderSettings.SetEngine("BP"); // BP is the default engine
+        }
+
+        // Create engine smart pointer due to polymorphism,
+        // Default behavior
+        // auto bpReader = adios.Open( "myNumbers.bp", "r" );
+        // this would just open with a default transport, which is "BP"
+        auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
+
+        // All the above is same as default use:
+        // auto bpReader = adios.Open( "myNumbers.bp", "r");
+
+        if (bpReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpReader\n");
+
+        /* Variable names are available as a vector of strings */
+        std::cout << "List of variables in file: " << bpReader->VariableNames
+                  << "\n";
+
+        /* NX */
+        bpReader->Read<unsigned int>(
+            "NX",
+            Nx); // read a Global scalar which has a single value in a step
+
+        /* nproc */
+        bpReader->Read<int>("nproc", Nwriters); // also a global scalar
+
+        /* Nparts */
+        // Nparts local scalar is presented as a 1D array of Nwriters elements.
+        // We need to read a specific value the same way as reading from any 1D
+        // array.
+        // Make a single-value selection to describe our rank's position in the
+        // 1D array of Nwriters values.
+        if (rank < Nwriters)
+        {
+            std::shared_ptr<adios::Variable> varNparts =
+                bpReader.InquiryVariable("Nparts");
+            std::unique_ptr<adios::Selection> selNparts =
+                adios.SelectionBoundingBox({1}, {rank});
+            varNparts->SetSelection(selNparts);
+            bpReader->Read<int>(varNparts, Nparts);
+        }
+        // or we could just read the whole array by every process
+        std::vector<int> partsV(Nwriters);
+        bpReader->Read<int>("Nparts",
+                            partsV.data()); // read with string name, no
+                                            // selection => read whole array
+
+        std::vector<int> partsV;
+        bpReader->Read<int>("Nparts",
+                            partsV); // read with string name, no selection =>
+                                     // read whole array
+        (Nwriters == partsV.size())
+
+            /* Nice */
+            // inquiry about a variable, whose name we know
+            std::shared_ptr<adios::Variable>
+                varNice = bpReader.InquiryVariable("Nice");
+
+        if (varNice == nullptr)
+            throw std::ios_base::failure("ERROR: failed to find variable "
+                                         "'myDoubles' in input file\n");
+
+        // ? how do we know about the type? std::string varNice->m_Type
+        uint64_t gdim =
+            varNice->m_GlobalDimensions[0]; // ?member var or member func?
+        uint64_t ldim = gdim / nproc;
+        uint64_t offs = rank * ldim;
+        if (rank == nproc - 1)
+        {
+            ldim = gdim - (ldim * gdim);
+        }
+
+        NiceArray.reserve(ldim);
+
+        // Make a 1D selection to describe the local dimensions of the variable
+        // we
+        // READ and
+        // its offsets in the global spaces
+        std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
+            {ldim}, {offs}); // local dims and offsets; both as list
+        varNice->SetSelection(bbsel);
+        bpReader->Read<double>(varNice, NiceArray.data());
+
+        /* Ragged */
         // inquiry about a variable, whose name we know
-        std::shared_ptr<adios::Variable>
-            varNice = bpReader.InquiryVariable("Nice");
-
-    if (varNice == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to find variable 'myDoubles' in input file\n");
-
-    // ? how do we know about the type? std::string varNice->m_Type
-    uint64_t gdim =
-        varNice->m_GlobalDimensions[0]; // ?member var or member func?
-    uint64_t ldim = gdim / nproc;
-    uint64_t offs = rank * ldim;
-    if (rank == nproc - 1)
-    {
-      ldim = gdim - (ldim * gdim);
-    }
-
-    NiceArray.reserve(ldim);
-
-    // Make a 1D selection to describe the local dimensions of the variable we
-    // READ and
-    // its offsets in the global spaces
-    std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
-        {ldim}, {offs}); // local dims and offsets; both as list
-    varNice->SetSelection(bbsel);
-    bpReader->Read<double>(varNice, NiceArray.data());
-
-    /* Ragged */
-    // inquiry about a variable, whose name we know
-    std::shared_ptr<adios::Variable<void>> varRagged =
-        bpReader.InquiryVariable("Ragged");
-    if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
-    {
-      throw std::ios_base::failure(
-          "Unexpected condition: Ragged array's fast dimension "
-          "is supposed to be VARYING_DIMENSION\n");
-    }
-    // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
-    if (rank < varRagged->nblocks[0]) // same as rank < Nwriters in this example
-    {
-      // get per-writer size information
-      varRagged->InquiryBlocks();
-      // now we have the dimensions per block
-
-      unsigned long long int ldim = varRagged->blockinfo[rank].m_Dimensions[1];
-      RaggedArray.resize(ldim);
-
-      std::unique_ptr<adios::Selection> wbsel = adios.SelectionWriteblock(rank);
-      varRagged->SetSelection(wbsel);
-      bpReader->Read<float>(varRagged, RaggedArray.data());
-
-      // We can use bounding box selection as well
-      std::unique_ptr<adios::Selection> rbbsel =
-          adios.SelectionBoundingBox({1, ldim}, {rank, 0});
-      varRagged->SetSelection(rbbsel);
-      bpReader->Read<float>(varRagged, RaggedArray.data());
+        std::shared_ptr<adios::Variable<void>> varRagged =
+            bpReader.InquiryVariable("Ragged");
+        if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
+        {
+            throw std::ios_base::failure(
+                "Unexpected condition: Ragged array's fast dimension "
+                "is supposed to be VARYING_DIMENSION\n");
+        }
+        // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
+        if (rank <
+            varRagged->nblocks[0]) // same as rank < Nwriters in this example
+        {
+            // get per-writer size information
+            varRagged->InquiryBlocks();
+            // now we have the dimensions per block
+
+            unsigned long long int ldim =
+                varRagged->blockinfo[rank].m_Dimensions[1];
+            RaggedArray.resize(ldim);
+
+            std::unique_ptr<adios::Selection> wbsel =
+                adios.SelectionWriteblock(rank);
+            varRagged->SetSelection(wbsel);
+            bpReader->Read<float>(varRagged, RaggedArray.data());
+
+            // We can use bounding box selection as well
+            std::unique_ptr<adios::Selection> rbbsel =
+                adios.SelectionBoundingBox({1, ldim}, {rank, 0});
+            varRagged->SetSelection(rbbsel);
+            bpReader->Read<float>(varRagged, RaggedArray.data());
+        }
+
+        /* Extra help to process Ragged */
+        int maxRaggedDim =
+            varRagged->GetMaxGlobalDimensions(1); // contains the largest
+        std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
+            1); // contains all individual sizes in that dimension
+
+        // Close file/stream
+        bpReader->Close();
     }
-
-    /* Extra help to process Ragged */
-    int maxRaggedDim =
-        varRagged->GetMaxGlobalDimensions(1); // contains the largest
-    std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
-        1); // contains all individual sizes in that dimension
-
-    // Close file/stream
-    bpReader->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/basic/writer.cpp b/examples/groupless/basic/writer.cpp
index 33debd164199378814b12c12af7c74462e65d057..cbd556ccc1cabf313b470b22fd84da2ca8ca9409 100644
--- a/examples/groupless/basic/writer.cpp
+++ b/examples/groupless/basic/writer.cpp
@@ -21,143 +21,158 @@ typedef enum { VARYING_DIMENSION = -1, LOCAL_VALUE = 0, GLOBAL_VALUE = 1 };
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  const unsigned int Nx = 10;
-  const int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
-
-  std::vector<double> NiceArray(Nx);
-  for (int i = 0; i < Nx; i++)
-  {
-    NiceArray[i] = rank * Nx + (double)i;
-  }
-
-  std::vector<float> RaggedArray(Nparts);
-  for (int i = 0; i < Nparts; i++)
-  {
-    RaggedArray[i] = rank * Nx + (float)i;
-  }
-
-  try
-  {
-    // Define group and variables with transforms, variables don't have
-    // functions, only group can access variables
-    adios::Variable<unsigned int> &varNX = adios.DefineVariable<unsigned int>(
-        "NX"); // global single-value across processes
-    adios::Variable<int> &varNproc = adios.DefineVariable<int>(
-        "nproc", adios::GLOBAL_VALUE); // same def for global value
-    adios::Variable<int> &varNparts = adios.DefineVariable<int>(
-        "Nparts",
-        adios::LOCAL_VALUE); // a single-value different on every process
-    adios::Variable<double> &varNice =
-        adios.DefineVariable<double>("Nice", {nproc * Nx}); // 1D global array
-    adios::Variable<float> &varRagged = adios.DefineVariable<float>(
-        "Ragged", {nproc, adios::VARYING_DIMENSION}); // ragged array
-
-    // add transform to variable in group...not executed (just testing API)
-    adios::Transform bzip2 = adios::transform::BZIP2();
-    varNice->AddTransform(bzip2, 1);
-
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpWriterSettings = adios.GetMethod("output");
-    if (bpWriterSettings.undeclared())
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    // Application variable
+    const unsigned int Nx = 10;
+    const int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
+
+    std::vector<double> NiceArray(Nx);
+    for (int i = 0; i < Nx; i++)
     {
-      // if not defined by user, we can change the default settings
-      bpWriterSettings.SetEngine("BP"); // BP is the default engine
-      bpWriterSettings.AddTransport(
-          "File", "lucky=yes"); // ISO-POSIX file is the default transport
-                                // Passing parameters to the transport
-      bpWriterSettings.SetParameters("have_metadata_file",
-                                     "yes"); // Passing parameters to the engine
-      bpWriterSettings.SetParameters("Aggregation",
-                                     (nproc + 1) / 2); // number of aggregators
+        NiceArray[i] = rank * Nx + (double)i;
     }
 
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    // "w" means we overwrite any existing file on disk, but AdvanceStep will
-    // append steps later.
-    auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpWriter\n");
+    std::vector<float> RaggedArray(Nparts);
+    for (int i = 0; i < Nparts; i++)
+    {
+        RaggedArray[i] = rank * Nx + (float)i;
+    }
 
-    if (rank == 0)
+    try
     {
-      // Writing a global scalar from only one process
-      bpWriter->Write<unsigned int>(varNX, Nx);
+        // Define group and variables with transforms, variables don't have
+        // functions, only group can access variables
+        adios::Variable<unsigned int> &varNX =
+            adios.DefineVariable<unsigned int>(
+                "NX"); // global single-value across processes
+        adios::Variable<int> &varNproc = adios.DefineVariable<int>(
+            "nproc", adios::GLOBAL_VALUE); // same def for global value
+        adios::Variable<int> &varNparts =
+            adios.DefineVariable<int>("Nparts",
+                                      adios::LOCAL_VALUE); // a single-value
+                                                           // different on
+                                                           // every process
+        adios::Variable<double> &varNice = adios.DefineVariable<double>(
+            "Nice", {nproc * Nx}); // 1D global array
+        adios::Variable<float> &varRagged = adios.DefineVariable<float>(
+            "Ragged", {nproc, adios::VARYING_DIMENSION}); // ragged array
+
+        // add transform to variable in group...not executed (just testing API)
+        adios::Transform bzip2 = adios::transform::BZIP2();
+        varNice->AddTransform(bzip2, 1);
+
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpWriterSettings = adios.GetMethod("output");
+        if (bpWriterSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpWriterSettings.SetEngine("BP"); // BP is the default engine
+            bpWriterSettings.AddTransport(
+                "File",
+                "lucky=yes"); // ISO-POSIX file is the default transport
+                              // Passing parameters to the transport
+            bpWriterSettings.SetParameters(
+                "have_metadata_file",
+                "yes"); // Passing parameters to the engine
+            bpWriterSettings.SetParameters("Aggregation",
+                                           (nproc + 1) /
+                                               2); // number of aggregators
+        }
+
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        // "w" means we overwrite any existing file on disk, but AdvanceStep
+        // will
+        // append steps later.
+        auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpWriter\n");
+
+        if (rank == 0)
+        {
+            // Writing a global scalar from only one process
+            bpWriter->Write<unsigned int>(varNX, Nx);
+        }
+        // Writing a local scalar on every process. Will be shown at reading as
+        // a 1D
+        // array
+        bpWriter->Write<int>(varNparts, Nparts);
+
+        // Writing a global scalar on every process is useless. Information will
+        // be
+        // thrown away
+        // and only rank 0's data will be in the output
+        bpWriter->Write<int>(varNproc, nproc);
+
+        // Make a 1D selection to describe the local dimensions of the variable
+        // we
+        // write and
+        // its offsets in the global spaces
+        adios::Selection &sel = adios.SelectionBoundingBox(
+            {Nx}, {rank * Nx}); // local dims and offsets; both as list
+        varNice.SetSelection(sel);
+        bpWriter->Write<double>(varNice,
+                                NiceArray.data()); // Base class Engine own
+                                                   // the Write<T> that
+                                                   // will call overloaded
+                                                   // Write from Derived
+
+        adios::Selection &lsel =
+            adios.SelectionBoundingBox({1, Nparts}, {rank, 0});
+        varRagged.SetSelection(sel);
+        bpWriter->Write<float>(varRagged,
+                               RaggedArray.data()); // Base class Engine
+                                                    // own the Write<T>
+                                                    // that will call
+                                                    // overloaded Write
+                                                    // from Derived
+
+        // Indicate we are done for this step
+        // N-to-M Aggregation, disk I/O will be performed during this call,
+        // unless
+        // time aggregation postpones all of that to some later step
+        bpWriter->Advance();
+        bpWriter->AdvanceAsync(callback_func_to_notify_me);
+
+        // Called once: indicate that we are done with this output for the run
+        bpWriter->Close();
     }
-    // Writing a local scalar on every process. Will be shown at reading as a 1D
-    // array
-    bpWriter->Write<int>(varNparts, Nparts);
-
-    // Writing a global scalar on every process is useless. Information will be
-    // thrown away
-    // and only rank 0's data will be in the output
-    bpWriter->Write<int>(varNproc, nproc);
-
-    // Make a 1D selection to describe the local dimensions of the variable we
-    // write and
-    // its offsets in the global spaces
-    adios::Selection &sel = adios.SelectionBoundingBox(
-        {Nx}, {rank * Nx}); // local dims and offsets; both as list
-    varNice.SetSelection(sel);
-    bpWriter->Write<double>(varNice, NiceArray.data()); // Base class Engine own
-                                                        // the Write<T> that
-                                                        // will call overloaded
-                                                        // Write from Derived
-
-    adios::Selection &lsel = adios.SelectionBoundingBox({1, Nparts}, {rank, 0});
-    varRagged.SetSelection(sel);
-    bpWriter->Write<float>(varRagged, RaggedArray.data()); // Base class Engine
-                                                           // own the Write<T>
-                                                           // that will call
-                                                           // overloaded Write
-                                                           // from Derived
-
-    // Indicate we are done for this step
-    // N-to-M Aggregation, disk I/O will be performed during this call, unless
-    // time aggregation postpones all of that to some later step
-    bpWriter->Advance();
-    bpWriter->AdvanceAsync(callback_func_to_notify_me);
-
-    // Called once: indicate that we are done with this output for the run
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/compound/reader.cpp b/examples/groupless/compound/reader.cpp
index 6dc89ad4bd512c915409c6f1902c76739234d641..58a0e1fd69bb18293f1445ab082d2631683132b1 100644
--- a/examples/groupless/compound/reader.cpp
+++ b/examples/groupless/compound/reader.cpp
@@ -16,201 +16,207 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  //  Application variable
-  //  GSE === user-defined structure
-  //
-  //  Like HDF5 example, read with a subset of the structure that was written.
-  //  Easily handled by FFS and HDF5, but ambitious for ADIOS
-  typedef struct s2_t
-  {
-    double c;
-    int a;
-  };
-  unsigned int Nx;
-  int Nparts;
-  int Nwriters;
-
-  try
-  {
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpReaderSettings = adios.GetMethod("input");
-    if (bpReaderSettings.undeclared())
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    //  Application variable
+    //  GSE === user-defined structure
+    //
+    //  Like HDF5 example, read with a subset of the structure that was written.
+    //  Easily handled by FFS and HDF5, but ambitious for ADIOS
+    typedef struct s2_t
     {
-      // if not defined by user, we can change the default settings
-      bpReaderSettings.SetEngine("BP"); // BP is the default engine
-    }
-
-    // Create engine smart pointer due to polymorphism,
-    // Default behavior
-    // auto bpReader = adios.Open( "myNumbers.bp", "r" );
-    // this would just open with a default transport, which is "BP"
-    auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
-
-    // All the above is same as default use:
-    // auto bpReader = adios.Open( "myNumbers.bp", "r");
-
-    if (bpReader == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpReader\n");
-
-    /* Variable names are available as a vector of strings */
-    std::cout << "List of variables in file: " << bpReader->VariableNames
-              << "\n";
-
-    /* NX */
-    bpReader->Read<unsigned int>(
-        "NX", Nx); // read a Global scalar which has a single value in a step
-
-    /* nproc */
-    bpReader->Read<int>("nproc", Nwriters); // also a global scalar
-
-    /* Nparts */
-    // Nparts local scalar is presented as a 1D array of Nwriters elements.
-    // We need to read a specific value the same way as reading from any 1D
-    // array.
-    // Make a single-value selection to describe our rank's position in the
-    // 1D array of Nwriters values.
-    if (rank < Nwriters)
+        double c;
+        int a;
+    };
+    unsigned int Nx;
+    int Nparts;
+    int Nwriters;
+
+    try
     {
-      std::shared_ptr<adios::Variable> varNparts =
-          bpReader.InquiryVariable("Nparts");
-      std::unique_ptr<adios::Selection> selNparts =
-          adios.SelectionBoundingBox({1}, {rank});
-      varNparts->SetSelection(selNparts);
-      bpReader->Read<int>(varNparts, Nparts);
-    }
-    // or we could just read the whole array by every process
-    std::vector<int> partsV(Nwriters);
-    bpReader->Read<int>(
-        "Nparts",
-        partsV
-            .data()); // read with string name, no selection => read whole array
-
-    std::vector<int> partsV;
-    bpReader->Read<int>(
-        "Nparts",
-        partsV); // read with string name, no selection => read whole array
-    (Nwriters == partsV.size())
-
-        /* Nice */
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpReaderSettings = adios.GetMethod("input");
+        if (bpReaderSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpReaderSettings.SetEngine("BP"); // BP is the default engine
+        }
+
+        // Create engine smart pointer due to polymorphism,
+        // Default behavior
+        // auto bpReader = adios.Open( "myNumbers.bp", "r" );
+        // this would just open with a default transport, which is "BP"
+        auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
+
+        // All the above is same as default use:
+        // auto bpReader = adios.Open( "myNumbers.bp", "r");
+
+        if (bpReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpReader\n");
+
+        /* Variable names are available as a vector of strings */
+        std::cout << "List of variables in file: " << bpReader->VariableNames
+                  << "\n";
+
+        /* NX */
+        bpReader->Read<unsigned int>(
+            "NX",
+            Nx); // read a Global scalar which has a single value in a step
+
+        /* nproc */
+        bpReader->Read<int>("nproc", Nwriters); // also a global scalar
+
+        /* Nparts */
+        // Nparts local scalar is presented as a 1D array of Nwriters elements.
+        // We need to read a specific value the same way as reading from any 1D
+        // array.
+        // Make a single-value selection to describe our rank's position in the
+        // 1D array of Nwriters values.
+        if (rank < Nwriters)
+        {
+            std::shared_ptr<adios::Variable> varNparts =
+                bpReader.InquiryVariable("Nparts");
+            std::unique_ptr<adios::Selection> selNparts =
+                adios.SelectionBoundingBox({1}, {rank});
+            varNparts->SetSelection(selNparts);
+            bpReader->Read<int>(varNparts, Nparts);
+        }
+        // or we could just read the whole array by every process
+        std::vector<int> partsV(Nwriters);
+        bpReader->Read<int>("Nparts",
+                            partsV.data()); // read with string name, no
+                                            // selection => read whole array
+
+        std::vector<int> partsV;
+        bpReader->Read<int>("Nparts",
+                            partsV); // read with string name, no selection =>
+                                     // read whole array
+        (Nwriters == partsV.size())
+
+            /* Nice */
+            // inquiry about a variable, whose name we know
+            /* GSE === compound type declaration borrowed heavily from HDF5
+               style */
+            adios::CompType mtype(sizeof(s2_t));
+        mtype.insertMember("c_name", OFFSET(s2_t, c), PredType::NATIVE_DOUBLE);
+        mtype.insertMember("a_name", OFFSET(s2_t, a), PredType::NATIVE_INT);
+
+        /*
+         *   GSE === this is a bit conceptually different.  There was no real
+         *   check in the prior API that the variable in the file was in any way
+         *   "compatible" with how we planned to read it.  This could be done
+         *   here, by providing the details of the structure that we are
+         *   prepared to read in the inquiryVariable, or if we had an API that
+         *   allowed more introspection, we could perhaps support a query on the
+         *   adios::Variable and a later operation that informed it of the data
+         *   type that we were prepared to extract from it.
+         */
+        std::shared_ptr<adios::Variable> varNice =
+            bpReader.InquiryVariable("Nice", mtype);
+
+        if (varNice == nullptr)
+            throw std::ios_base::failure("ERROR: failed to find variable "
+                                         "'myDoubles' in input file\n");
+
+        // ? how do we know about the type? std::string varNice->m_Type
+        uint64_t gdim =
+            varNice->m_GlobalDimensions[0]; // ?member var or member func?
+        uint64_t ldim = gdim / nproc;
+        uint64_t offs = rank * ldim;
+        if (rank == nproc - 1)
+        {
+            ldim = gdim - (ldim * gdim);
+        }
+
+        NiceArray.reserve(ldim);
+
+        // Make a 1D selection to describe the local dimensions of the variable
+        // we
+        // READ and
+        // its offsets in the global spaces
+        std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
+            {ldim}, {offs}); // local dims and offsets; both as list
+        varNice->SetSelection(bbsel);
+        // GSE ===   Again, templated here?
+        bpReader->Read<s2_t>(varNice, NiceArray.data());
+
+        /* Ragged */
         // inquiry about a variable, whose name we know
-        /* GSE === compound type declaration borrowed heavily from HDF5 style */
-        adios::CompType mtype(sizeof(s2_t));
-    mtype.insertMember("c_name", OFFSET(s2_t, c), PredType::NATIVE_DOUBLE);
-    mtype.insertMember("a_name", OFFSET(s2_t, a), PredType::NATIVE_INT);
-
-    /*
-     *   GSE === this is a bit conceptually different.  There was no real
-     *   check in the prior API that the variable in the file was in any way
-     *   "compatible" with how we planned to read it.  This could be done
-     *   here, by providing the details of the structure that we are
-     *   prepared to read in the inquiryVariable, or if we had an API that
-     *   allowed more introspection, we could perhaps support a query on the
-     *   adios::Variable and a later operation that informed it of the data
-     *   type that we were prepared to extract from it.
-     */
-    std::shared_ptr<adios::Variable> varNice =
-        bpReader.InquiryVariable("Nice", mtype);
-
-    if (varNice == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to find variable 'myDoubles' in input file\n");
-
-    // ? how do we know about the type? std::string varNice->m_Type
-    uint64_t gdim =
-        varNice->m_GlobalDimensions[0]; // ?member var or member func?
-    uint64_t ldim = gdim / nproc;
-    uint64_t offs = rank * ldim;
-    if (rank == nproc - 1)
-    {
-      ldim = gdim - (ldim * gdim);
-    }
-
-    NiceArray.reserve(ldim);
-
-    // Make a 1D selection to describe the local dimensions of the variable we
-    // READ and
-    // its offsets in the global spaces
-    std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
-        {ldim}, {offs}); // local dims and offsets; both as list
-    varNice->SetSelection(bbsel);
-    // GSE ===   Again, templated here?
-    bpReader->Read<s2_t>(varNice, NiceArray.data());
-
-    /* Ragged */
-    // inquiry about a variable, whose name we know
-    std::shared_ptr<adios::Variable<void>> varRagged =
-        bpReader.InquiryVariable("Ragged");
-    if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
-    {
-      throw std::ios_base::failure(
-          "Unexpected condition: Ragged array's fast dimension "
-          "is supposed to be VARYING_DIMENSION\n");
-    }
-    // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
-    if (rank < varRagged->nblocks[0]) // same as rank < Nwriters in this example
-    {
-      // get per-writer size information
-      varRagged->InquiryBlocks();
-      // now we have the dimensions per block
-
-      unsigned long long int ldim = varRagged->blockinfo[rank].m_Dimensions[1];
-      RaggedArray.resize(ldim);
-
-      std::unique_ptr<adios::Selection> wbsel = adios.SelectionWriteblock(rank);
-      varRagged->SetSelection(wbsel);
-      bpReader->Read<float>(varRagged, RaggedArray.data());
-
-      // We can use bounding box selection as well
-      std::unique_ptr<adios::Selection> rbbsel =
-          adios.SelectionBoundingBox({1, ldim}, {rank, 0});
-      varRagged->SetSelection(rbbsel);
-      bpReader->Read<float>(varRagged, RaggedArray.data());
+        std::shared_ptr<adios::Variable<void>> varRagged =
+            bpReader.InquiryVariable("Ragged");
+        if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
+        {
+            throw std::ios_base::failure(
+                "Unexpected condition: Ragged array's fast dimension "
+                "is supposed to be VARYING_DIMENSION\n");
+        }
+        // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
+        if (rank <
+            varRagged->nblocks[0]) // same as rank < Nwriters in this example
+        {
+            // get per-writer size information
+            varRagged->InquiryBlocks();
+            // now we have the dimensions per block
+
+            unsigned long long int ldim =
+                varRagged->blockinfo[rank].m_Dimensions[1];
+            RaggedArray.resize(ldim);
+
+            std::unique_ptr<adios::Selection> wbsel =
+                adios.SelectionWriteblock(rank);
+            varRagged->SetSelection(wbsel);
+            bpReader->Read<float>(varRagged, RaggedArray.data());
+
+            // We can use bounding box selection as well
+            std::unique_ptr<adios::Selection> rbbsel =
+                adios.SelectionBoundingBox({1, ldim}, {rank, 0});
+            varRagged->SetSelection(rbbsel);
+            bpReader->Read<float>(varRagged, RaggedArray.data());
+        }
+
+        /* Extra help to process Ragged */
+        int maxRaggedDim =
+            varRagged->GetMaxGlobalDimensions(1); // contains the largest
+        std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
+            1); // contains all individual sizes in that dimension
+
+        // Close file/stream
+        bpReader->Close();
     }
-
-    /* Extra help to process Ragged */
-    int maxRaggedDim =
-        varRagged->GetMaxGlobalDimensions(1); // contains the largest
-    std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
-        1); // contains all individual sizes in that dimension
-
-    // Close file/stream
-    bpReader->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/compound/writer.cpp b/examples/groupless/compound/writer.cpp
index a235ebb4205ec148af8653717fc2407d26c8790c..f8c105e2f0508cccdf3d5322342afe0dc50c4286 100644
--- a/examples/groupless/compound/writer.cpp
+++ b/examples/groupless/compound/writer.cpp
@@ -21,146 +21,159 @@ typedef enum { VARYING_DIMENSION = -1, LOCAL_VALUE = 0, GLOBAL_VALUE = 1 };
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  const unsigned int Nx = 10;
-  //  GSE === user-defined structure
-  typedef struct s1_t
-  {
-    int a;
-    float b;
-    double c;
-  };
-  const int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
-
-  std::vector<s1_t> NiceArray(Nx);
-  for (int i = 0; i < Nx; i++)
-  {
-    NiceArray.push_back(ss1_t());
-    NiceArray[i].a = rank * Nx + (double)i;
-    NiceArray[i].b = 100.0 * rank * Nx + 100.0 * (double)i;
-    NiceArray[i].c = 10000.0 * rank * Nx + 10000.0 * (double)i;
-  }
-
-  try
-  {
-    /* GSE === compound type declaration borrowed heavily from HDF5 style */
-    adios::CompType mtype(sizeof(s1_t));
-    mtype.insertMember("a_name", OFFSET(s1_t, a), PredType::NATIVE_INT);
-    mtype.insertMember("c_name", OFFSET(s1_t, c), PredType::NATIVE_DOUBLE);
-    mtype.insertMember("b_name", OFFSET(s1_t, b), PredType::NATIVE_FLOAT);
-
-    // Define group and variables with transforms, variables don't have
-    // functions, only group can access variables
-    adios::Variable<unsigned int> &varNX = adios.DefineVariable<unsigned int>(
-        "NX"); // global single-value across processes
-    adios::Variable<int> &varNproc = adios.DefineVariable<int>(
-        "nproc", adios::GLOBAL_VALUE); // same def for global value
-    adios::Variable<int> &varNparts = adios.DefineVariable<int>(
-        "Nparts",
-        adios::LOCAL_VALUE); // a single-value different on every process
-
-    // GSE === template necessary or useful here? Extra argument for
-    // previously-built compound type information */
-    adios::Variable<s1_t> &varNice = adios.DefineVariable<s1_t>(
-        "Nice", {nproc * Nx}, mtype); // 1D global array
-
-    // add transform to variable in group...not executed (just testing API)
-    adios::Transform bzip2 = adios::transform::BZIP2();
-    varNice->AddTransform(bzip2, 1);
-
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpWriterSettings = adios.GetMethod("output");
-    if (bpWriterSettings.undeclared())
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    // Application variable
+    const unsigned int Nx = 10;
+    //  GSE === user-defined structure
+    typedef struct s1_t
     {
-      // if not defined by user, we can change the default settings
-      bpWriterSettings.SetEngine("BP"); // BP is the default engine
-      bpWriterSettings.AddTransport(
-          "File", "lucky=yes"); // ISO-POSIX file is the default transport
-                                // Passing parameters to the transport
-      bpWriterSettings.SetParameters("have_metadata_file",
-                                     "yes"); // Passing parameters to the engine
-      bpWriterSettings.SetParameters("Aggregation",
-                                     (nproc + 1) / 2); // number of aggregators
+        int a;
+        float b;
+        double c;
+    };
+    const int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
+
+    std::vector<s1_t> NiceArray(Nx);
+    for (int i = 0; i < Nx; i++)
+    {
+        NiceArray.push_back(ss1_t());
+        NiceArray[i].a = rank * Nx + (double)i;
+        NiceArray[i].b = 100.0 * rank * Nx + 100.0 * (double)i;
+        NiceArray[i].c = 10000.0 * rank * Nx + 10000.0 * (double)i;
     }
 
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    // "w" means we overwrite any existing file on disk, but AdvanceStep will
-    // append steps later.
-    auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpWriter\n");
-
-    if (rank == 0)
+    try
     {
-      // Writing a global scalar from only one process
-      bpWriter->Write<unsigned int>(varNX, Nx);
+        /* GSE === compound type declaration borrowed heavily from HDF5 style */
+        adios::CompType mtype(sizeof(s1_t));
+        mtype.insertMember("a_name", OFFSET(s1_t, a), PredType::NATIVE_INT);
+        mtype.insertMember("c_name", OFFSET(s1_t, c), PredType::NATIVE_DOUBLE);
+        mtype.insertMember("b_name", OFFSET(s1_t, b), PredType::NATIVE_FLOAT);
+
+        // Define group and variables with transforms, variables don't have
+        // functions, only group can access variables
+        adios::Variable<unsigned int> &varNX =
+            adios.DefineVariable<unsigned int>(
+                "NX"); // global single-value across processes
+        adios::Variable<int> &varNproc = adios.DefineVariable<int>(
+            "nproc", adios::GLOBAL_VALUE); // same def for global value
+        adios::Variable<int> &varNparts =
+            adios.DefineVariable<int>("Nparts",
+                                      adios::LOCAL_VALUE); // a single-value
+                                                           // different on
+                                                           // every process
+
+        // GSE === template necessary or useful here? Extra argument for
+        // previously-built compound type information */
+        adios::Variable<s1_t> &varNice = adios.DefineVariable<s1_t>(
+            "Nice", {nproc * Nx}, mtype); // 1D global array
+
+        // add transform to variable in group...not executed (just testing API)
+        adios::Transform bzip2 = adios::transform::BZIP2();
+        varNice->AddTransform(bzip2, 1);
+
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpWriterSettings = adios.GetMethod("output");
+        if (bpWriterSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpWriterSettings.SetEngine("BP"); // BP is the default engine
+            bpWriterSettings.AddTransport(
+                "File",
+                "lucky=yes"); // ISO-POSIX file is the default transport
+                              // Passing parameters to the transport
+            bpWriterSettings.SetParameters(
+                "have_metadata_file",
+                "yes"); // Passing parameters to the engine
+            bpWriterSettings.SetParameters("Aggregation",
+                                           (nproc + 1) /
+                                               2); // number of aggregators
+        }
+
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        // "w" means we overwrite any existing file on disk, but AdvanceStep
+        // will
+        // append steps later.
+        auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpWriter\n");
+
+        if (rank == 0)
+        {
+            // Writing a global scalar from only one process
+            bpWriter->Write<unsigned int>(varNX, Nx);
+        }
+        // Writing a local scalar on every process. Will be shown at reading as
+        // a 1D
+        // array
+        bpWriter->Write<int>(varNparts, Nparts);
+
+        // Writing a global scalar on every process is useless. Information will
+        // be
+        // thrown away
+        // and only rank 0's data will be in the output
+        bpWriter->Write<int>(varNproc, nproc);
+
+        // Make a 1D selection to describe the local dimensions of the variable
+        // we
+        // write and
+        // its offsets in the global spaces
+        adios::Selection &sel = adios.SelectionBoundingBox(
+            {Nx}, {rank * Nx}); // local dims and offsets; both as list
+        varNice.SetSelection(sel);
+
+        // GSE === Template useful or necessary here?   We have to treat this as
+        // a
+        // void* inside ADIOS...
+        bpWriter->Write<sl_t>(varNice, NiceArray.data());
+
+        // Indicate we are done for this step
+        // N-to-M Aggregation, disk I/O will be performed during this call,
+        // unless
+        // time aggregation postpones all of that to some later step
+        bpWriter->Advance();
+        bpWriter->AdvanceAsync(callback_func_to_notify_me);
+
+        // Called once: indicate that we are done with this output for the run
+        bpWriter->Close();
     }
-    // Writing a local scalar on every process. Will be shown at reading as a 1D
-    // array
-    bpWriter->Write<int>(varNparts, Nparts);
-
-    // Writing a global scalar on every process is useless. Information will be
-    // thrown away
-    // and only rank 0's data will be in the output
-    bpWriter->Write<int>(varNproc, nproc);
-
-    // Make a 1D selection to describe the local dimensions of the variable we
-    // write and
-    // its offsets in the global spaces
-    adios::Selection &sel = adios.SelectionBoundingBox(
-        {Nx}, {rank * Nx}); // local dims and offsets; both as list
-    varNice.SetSelection(sel);
-
-    // GSE === Template useful or necessary here?   We have to treat this as a
-    // void* inside ADIOS...
-    bpWriter->Write<sl_t>(varNice, NiceArray.data());
-
-    // Indicate we are done for this step
-    // N-to-M Aggregation, disk I/O will be performed during this call, unless
-    // time aggregation postpones all of that to some later step
-    bpWriter->Advance();
-    bpWriter->AdvanceAsync(callback_func_to_notify_me);
-
-    // Called once: indicate that we are done with this output for the run
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/multistep/reader_allsteps.cpp b/examples/groupless/multistep/reader_allsteps.cpp
index d71703dda7276d3dfc3c8bd19e495fbcb20ce011..1b28a82c72d71e1438c077f6b00ae88aa837a1f6 100644
--- a/examples/groupless/multistep/reader_allsteps.cpp
+++ b/examples/groupless/multistep/reader_allsteps.cpp
@@ -16,189 +16,201 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  std::vector<double> NiceArray;
-  std::vector<float> RaggedArray;
-
-  int Nparts;
-  int Nwriters;
-  int Nsteps;
-
-  try
-  {
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpReaderSettings = adios.GetMethod("input");
-    if (bpReaderSettings.undeclared())
-    {
-      // if not defined by user, we can change the default settings
-      bpReaderSettings.SetEngine("BP"); // BP is the default engine
-      // By default we see all steps available in a file, so the next line is
-      // not needed
-      bpReaderSettings.SetParameters("Stepping", false);
-    }
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
 
-    // Create engine smart pointer due to polymorphism,
-    // Default behavior
-    // auto bpReader = adios.Open( "myNumbers.bp", "r" );
-    // this would just open with a default transport, which is "BP"
-    auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
-
-    // All the above is same as default use:
-    // auto bpReader = adios.Open( "myNumbers.bp", "r");
-
-    if (bpReader == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpReader\n");
-
-    /* Note: there is no global number of steps. Each variable has its own
-     * number of steps */
-
-    /* NX */
-    /* There is a single value for each step. We can read all into a 1D array
-     * with a step selection.
-     * We can also just conveniently get the first with a simple read statement.
-     * Steps are not automatically presented as an array dimension and read does
-     * not read it as array.
-     */
-    unsigned int Nx;
-    bpReader->Read<unsigned int>(
-        "NX", &Nx); // read a Global scalar which has a single value in a step
-
-    std::shared_ptr<adios::Variable<void>> varNx =
-        bpReader.InquiryVariable("Nx");
-    std::vector<int> Nxs(varNx->nsteps()); // number of steps available
-    // make a StepSelection to select multiple steps. Args: From, #of
-    // consecutive steps
-    std::unique_ptr<adios::StepSelection> stepsNx =
-        adios.StepSelection(0, varNx->nsteps());
-    // ? How do we make a selection for an arbitrary list of steps ?
-    varNX.SetStepSelection(stepsNx);
-    bpReader->Read<unsigned int>(varNx, Nxs.data());
-
-    auto itmax = std::max_element(std::begin(Nxs), std::end(Nxs));
-    auto itmin = std::min_element(std::begin(Nxs), std::end(Nxs));
-    if (*itmin != *itmax)
-    {
-      throw std::ios_base::failure("ERROR: NX is not the same at all steps!\n");
-    }
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
 
-    /* nproc */
-    bpReader->Read<int>("nproc", &Nwriters); // also a global scalar
-
-    /* Nparts */
-    // Nparts local scalar is presented as a 1D array of Nwriters elements.
-    // We can read all steps into a 2D array of nproc * Nwriters
-    std::shared_ptr<adios::Variable<void>> varNparts =
-        bpReader.InquiryVariable("Nparts");
-    std::vector<int> partsV(Nproc * Nwriters);
-    varNparts->SetStepSelection(adios.StepSelection(0, varNparts->nsteps()));
-    bpReader->Read<int>(
-        varNparts,
-        partsV.data()); // missing spatial selection = whole array at each step
-
-    /* Nice */
-    // inquiry about a variable, whose name we know
-    std::shared_ptr<adios::Variable<void>> varNice =
-        bpReader.InquiryVariable("Nice");
-
-    if (varNice == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to find variable 'myDoubles' in input file\n");
-
-    // ? how do we know about the type? std::string varNice->m_Type
-    unsigned long long int gdim =
-        varMyDoubles->m_GlobalDimensions[0]; // ?member var or member func?
-    unsigned long long int ldim = gdim / nproc;
-    unsigned long long int offs = rank * ldim;
-    if (rank == nproc - 1)
-    {
-      ldim = gdim - (ldim * gdim);
-    }
+    // Application variable
+    std::vector<double> NiceArray;
+    std::vector<float> RaggedArray;
 
-    NiceArray.reserve(ldim);
-
-    // Make a 1D selection to describe the local dimensions of the variable we
-    // READ and
-    // its offsets in the global spaces
-    std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
-        {ldim}, {offs}); // local dims and offsets; both as list
-    bpReader->Read<double>("Nice", bbsel,
-                           NiceArray.data()); // Base class Engine own the
-                                              // Read<T> that will call
-                                              // overloaded Read from Derived
-
-    /* Ragged */
-    // inquiry about a variable, whose name we know
-    std::shared_ptr<adios::Variable<void>> varRagged =
-        bpReader.InquiryVariable("Ragged");
-    if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
-    {
-      throw std::ios_base::failure(
-          "Unexpected condition: Ragged array's fast dimension "
-          "is supposed to be VARYING_DIMENSION\n");
-    }
-    // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
-    if (rank < varRagged->nblocks[0]) // same as rank < Nwriters in this example
-    {
-      // get per-writer size information
-      varRagged->InquiryBlocks();
-      // now we have the dimensions per block
-
-      unsigned long long int ldim = varRagged->blockinfo[rank].m_Dimensions[0];
-      RaggedArray.resize(ldim);
+    int Nparts;
+    int Nwriters;
+    int Nsteps;
 
-      std::unique_ptr<adios::Selection> wbsel = adios.SelectionWriteblock(rank);
-      bpReader->Read<float>("Ragged", wbsel, RaggedArray.data());
-
-      // We can use bounding box selection as well
-      std::unique_ptr<adios::Selection> rbbsel =
-          adios.SelectionBoundingBox({1, ldim}, {rank, 0});
-      bpReader->Read<float>("Ragged", rbbsel, RaggedArray.data());
+    try
+    {
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpReaderSettings = adios.GetMethod("input");
+        if (bpReaderSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpReaderSettings.SetEngine("BP"); // BP is the default engine
+            // By default we see all steps available in a file, so the next line
+            // is
+            // not needed
+            bpReaderSettings.SetParameters("Stepping", false);
+        }
+
+        // Create engine smart pointer due to polymorphism,
+        // Default behavior
+        // auto bpReader = adios.Open( "myNumbers.bp", "r" );
+        // this would just open with a default transport, which is "BP"
+        auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
+
+        // All the above is same as default use:
+        // auto bpReader = adios.Open( "myNumbers.bp", "r");
+
+        if (bpReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpReader\n");
+
+        /* Note: there is no global number of steps. Each variable has its own
+         * number of steps */
+
+        /* NX */
+        /* There is a single value for each step. We can read all into a 1D
+         * array
+         * with a step selection.
+         * We can also just conveniently get the first with a simple read
+         * statement.
+         * Steps are not automatically presented as an array dimension and read
+         * does
+         * not read it as array.
+         */
+        unsigned int Nx;
+        bpReader->Read<unsigned int>(
+            "NX",
+            &Nx); // read a Global scalar which has a single value in a step
+
+        std::shared_ptr<adios::Variable<void>> varNx =
+            bpReader.InquiryVariable("Nx");
+        std::vector<int> Nxs(varNx->nsteps()); // number of steps available
+        // make a StepSelection to select multiple steps. Args: From, #of
+        // consecutive steps
+        std::unique_ptr<adios::StepSelection> stepsNx =
+            adios.StepSelection(0, varNx->nsteps());
+        // ? How do we make a selection for an arbitrary list of steps ?
+        varNX.SetStepSelection(stepsNx);
+        bpReader->Read<unsigned int>(varNx, Nxs.data());
+
+        auto itmax = std::max_element(std::begin(Nxs), std::end(Nxs));
+        auto itmin = std::min_element(std::begin(Nxs), std::end(Nxs));
+        if (*itmin != *itmax)
+        {
+            throw std::ios_base::failure(
+                "ERROR: NX is not the same at all steps!\n");
+        }
+
+        /* nproc */
+        bpReader->Read<int>("nproc", &Nwriters); // also a global scalar
+
+        /* Nparts */
+        // Nparts local scalar is presented as a 1D array of Nwriters elements.
+        // We can read all steps into a 2D array of nproc * Nwriters
+        std::shared_ptr<adios::Variable<void>> varNparts =
+            bpReader.InquiryVariable("Nparts");
+        std::vector<int> partsV(Nproc * Nwriters);
+        varNparts->SetStepSelection(
+            adios.StepSelection(0, varNparts->nsteps()));
+        bpReader->Read<int>(varNparts,
+                            partsV.data()); // missing spatial selection = whole
+                                            // array at each step
+
+        /* Nice */
+        // inquiry about a variable, whose name we know
+        std::shared_ptr<adios::Variable<void>> varNice =
+            bpReader.InquiryVariable("Nice");
+
+        if (varNice == nullptr)
+            throw std::ios_base::failure("ERROR: failed to find variable "
+                                         "'myDoubles' in input file\n");
+
+        // ? how do we know about the type? std::string varNice->m_Type
+        unsigned long long int gdim =
+            varMyDoubles->m_GlobalDimensions[0]; // ?member var or member func?
+        unsigned long long int ldim = gdim / nproc;
+        unsigned long long int offs = rank * ldim;
+        if (rank == nproc - 1)
+        {
+            ldim = gdim - (ldim * gdim);
+        }
+
+        NiceArray.reserve(ldim);
+
+        // Make a 1D selection to describe the local dimensions of the variable
+        // we
+        // READ and
+        // its offsets in the global spaces
+        std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
+            {ldim}, {offs}); // local dims and offsets; both as list
+        bpReader->Read<double>("Nice", bbsel,
+                               NiceArray.data()); // Base class Engine own the
+                                                  // Read<T> that will call
+        // overloaded Read from Derived
+
+        /* Ragged */
+        // inquiry about a variable, whose name we know
+        std::shared_ptr<adios::Variable<void>> varRagged =
+            bpReader.InquiryVariable("Ragged");
+        if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
+        {
+            throw std::ios_base::failure(
+                "Unexpected condition: Ragged array's fast dimension "
+                "is supposed to be VARYING_DIMENSION\n");
+        }
+        // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
+        if (rank <
+            varRagged->nblocks[0]) // same as rank < Nwriters in this example
+        {
+            // get per-writer size information
+            varRagged->InquiryBlocks();
+            // now we have the dimensions per block
+
+            unsigned long long int ldim =
+                varRagged->blockinfo[rank].m_Dimensions[0];
+            RaggedArray.resize(ldim);
+
+            std::unique_ptr<adios::Selection> wbsel =
+                adios.SelectionWriteblock(rank);
+            bpReader->Read<float>("Ragged", wbsel, RaggedArray.data());
+
+            // We can use bounding box selection as well
+            std::unique_ptr<adios::Selection> rbbsel =
+                adios.SelectionBoundingBox({1, ldim}, {rank, 0});
+            bpReader->Read<float>("Ragged", rbbsel, RaggedArray.data());
+        }
+
+        /* Extra help to process Ragged */
+        int maxRaggedDim =
+            varRagged->GetMaxGlobalDimensions(1); // contains the largest
+        std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
+            1); // contains all individual sizes in that dimension
+
+        // Close file/stream
+        bpReader->Close();
     }
-
-    /* Extra help to process Ragged */
-    int maxRaggedDim =
-        varRagged->GetMaxGlobalDimensions(1); // contains the largest
-    std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
-        1); // contains all individual sizes in that dimension
-
-    // Close file/stream
-    bpReader->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/multistep/reader_stepping.cpp b/examples/groupless/multistep/reader_stepping.cpp
index df5adb7d542b9c031c6312bd6db4613b0c40467c..5328408da4249e62be66d2157a3cdb43a57ae703 100644
--- a/examples/groupless/multistep/reader_stepping.cpp
+++ b/examples/groupless/multistep/reader_stepping.cpp
@@ -16,185 +16,196 @@
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  std::vector<double> NiceArray;
-  std::vector<float> RaggedArray;
-  unsigned int Nx;
-  int Nparts;
-  int Nwriters;
-  int Nsteps;
-
-  try
-  {
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpReaderSettings = adios.GetMethod("input");
-    if (bpReaderSettings.undeclared())
-    {
-      // if not defined by user, we can change the default settings
-      bpReaderSettings.SetEngine("BP"); // BP is the default engine
-      bpReaderSettings.SetParameters("Stepping",
-                                     true); // see only one step at a time
-    }
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    // Application variable
+    std::vector<double> NiceArray;
+    std::vector<float> RaggedArray;
+    unsigned int Nx;
+    int Nparts;
+    int Nwriters;
+    int Nsteps;
 
-    // Create engine smart pointer due to polymorphism,
-    // Default behavior
-    // auto bpReader = adios.Open( "myNumbers.bp", "r" );
-    // this would just open with a default transport, which is "BP"
     try
     {
-      auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
-
-      while (true)
-      {
-        /* NX */
-        bpReader->Read<unsigned int>(
-            "NX",
-            &Nx); // read a Global scalar which has a single value in a step
-
-        /* nproc */
-        bpReader->Read<int>("nproc", &Nwriters); // also a global scalar
-
-        /* Nparts */
-        // Nparts local scalar is presented as a 1D array of Nwriters elements.
-        // We can read all as a 1D array
-        std::vector<int> partsV(Nwriters);
-        bpReader->Read<int>(
-            "Nparts",
-            &partsV); // read with string name, no selection => read whole array
-
-        /* Nice */
-        // inquiry about a variable, whose name we know
-        std::shared_ptr<adios::Variable<void>> varNice =
-            bpReader.InquiryVariable("Nice");
-
-        if (varNice == nullptr)
-          throw std::ios_base::failure(
-              "ERROR: failed to find variable 'myDoubles' in input file\n");
-
-        // ? how do we know about the type? std::string varNice->m_Type
-        unsigned long long int gdim =
-            varMyDoubles->m_GlobalDimensions[0]; // ?member var or member func?
-        unsigned long long int ldim = gdim / nproc;
-        unsigned long long int offs = rank * ldim;
-        if (rank == nproc - 1)
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpReaderSettings = adios.GetMethod("input");
+        if (bpReaderSettings.undeclared())
         {
-          ldim = gdim - (ldim * gdim);
+            // if not defined by user, we can change the default settings
+            bpReaderSettings.SetEngine("BP"); // BP is the default engine
+            bpReaderSettings.SetParameters("Stepping",
+                                           true); // see only one step at a time
         }
 
-        NiceArray.reserve(ldim);
-
-        // Make a 1D selection to describe the local dimensions of the variable
-        // we READ and
-        // its offsets in the global spaces
-        std::unique_ptr<adios::Selection> bbsel = adios.SelectionBoundingBox(
-            {ldim}, {offs}); // local dims and offsets; both as list
-        varNice->SetSelection(bbsel);
-        bpReader->Read<double>(varNice, NiceArray.data());
-
-        /* Ragged */
-        // inquiry about a variable, whose name we know
-        std::shared_ptr<adios::Variable<void>> varRagged =
-            bpReader.InquiryVariable("Ragged");
-        if (varRagged->m_GlobalDimensions[1] != adios::VARYING_DIMENSION)
+        // Create engine smart pointer due to polymorphism,
+        // Default behavior
+        // auto bpReader = adios.Open( "myNumbers.bp", "r" );
+        // this would just open with a default transport, which is "BP"
+        try
         {
-          throw std::ios_base::failure(
-              "Unexpected condition: Ragged array's fast dimension "
-              "is supposed to be VARYING_DIMENSION\n");
+            auto bpReader = adios.Open("myNumbers.bp", "r", bpReaderSettings);
+
+            while (true)
+            {
+                /* NX */
+                bpReader->Read<unsigned int>("NX",
+                                             &Nx); // read a Global scalar which
+                                                   // has a single value in a
+                                                   // step
+
+                /* nproc */
+                bpReader->Read<int>("nproc", &Nwriters); // also a global scalar
+
+                /* Nparts */
+                // Nparts local scalar is presented as a 1D array of Nwriters
+                // elements.
+                // We can read all as a 1D array
+                std::vector<int> partsV(Nwriters);
+                bpReader->Read<int>("Nparts",
+                                    &partsV); // read with string name, no
+                                              // selection => read whole array
+
+                /* Nice */
+                // inquiry about a variable, whose name we know
+                std::shared_ptr<adios::Variable<void>> varNice =
+                    bpReader.InquiryVariable("Nice");
+
+                if (varNice == nullptr)
+                    throw std::ios_base::failure("ERROR: failed to find "
+                                                 "variable 'myDoubles' in "
+                                                 "input file\n");
+
+                // ? how do we know about the type? std::string varNice->m_Type
+                unsigned long long int gdim =
+                    varMyDoubles->m_GlobalDimensions[0]; // ?member var or
+                                                         // member func?
+                unsigned long long int ldim = gdim / nproc;
+                unsigned long long int offs = rank * ldim;
+                if (rank == nproc - 1)
+                {
+                    ldim = gdim - (ldim * gdim);
+                }
+
+                NiceArray.reserve(ldim);
+
+                // Make a 1D selection to describe the local dimensions of the
+                // variable
+                // we READ and
+                // its offsets in the global spaces
+                std::unique_ptr<adios::Selection> bbsel =
+                    adios.SelectionBoundingBox(
+                        {ldim}, {offs}); // local dims and offsets; both as list
+                varNice->SetSelection(bbsel);
+                bpReader->Read<double>(varNice, NiceArray.data());
+
+                /* Ragged */
+                // inquiry about a variable, whose name we know
+                std::shared_ptr<adios::Variable<void>> varRagged =
+                    bpReader.InquiryVariable("Ragged");
+                if (varRagged->m_GlobalDimensions[1] !=
+                    adios::VARYING_DIMENSION)
+                {
+                    throw std::ios_base::failure(
+                        "Unexpected condition: Ragged array's fast "
+                        "dimension "
+                        "is supposed to be VARYING_DIMENSION\n");
+                }
+                // We have here varRagged->sum_nblocks, nsteps, nblocks[],
+                // global
+                if (rank < varRagged->nblocks[0]) // same as rank < Nwriters in
+                                                  // this example
+                {
+                    // get per-writer size information
+                    varRagged->InquiryBlocks();
+                    // now we have the dimensions per block
+
+                    unsigned long long int ldim =
+                        varRagged->blockinfo[rank].m_Dimensions[0];
+                    RaggedArray.resize(ldim);
+
+                    std::unique_ptr<adios::Selection> wbsel =
+                        adios.SelectionWriteblock(rank);
+                    varRagged->SetSelection(wbsel);
+                    bpReader->Read<float>(varRagged, RaggedArray.data());
+
+                    // We can use bounding box selection as well
+                    std::unique_ptr<adios::Selection> rbbsel =
+                        adios.SelectionBoundingBox({1, ldim}, {rank, 0});
+                    varRagged->SetSelection(rbbsel);
+                    bpReader->Read<float>(varRagged, RaggedArray.data());
+                }
+
+                /* Extra help to process Ragged */
+                int maxRaggedDim = varRagged->GetMaxGlobalDimensions(
+                    1); // contains the largest
+                std::vector<int> raggedDims =
+                    varRagged->GetVaryingGlobalDimensions(
+                        1); // contains all individual sizes in that
+                            // dimension
+
+                // promise to not read more from this step
+                bpReader->Release();
+
+                // want to move on to the next available step
+                // bpReader->Advance(adios::NextStep);
+                // bpReader->Advance(adios::LatestStep);
+                bpReader->Advance(); // default is adios::NextStep
+            }
+
+            // Close file/stream
+            bpReader->Close();
         }
-        // We have here varRagged->sum_nblocks, nsteps, nblocks[], global
-        if (rank <
-            varRagged->nblocks[0]) // same as rank < Nwriters in this example
+        catch (adios::end_of_stream &e)
         {
-          // get per-writer size information
-          varRagged->InquiryBlocks();
-          // now we have the dimensions per block
-
-          unsigned long long int ldim =
-              varRagged->blockinfo[rank].m_Dimensions[0];
-          RaggedArray.resize(ldim);
-
-          std::unique_ptr<adios::Selection> wbsel =
-              adios.SelectionWriteblock(rank);
-          varRagged->SetSelection(wbsel);
-          bpReader->Read<float>(varRagged, RaggedArray.data());
-
-          // We can use bounding box selection as well
-          std::unique_ptr<adios::Selection> rbbsel =
-              adios.SelectionBoundingBox({1, ldim}, {rank, 0});
-          varRagged->SetSelection(rbbsel);
-          bpReader->Read<float>(varRagged, RaggedArray.data());
+            if (rank == 0)
+            {
+                std::cout << "Reached end of stream, end processing loop.\n";
+            }
+            // Close file/stream
+            bpReader->Close();
+        }
+        catch (adios::file_not_found &e)
+        {
+            if (rank == 0)
+            {
+                std::cout << "File/stream does not exist, quit.\n";
+            }
         }
-
-        /* Extra help to process Ragged */
-        int maxRaggedDim =
-            varRagged->GetMaxGlobalDimensions(1); // contains the largest
-        std::vector<int> raggedDims = varRagged->GetVaryingGlobalDimensions(
-            1); // contains all individual sizes in that dimension
-
-        // promise to not read more from this step
-        bpReader->Release();
-
-        // want to move on to the next available step
-        // bpReader->Advance(adios::NextStep);
-        // bpReader->Advance(adios::LatestStep);
-        bpReader->Advance(); // default is adios::NextStep
-      }
-
-      // Close file/stream
-      bpReader->Close();
-    }
-    catch (adios::end_of_stream &e)
-    {
-      if (rank == 0)
-      {
-        std::cout << "Reached end of stream, end processing loop.\n";
-      }
-      // Close file/stream
-      bpReader->Close();
-    }
-    catch (adios::file_not_found &e)
-    {
-      if (rank == 0)
-      {
-        std::cout << "File/stream does not exist, quit.\n";
-      }
     }
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/groupless/multistep/writer_multistep.cpp b/examples/groupless/multistep/writer_multistep.cpp
index 946d20f951356e8121dceef8a27f31b38f5b2d29..696d4bdb636ed422d4872ae043505551a84e05a9 100644
--- a/examples/groupless/multistep/writer_multistep.cpp
+++ b/examples/groupless/multistep/writer_multistep.cpp
@@ -21,152 +21,165 @@ typedef enum { VARYING_DIMENSION = -1, LOCAL_VALUE = 0, GLOBAL_VALUE = 1 };
 
 int main(int argc, char *argv[])
 {
-  int rank, nproc;
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-  const int NSTEPS = 5;
-
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  const unsigned int Nx = 10;
-  int Nparts; // random size per process, 5..10 each
-
-  std::vector<double> NiceArray(Nx);
-  for (int i = 0; i < Nx; i++)
-  {
-    NiceArray[i] = rank * Nx + (double)i;
-  }
-
-  std::vector<float> RaggedArray;
-
-  try
-  {
-    // Define group and variables with transforms, variables don't have
-    // functions, only group can access variables
-    adios::Variable<unsigned int> &varNX = adios.DefineVariable<unsigned int>(
-        "NX"); // global single-value across processes
-    adios::Variable<int> &varNproc = adios.DefineVariable<int>(
-        "nproc", adios::GLOBAL_VALUE); // same def for global value
-    adios::Variable<int> &varNparts = adios.DefineVariable<int>(
-        "Nparts",
-        adios::LOCAL_VALUE); // a single-value different on every process
-    adios::Variable<double> &varNice =
-        adios.DefineVariable<double>("Nice", {nproc * Nx}); // 1D global array
-    adios::Variable<float> &varRagged = adios.DefineVariable<float>(
-        "Ragged", {nproc, adios::VARYING_DIMENSION}); // ragged array
-
-    // add transform to variable in group...not executed (just testing API)
-    adios::Transform bzip2 = adios::transform::BZIP2();
-    varNice->AddTransform(bzip2, 1);
-
-    // Define method for engine creation
-    // 1. Get method def from config file or define new one
-    adios::Method &bpWriterSettings = adios.GetMethod("output");
-    if (bpWriterSettings.undeclared())
-    {
-      // if not defined by user, we can change the default settings
-      bpWriterSettings.SetEngine("BP"); // BP is the default engine
-      bpWriterSettings.AddTransport(
-          "File", "lucky=yes"); // ISO-POSIX file is the default transport
-                                // Passing parameters to the transport
-      bpWriterSettings.SetParameters("have_metadata_file",
-                                     "yes"); // Passing parameters to the engine
-      bpWriterSettings.SetParameters("Aggregation",
-                                     (nproc + 1) / 2); // number of aggregators
-    }
+    int rank, nproc;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+    const int NSTEPS = 5;
 
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    // "w" means we overwrite any existing file on disk, but AdvanceStep will
-    // append steps later.
-    auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
 
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: failed to open ADIOS bpWriter\n");
+    // Application variable
+    const unsigned int Nx = 10;
+    int Nparts; // random size per process, 5..10 each
 
-    for (int step; step < NSTEPS; step++)
+    std::vector<double> NiceArray(Nx);
+    for (int i = 0; i < Nx; i++)
     {
-      int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
-      RaggedArray.reserve(Nparts);
-      for (int i = 0; i < Nparts; i++)
-      {
-        RaggedArray[i] = rank * Nx + (float)i;
-      }
-
-      if (rank == 0)
-      {
-        // Writing a global scalar from only one process
-        bpWriter->Write<unsigned int>(varNX, &Nx);
-      }
-      // Writing a local scalar on every process. Will be shown at reading as a
-      // 1D array
-      bpWriter->Write<int>(varNparts, &Nparts);
-
-      // Writing a global scalar on every process is useless. Information will
-      // be thrown away
-      // and only rank 0's data will be in the output
-      bpWriter->Write<int>(varNproc, &nproc);
-
-      // Make a 1D selection to describe the local dimensions of the variable we
-      // write and
-      // its offsets in the global spaces
-      adios::Selection &sel = adios.SelectionBoundingBox(
-          {Nx}, {rank * Nx}); // local dims and offsets; both as list
-      NiceArray.SetSelection(sel);
-      bpWriter->Write<double>(varNice, NiceArray.data()); // Base class Engine
-                                                          // own the Write<T>
-                                                          // that will call
-                                                          // overloaded Write
-                                                          // from Derived
-
-      adios::Selection &lsel =
-          adios.SelectionBoundingBox({1, Nparts}, {rank, 0});
-      RaggedArray.SetSelection(sel);
-      bpWriter->Write<float>(varRagged, RaggedArray.data()); // Base class
-                                                             // Engine own the
-                                                             // Write<T> that
-                                                             // will call
-                                                             // overloaded Write
-                                                             // from Derived
-
-      // Indicate we are done for this step
-      // N-to-M Aggregation, disk I/O will be performed during this call, unless
-      // time aggregation postpones all of that to some later step
-      bpWriter->Advance();
+        NiceArray[i] = rank * Nx + (double)i;
     }
 
-    // Called once: indicate that we are done with this output for the run
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    std::vector<float> RaggedArray;
+
+    try
+    {
+        // Define group and variables with transforms, variables don't have
+        // functions, only group can access variables
+        adios::Variable<unsigned int> &varNX =
+            adios.DefineVariable<unsigned int>(
+                "NX"); // global single-value across processes
+        adios::Variable<int> &varNproc = adios.DefineVariable<int>(
+            "nproc", adios::GLOBAL_VALUE); // same def for global value
+        adios::Variable<int> &varNparts =
+            adios.DefineVariable<int>("Nparts",
+                                      adios::LOCAL_VALUE); // a single-value
+                                                           // different on
+                                                           // every process
+        adios::Variable<double> &varNice = adios.DefineVariable<double>(
+            "Nice", {nproc * Nx}); // 1D global array
+        adios::Variable<float> &varRagged = adios.DefineVariable<float>(
+            "Ragged", {nproc, adios::VARYING_DIMENSION}); // ragged array
+
+        // add transform to variable in group...not executed (just testing API)
+        adios::Transform bzip2 = adios::transform::BZIP2();
+        varNice->AddTransform(bzip2, 1);
+
+        // Define method for engine creation
+        // 1. Get method def from config file or define new one
+        adios::Method &bpWriterSettings = adios.GetMethod("output");
+        if (bpWriterSettings.undeclared())
+        {
+            // if not defined by user, we can change the default settings
+            bpWriterSettings.SetEngine("BP"); // BP is the default engine
+            bpWriterSettings.AddTransport(
+                "File",
+                "lucky=yes"); // ISO-POSIX file is the default transport
+                              // Passing parameters to the transport
+            bpWriterSettings.SetParameters(
+                "have_metadata_file",
+                "yes"); // Passing parameters to the engine
+            bpWriterSettings.SetParameters("Aggregation",
+                                           (nproc + 1) /
+                                               2); // number of aggregators
+        }
+
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        // "w" means we overwrite any existing file on disk, but AdvanceStep
+        // will
+        // append steps later.
+        auto bpWriter = adios.Open("myNumbers.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to open ADIOS bpWriter\n");
+
+        for (int step; step < NSTEPS; step++)
+        {
+            int Nparts = rand() % 6 + 5; // random size per process, 5..10 each
+            RaggedArray.reserve(Nparts);
+            for (int i = 0; i < Nparts; i++)
+            {
+                RaggedArray[i] = rank * Nx + (float)i;
+            }
+
+            if (rank == 0)
+            {
+                // Writing a global scalar from only one process
+                bpWriter->Write<unsigned int>(varNX, &Nx);
+            }
+            // Writing a local scalar on every process. Will be shown at reading
+            // as a
+            // 1D array
+            bpWriter->Write<int>(varNparts, &Nparts);
+
+            // Writing a global scalar on every process is useless. Information
+            // will
+            // be thrown away
+            // and only rank 0's data will be in the output
+            bpWriter->Write<int>(varNproc, &nproc);
+
+            // Make a 1D selection to describe the local dimensions of the
+            // variable we
+            // write and
+            // its offsets in the global spaces
+            adios::Selection &sel = adios.SelectionBoundingBox(
+                {Nx}, {rank * Nx}); // local dims and offsets; both as list
+            NiceArray.SetSelection(sel);
+            bpWriter->Write<double>(varNice,
+                                    NiceArray.data()); // Base class Engine
+                                                       // own the Write<T>
+                                                       // that will call
+                                                       // overloaded Write
+                                                       // from Derived
+
+            adios::Selection &lsel =
+                adios.SelectionBoundingBox({1, Nparts}, {rank, 0});
+            RaggedArray.SetSelection(sel);
+            bpWriter->Write<float>(varRagged, RaggedArray.data()); // Base class
+            // Engine own the
+            // Write<T> that
+            // will call
+            // overloaded Write
+            // from Derived
+
+            // Indicate we are done for this step
+            // N-to-M Aggregation, disk I/O will be performed during this call,
+            // unless
+            // time aggregation postpones all of that to some later step
+            bpWriter->Advance();
+        }
+
+        // Called once: indicate that we are done with this output for the run
+        bpWriter->Close();
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/heatTransfer/HeatTransfer.cpp b/examples/heatTransfer/HeatTransfer.cpp
index 5cac74fc91b389d6a6167b95e9fc8a58a0737dd7..ac706e4c66d75c5e342faa915ae2edb8aa4519e2 100644
--- a/examples/heatTransfer/HeatTransfer.cpp
+++ b/examples/heatTransfer/HeatTransfer.cpp
@@ -23,212 +23,213 @@
 
 HeatTransfer::HeatTransfer(const Settings &settings) : m_s{settings}
 {
-  m_T1 = new double *[m_s.ndx + 2];
-  m_T1[0] = new double[(m_s.ndx + 2) * (m_s.ndy + 2)];
-  m_T2 = new double *[m_s.ndx + 2];
-  m_T2[0] = new double[(m_s.ndx + 2) * (m_s.ndy + 2)];
-  for (unsigned int i = 1; i < m_s.ndx + 2; i++)
-  {
-    m_T1[i] = m_T1[i - 1] + m_s.ndy + 2;
-    m_T2[i] = m_T2[i - 1] + m_s.ndy + 2;
-  }
-  m_TCurrent = m_T1;
-  m_TNext = m_T2;
+    m_T1 = new double *[m_s.ndx + 2];
+    m_T1[0] = new double[(m_s.ndx + 2) * (m_s.ndy + 2)];
+    m_T2 = new double *[m_s.ndx + 2];
+    m_T2[0] = new double[(m_s.ndx + 2) * (m_s.ndy + 2)];
+    for (unsigned int i = 1; i < m_s.ndx + 2; i++)
+    {
+        m_T1[i] = m_T1[i - 1] + m_s.ndy + 2;
+        m_T2[i] = m_T2[i - 1] + m_s.ndy + 2;
+    }
+    m_TCurrent = m_T1;
+    m_TNext = m_T2;
 }
 
 HeatTransfer::~HeatTransfer()
 {
-  delete[] m_T1[0];
-  delete[] m_T1;
-  delete[] m_T2[0];
-  delete[] m_T2;
+    delete[] m_T1[0];
+    delete[] m_T1;
+    delete[] m_T2[0];
+    delete[] m_T2;
 }
 
 void HeatTransfer::init(bool init_with_rank)
 {
-  if (init_with_rank)
-  {
-    for (unsigned int i = 0; i < m_s.ndx + 2; i++)
-      for (unsigned int j = 0; j < m_s.ndy + 2; j++)
-        m_T1[i][j] = m_s.rank;
-  }
-  else
-  {
-    const double hx = 2.0 * 4.0 * atan(1.0) / m_s.ndx;
-    const double hy = 2.0 * 4.0 * atan(1.0) / m_s.ndy;
-
-    double x, y;
-    for (unsigned int i = 0; i < m_s.ndx + 2; i++)
+    if (init_with_rank)
+    {
+        for (unsigned int i = 0; i < m_s.ndx + 2; i++)
+            for (unsigned int j = 0; j < m_s.ndy + 2; j++)
+                m_T1[i][j] = m_s.rank;
+    }
+    else
     {
-      x = 0.0 + hx * (i - 1);
-      for (unsigned int j = 0; j < m_s.ndy + 2; j++)
-      {
-        y = 0.0 + hy * (j - 1);
-        m_T1[i][j] = cos(8 * x) + cos(6 * x) - cos(4 * x) + cos(2 * x) -
-                     cos(x) + sin(8 * y) - sin(6 * y) + sin(4 * y) -
-                     sin(2 * y) + sin(y);
-      }
-    }
-  }
-  m_TCurrent = m_T1;
-  m_TNext = m_T2;
+        const double hx = 2.0 * 4.0 * atan(1.0) / m_s.ndx;
+        const double hy = 2.0 * 4.0 * atan(1.0) / m_s.ndy;
+
+        double x, y;
+        for (unsigned int i = 0; i < m_s.ndx + 2; i++)
+        {
+            x = 0.0 + hx * (i - 1);
+            for (unsigned int j = 0; j < m_s.ndy + 2; j++)
+            {
+                y = 0.0 + hy * (j - 1);
+                m_T1[i][j] = cos(8 * x) + cos(6 * x) - cos(4 * x) + cos(2 * x) -
+                             cos(x) + sin(8 * y) - sin(6 * y) + sin(4 * y) -
+                             sin(2 * y) + sin(y);
+            }
+        }
+    }
+    m_TCurrent = m_T1;
+    m_TNext = m_T2;
 }
 
 void HeatTransfer::printT(std::string message, MPI_Comm comm) const
 {
-  int rank, size;
-  int tag = 1;
-  int token;
-  MPI_Status status;
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
-  if (rank > 0)
-  {
-    MPI_Recv(&token, 1, MPI_INT, rank - 1, tag, comm, &status);
-  }
-
-  std::cout << "Rank " << rank << " " << message << std::endl;
-  for (unsigned int i = 0; i < m_s.ndx + 2; i++)
-  {
-    std::cout << "  T[" << i << "][] = ";
-    for (unsigned int j = 0; j < m_s.ndy + 2; j++)
-    {
-      std::cout << std::setw(6) << m_TCurrent[i][j];
-    }
-    std::cout << std::endl;
-  }
-  std::cout << std::flush << std::endl;
-
-  if (rank < size - 1)
-  {
-    MPI_Send(&token, 1, MPI_INT, rank + 1, tag, comm);
-  }
+    int rank, size;
+    int tag = 1;
+    int token;
+    MPI_Status status;
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
+    if (rank > 0)
+    {
+        MPI_Recv(&token, 1, MPI_INT, rank - 1, tag, comm, &status);
+    }
+
+    std::cout << "Rank " << rank << " " << message << std::endl;
+    for (unsigned int i = 0; i < m_s.ndx + 2; i++)
+    {
+        std::cout << "  T[" << i << "][] = ";
+        for (unsigned int j = 0; j < m_s.ndy + 2; j++)
+        {
+            std::cout << std::setw(6) << m_TCurrent[i][j];
+        }
+        std::cout << std::endl;
+    }
+    std::cout << std::flush << std::endl;
+
+    if (rank < size - 1)
+    {
+        MPI_Send(&token, 1, MPI_INT, rank + 1, tag, comm);
+    }
 }
 
 void HeatTransfer::switchCurrentNext()
 {
-  double **tmp = m_TCurrent;
-  m_TCurrent = m_TNext;
-  m_TNext = tmp;
+    double **tmp = m_TCurrent;
+    m_TCurrent = m_TNext;
+    m_TNext = tmp;
 }
 
 void HeatTransfer::iterate()
 {
-  for (unsigned int i = 1; i <= m_s.ndx; ++i)
-  {
-    for (unsigned int j = 1; j <= m_s.ndy; ++j)
+    for (unsigned int i = 1; i <= m_s.ndx; ++i)
     {
-      m_TNext[i][j] =
-          omega / 4 * (m_TCurrent[i - 1][j] + m_TCurrent[i + 1][j] +
-                       m_TCurrent[i][j - 1] + m_TCurrent[i][j + 1]) +
-          (1.0 - omega) * m_TCurrent[i][j];
+        for (unsigned int j = 1; j <= m_s.ndy; ++j)
+        {
+            m_TNext[i][j] =
+                omega / 4 * (m_TCurrent[i - 1][j] + m_TCurrent[i + 1][j] +
+                             m_TCurrent[i][j - 1] + m_TCurrent[i][j + 1]) +
+                (1.0 - omega) * m_TCurrent[i][j];
+        }
     }
-  }
-  switchCurrentNext();
+    switchCurrentNext();
 }
 
 void HeatTransfer::heatEdges()
 {
-  // Heat the whole global edges
-  if (m_s.posx == 0)
-    for (unsigned int j = 0; j < m_s.ndy + 2; ++j)
-      m_TCurrent[0][j] = edgetemp;
-
-  if (m_s.posx == m_s.npx - 1)
-    for (unsigned int j = 0; j < m_s.ndy + 2; ++j)
-      m_TCurrent[m_s.ndx + 1][j] = edgetemp;
-
-  if (m_s.posy == 0)
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      m_TCurrent[i][0] = edgetemp;
-
-  if (m_s.posy == m_s.npy - 1)
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      m_TCurrent[i][m_s.ndy + 1] = edgetemp;
+    // Heat the whole global edges
+    if (m_s.posx == 0)
+        for (unsigned int j = 0; j < m_s.ndy + 2; ++j)
+            m_TCurrent[0][j] = edgetemp;
+
+    if (m_s.posx == m_s.npx - 1)
+        for (unsigned int j = 0; j < m_s.ndy + 2; ++j)
+            m_TCurrent[m_s.ndx + 1][j] = edgetemp;
+
+    if (m_s.posy == 0)
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            m_TCurrent[i][0] = edgetemp;
+
+    if (m_s.posy == m_s.npy - 1)
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            m_TCurrent[i][m_s.ndy + 1] = edgetemp;
 }
 
 void HeatTransfer::exchange(MPI_Comm comm)
 {
-  // Exchange ghost cells, in the order left-right-up-down
-
-  double *send_x = new double[m_s.ndx + 2];
-  double *recv_x = new double[m_s.ndx + 2];
-
-  // send to left + receive from right
-  int tag = 1;
-  MPI_Status status;
-  if (m_s.rank_left >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " send left to rank " << m_s.rank_left
-              << std::endl;
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      send_x[i] = m_TCurrent[i][1];
-    MPI_Send(send_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_left, tag, comm);
-  }
-  if (m_s.rank_right >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " receive from right from rank "
-              << m_s.rank_right << std::endl;
-    MPI_Recv(recv_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_right, tag, comm,
-             &status);
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      m_TCurrent[i][m_s.ndy + 1] = recv_x[i];
-  }
-
-  // send to right + receive from left
-  tag = 2;
-  if (m_s.rank_right >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " send right to rank " << m_s.rank_right
-              << std::endl;
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      send_x[i] = m_TCurrent[i][m_s.ndy];
-    MPI_Send(send_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_right, tag, comm);
-  }
-  if (m_s.rank_left >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " receive from left from rank "
-              << m_s.rank_left << std::endl;
-    MPI_Recv(recv_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_left, tag, comm, &status);
-    for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
-      m_TCurrent[i][0] = recv_x[i];
-  }
-
-  // send down + receive from above
-  tag = 3;
-  if (m_s.rank_down >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " send down to rank " << m_s.rank_down
-              << std::endl;
-    MPI_Send(m_TCurrent[m_s.ndx], m_s.ndy + 2, MPI_REAL8, m_s.rank_down, tag,
-             comm);
-  }
-  if (m_s.rank_up >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " receive from above from rank "
-              << m_s.rank_up << std::endl;
-    MPI_Recv(m_TCurrent[0], m_s.ndy + 2, MPI_REAL8, m_s.rank_up, tag, comm,
-             &status);
-  }
-
-  // send up + receive from below
-  tag = 4;
-  if (m_s.rank_up >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " send up to rank " << m_s.rank_up
-              << std::endl;
-    MPI_Send(m_TCurrent[1], m_s.ndy + 2, MPI_REAL8, m_s.rank_up, tag, comm);
-  }
-  if (m_s.rank_down >= 0)
-  {
-    std::cout << "Rank " << m_s.rank << " receive from below from rank "
-              << m_s.rank_down << std::endl;
-    MPI_Recv(m_TCurrent[m_s.ndx + 1], m_s.ndy + 2, MPI_REAL8, m_s.rank_down,
-             tag, comm, &status);
-  }
-
-  delete[] send_x;
-  delete[] recv_x;
+    // Exchange ghost cells, in the order left-right-up-down
+
+    double *send_x = new double[m_s.ndx + 2];
+    double *recv_x = new double[m_s.ndx + 2];
+
+    // send to left + receive from right
+    int tag = 1;
+    MPI_Status status;
+    if (m_s.rank_left >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " send left to rank "
+                  << m_s.rank_left << std::endl;
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            send_x[i] = m_TCurrent[i][1];
+        MPI_Send(send_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_left, tag, comm);
+    }
+    if (m_s.rank_right >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " receive from right from rank "
+                  << m_s.rank_right << std::endl;
+        MPI_Recv(recv_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_right, tag, comm,
+                 &status);
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            m_TCurrent[i][m_s.ndy + 1] = recv_x[i];
+    }
+
+    // send to right + receive from left
+    tag = 2;
+    if (m_s.rank_right >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " send right to rank "
+                  << m_s.rank_right << std::endl;
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            send_x[i] = m_TCurrent[i][m_s.ndy];
+        MPI_Send(send_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_right, tag, comm);
+    }
+    if (m_s.rank_left >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " receive from left from rank "
+                  << m_s.rank_left << std::endl;
+        MPI_Recv(recv_x, m_s.ndx + 2, MPI_REAL8, m_s.rank_left, tag, comm,
+                 &status);
+        for (unsigned int i = 0; i < m_s.ndx + 2; ++i)
+            m_TCurrent[i][0] = recv_x[i];
+    }
+
+    // send down + receive from above
+    tag = 3;
+    if (m_s.rank_down >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " send down to rank "
+                  << m_s.rank_down << std::endl;
+        MPI_Send(m_TCurrent[m_s.ndx], m_s.ndy + 2, MPI_REAL8, m_s.rank_down,
+                 tag, comm);
+    }
+    if (m_s.rank_up >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " receive from above from rank "
+                  << m_s.rank_up << std::endl;
+        MPI_Recv(m_TCurrent[0], m_s.ndy + 2, MPI_REAL8, m_s.rank_up, tag, comm,
+                 &status);
+    }
+
+    // send up + receive from below
+    tag = 4;
+    if (m_s.rank_up >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " send up to rank " << m_s.rank_up
+                  << std::endl;
+        MPI_Send(m_TCurrent[1], m_s.ndy + 2, MPI_REAL8, m_s.rank_up, tag, comm);
+    }
+    if (m_s.rank_down >= 0)
+    {
+        std::cout << "Rank " << m_s.rank << " receive from below from rank "
+                  << m_s.rank_down << std::endl;
+        MPI_Recv(m_TCurrent[m_s.ndx + 1], m_s.ndy + 2, MPI_REAL8, m_s.rank_down,
+                 tag, comm, &status);
+    }
+
+    delete[] send_x;
+    delete[] recv_x;
 }
 
 #include <cstring>
@@ -238,11 +239,11 @@ void HeatTransfer::exchange(MPI_Comm comm)
  */
 std::vector<double> HeatTransfer::data_noghost() const
 {
-  std::vector<double> d(m_s.ndx * m_s.ndy);
-  for (unsigned int i = 1; i <= m_s.ndx; ++i)
-  {
-    std::memcpy(&d[(i - 1) * m_s.ndy], m_TCurrent[i] + 1,
-                m_s.ndy * sizeof(double));
-  }
-  return d;
+    std::vector<double> d(m_s.ndx * m_s.ndy);
+    for (unsigned int i = 1; i <= m_s.ndx; ++i)
+    {
+        std::memcpy(&d[(i - 1) * m_s.ndy], m_TCurrent[i] + 1,
+                    m_s.ndy * sizeof(double));
+    }
+    return d;
 }
diff --git a/examples/heatTransfer/HeatTransfer.h b/examples/heatTransfer/HeatTransfer.h
index 12334f0664a36eaf54b86aa1b83e2d607a5cd4d8..7d48eb558d2db274218e8b0030ad53cc2aa0f7f3 100644
--- a/examples/heatTransfer/HeatTransfer.h
+++ b/examples/heatTransfer/HeatTransfer.h
@@ -19,34 +19,36 @@
 class HeatTransfer
 {
 public:
-  HeatTransfer(const Settings &settings); // Create two 2D arrays with ghost
-                                          // cells to compute
-  ~HeatTransfer();
-  void init(bool init_with_rank); // set up array values with either rank or
-                                  // real demo values
-  void iterate();                 // one local calculation step
-  void heatEdges();               // reset the heat values at the global edge
-  void exchange(MPI_Comm comm);   // send updates to neighbors
-
-  // return a single value at index i,j. 0 <= i <= ndx+2, 0 <= j <= ndy+2
-  double T(int i, int j) const { return m_TCurrent[i][j]; };
-  // return (1D) pointer to current T data, ndx+2 * ndy+2 elements
-  double *data() const { return m_TCurrent[0]; };
-  // return (1D) pointer to current T data without ghost cells, ndx*ndy elements
-  std::vector<double> data_noghost() const;
-
-  void printT(std::string message,
-              MPI_Comm comm) const; // debug: print local TCurrent on stdout
+    HeatTransfer(const Settings &settings); // Create two 2D arrays with ghost
+                                            // cells to compute
+    ~HeatTransfer();
+    void init(bool init_with_rank); // set up array values with either rank or
+                                    // real demo values
+    void iterate();                 // one local calculation step
+    void heatEdges();               // reset the heat values at the global edge
+    void exchange(MPI_Comm comm);   // send updates to neighbors
+
+    // return a single value at index i,j. 0 <= i <= ndx+2, 0 <= j <= ndy+2
+    double T(int i, int j) const { return m_TCurrent[i][j]; };
+    // return (1D) pointer to current T data, ndx+2 * ndy+2 elements
+    double *data() const { return m_TCurrent[0]; };
+    // return (1D) pointer to current T data without ghost cells, ndx*ndy
+    // elements
+    std::vector<double> data_noghost() const;
+
+    void printT(std::string message,
+                MPI_Comm comm) const; // debug: print local TCurrent on stdout
 
 private:
-  const double edgetemp = 3.0; // temperature at the edges of the global plate
-  const double omega = 0.8; // weight for current temp is (1-omega) in iteration
-  double **m_T1;       // 2D array (ndx+2) * (ndy+2) size, including ghost cells
-  double **m_T2;       // another 2D array
-  double **m_TCurrent; // pointer to T1 or T2
-  double **m_TNext;    // pointer to T2 or T1
-  const Settings &m_s;
-  void switchCurrentNext(); // switch the current array with the next array
+    const double edgetemp = 3.0; // temperature at the edges of the global plate
+    const double omega =
+        0.8;       // weight for current temp is (1-omega) in iteration
+    double **m_T1; // 2D array (ndx+2) * (ndy+2) size, including ghost cells
+    double **m_T2; // another 2D array
+    double **m_TCurrent; // pointer to T1 or T2
+    double **m_TNext;    // pointer to T2 or T1
+    const Settings &m_s;
+    void switchCurrentNext(); // switch the current array with the next array
 };
 
 #endif /* HEATTRANSFER_H_ */
diff --git a/examples/heatTransfer/IO.h b/examples/heatTransfer/IO.h
index e9c7c6195b24fab12590f009f9c0b024d7009b59..999866112e471e46f2136f804ed2ee5226bb0a0a 100644
--- a/examples/heatTransfer/IO.h
+++ b/examples/heatTransfer/IO.h
@@ -19,13 +19,13 @@ class IO
 {
 
 public:
-  IO(const Settings &s, MPI_Comm comm);
-  ~IO();
-  void write(int step, const HeatTransfer &ht, const Settings &s,
-             MPI_Comm comm);
+    IO(const Settings &s, MPI_Comm comm);
+    ~IO();
+    void write(int step, const HeatTransfer &ht, const Settings &s,
+               MPI_Comm comm);
 
 private:
-  std::string m_outputfilename;
+    std::string m_outputfilename;
 };
 
 #endif /* IO_H_ */
diff --git a/examples/heatTransfer/IO_adios1.cpp b/examples/heatTransfer/IO_adios1.cpp
index 806c654d09ed8e73b6ef0d656953b4fcc5fc48fa..8bc8753c264d3562eb792e7ba39184ed349e957b 100644
--- a/examples/heatTransfer/IO_adios1.cpp
+++ b/examples/heatTransfer/IO_adios1.cpp
@@ -20,24 +20,24 @@ static int rank_saved;
 
 IO::IO(const Settings &s, MPI_Comm comm)
 {
-  rank_saved = s.rank;
-  m_outputfilename = s.outputfile + ".bp";
-  adios_init_noxml(comm);
-  adios_declare_group(&group, "heat", "", adios_stat_default);
-  adios_select_method(group, "MPI", "", "");
+    rank_saved = s.rank;
+    m_outputfilename = s.outputfile + ".bp";
+    adios_init_noxml(comm);
+    adios_declare_group(&group, "heat", "", adios_stat_default);
+    adios_select_method(group, "MPI", "", "");
 
-  adios_define_var(group, "gndx", "", adios_integer, "", "", "");
-  adios_define_var(group, "gndy", "", adios_integer, "", "", "");
+    adios_define_var(group, "gndx", "", adios_integer, "", "", "");
+    adios_define_var(group, "gndy", "", adios_integer, "", "", "");
 
-  std::string ldims(std::to_string(s.ndx) + "," + std::to_string(s.ndy));
-  std::string gdims(std::to_string(s.gndx) + "," + std::to_string(s.gndy));
-  std::string offs(std::to_string(s.offsx) + "," + std::to_string(s.offsy));
-  uint64_t T_id;
-  T_id = adios_define_var(group, "T", "", adios_double, ldims.c_str(),
-                          gdims.c_str(), offs.c_str());
+    std::string ldims(std::to_string(s.ndx) + "," + std::to_string(s.ndy));
+    std::string gdims(std::to_string(s.gndx) + "," + std::to_string(s.gndy));
+    std::string offs(std::to_string(s.offsx) + "," + std::to_string(s.offsy));
+    uint64_t T_id;
+    T_id = adios_define_var(group, "T", "", adios_double, ldims.c_str(),
+                            gdims.c_str(), offs.c_str());
 
-  adios_set_transform(T_id, "none");
-  // adios_set_transform( T_id, "zfp:accuracy=0.001");
+    adios_set_transform(T_id, "none");
+    // adios_set_transform( T_id, "zfp:accuracy=0.001");
 }
 
 IO::~IO() { adios_finalize(rank_saved); }
@@ -45,31 +45,31 @@ IO::~IO() { adios_finalize(rank_saved); }
 void IO::write(int step, const HeatTransfer &ht, const Settings &s,
                MPI_Comm comm)
 {
-  char mode[2] = "w";
-  if (step > 0)
-  {
-    mode[0] = 'a';
-  }
+    char mode[2] = "w";
+    if (step > 0)
+    {
+        mode[0] = 'a';
+    }
 
-  // for time measurements, let's synchronize the processes
-  MPI_Barrier(comm);
-  double time_start = MPI_Wtime();
+    // for time measurements, let's synchronize the processes
+    MPI_Barrier(comm);
+    double time_start = MPI_Wtime();
 
-  int64_t f;
-  adios_open(&f, "heat", m_outputfilename.c_str(), mode, comm);
-  adios_write(f, "gndx", &s.gndx);
-  adios_write(f, "gndy", &s.gndy);
-  adios_write(f, "T", ht.data_noghost().data());
-  adios_close(f);
+    int64_t f;
+    adios_open(&f, "heat", m_outputfilename.c_str(), mode, comm);
+    adios_write(f, "gndx", &s.gndx);
+    adios_write(f, "gndy", &s.gndy);
+    adios_write(f, "T", ht.data_noghost().data());
+    adios_close(f);
 
-  MPI_Barrier(comm);
-  double total_time = MPI_Wtime() - time_start;
-  uint64_t adios_totalsize =
-      2 * sizeof(int) + 2 * s.ndx * s.ndy * sizeof(double);
-  uint64_t sizeMB =
-      adios_totalsize * s.nproc / 1024 / 1024 / 1024; // size in MB
-  uint64_t mbs = sizeMB / total_time;
-  if (s.rank == 0)
-    std::cout << "Step " << step << ": " << m_outputfilename << " " << sizeMB
-              << " " << total_time << "" << mbs << std::endl;
+    MPI_Barrier(comm);
+    double total_time = MPI_Wtime() - time_start;
+    uint64_t adios_totalsize =
+        2 * sizeof(int) + 2 * s.ndx * s.ndy * sizeof(double);
+    uint64_t sizeMB =
+        adios_totalsize * s.nproc / 1024 / 1024 / 1024; // size in MB
+    uint64_t mbs = sizeMB / total_time;
+    if (s.rank == 0)
+        std::cout << "Step " << step << ": " << m_outputfilename << " "
+                  << sizeMB << " " << total_time << "" << mbs << std::endl;
 }
diff --git a/examples/heatTransfer/IO_adios2.cpp b/examples/heatTransfer/IO_adios2.cpp
index 5cfb9ae8807c611cc8c81836b012cddef763acd2..26d83c1bf674acbe96ff59f8c27e81b02b0de547 100644
--- a/examples/heatTransfer/IO_adios2.cpp
+++ b/examples/heatTransfer/IO_adios2.cpp
@@ -20,89 +20,94 @@ adios::Variable<double> *varT = nullptr;
 
 IO::IO(const Settings &s, MPI_Comm comm)
 {
-  rank_saved = s.rank;
-  m_outputfilename = s.outputfile + ".bp";
-  ad = new adios::ADIOS("adios2.xml", comm, adios::Verbose::INFO);
+    rank_saved = s.rank;
+    m_outputfilename = s.outputfile + ".bp";
+    ad = new adios::ADIOS("adios2.xml", comm, adios::Verbose::INFO);
 
-  // Define method for engine creation
-  // 1. Get method def from config file or define new one
+    // Define method for engine creation
+    // 1. Get method def from config file or define new one
 
-  adios::Method &bpWriterSettings = ad->DeclareMethod("output");
-  if (!bpWriterSettings.IsUserDefined())
-  {
-    // if not defined by user, we can change the default settings
-    bpWriterSettings.SetEngine("BP"); // BP is the default engine
-    bpWriterSettings.AllowThreads(
-        1); // allow 1 extra thread for data processing
-    bpWriterSettings.AddTransport(
-        "File", "lucky=yes"); // ISO-POSIX file is the default transport
-                              // Passing parameters to the transport
-    bpWriterSettings.SetParameters(
-        "have_metadata_file=yes"); // Passing parameters to the engine
-    bpWriterSettings.SetParameters(
-        "Aggregation",
-        std::to_string((s.nproc + 1) / 2)); // number of aggregators
-  }
+    adios::Method &bpWriterSettings = ad->DeclareMethod("output");
+    if (!bpWriterSettings.IsUserDefined())
+    {
+        // if not defined by user, we can change the default settings
+        bpWriterSettings.SetEngine("BP"); // BP is the default engine
+        bpWriterSettings.AllowThreads(
+            1); // allow 1 extra thread for data processing
+        bpWriterSettings.AddTransport(
+            "File", "lucky=yes"); // ISO-POSIX file is the default transport
+                                  // Passing parameters to the transport
+        bpWriterSettings.SetParameters(
+            "have_metadata_file",
+            "yes"); // Passing parameters to the engine
+        bpWriterSettings.SetParameters(
+            "Aggregation",
+            std::to_string((s.nproc + 1) / 2)); // number of aggregators
+    }
 
-  // define T as 2D global array
-  varT = &ad->DefineVariable<double>(
-      "T", {s.gndx, s.gndy}, // Global dimensions
-      {s.ndx, s.ndy}, // local size, could be defined later using SetSelection()
-      {s.offsx, s.offsy} // offset of the local array in the global space
-      );
+    // define T as 2D global array
+    varT = &ad->DefineVariable<double>(
+        "T", {s.gndx, s.gndy}, // Global dimensions
+        {s.ndx,
+         s.ndy}, // local size, could be defined later using SetSelection()
+        {s.offsx, s.offsy} // offset of the local array in the global space
+        );
 
-  // add transform to variable
-  // adios::Transform tr = adios::transform::BZIP2( );
-  // varT.AddTransform( tr, "" );
-  // varT.AddTransform( tr,"accuracy=0.001" );  // for ZFP
+    // add transform to variable
+    // adios::Transform tr = adios::transform::BZIP2( );
+    // varT.AddTransform( tr, "" );
+    // varT.AddTransform( tr,"accuracy=0.001" );  // for ZFP
 
-  bpWriter = ad->Open(m_outputfilename, "w", comm, bpWriterSettings);
+    bpWriter = ad->Open(m_outputfilename, "w", comm, bpWriterSettings);
 
-  if (bpWriter == nullptr)
-    throw std::ios_base::failure("ERROR: failed to open ADIOS bpWriter\n");
+    if (bpWriter == nullptr)
+        throw std::ios_base::failure("ERROR: failed to open ADIOS bpWriter\n");
 }
 
 IO::~IO()
 {
-  bpWriter->Close();
-  delete ad;
+    bpWriter->Close();
+    delete ad;
 }
 
 void /*IO::*/ old_style_write(int step, const HeatTransfer &ht,
                               const Settings &s, MPI_Comm comm)
 {
-  bpWriter->Write<double>(*varT, ht.data_noghost().data());
-  bpWriter->Advance();
+    bpWriter->Write<double>(*varT, ht.data_noghost().data());
+    bpWriter->Advance();
 }
 
 void IO::write(int step, const HeatTransfer &ht, const Settings &s,
                MPI_Comm comm)
 {
-  /* This selection is redundant and not required, since we defined
-   * the selection already in DefineVariable(). It is here just as an example.
-   */
-  // Make a selection to describe the local dimensions of the variable we write
-  // and
-  // its offsets in the global spaces. This could have been done in
-  // adios.DefineVariable()
-  adios::Selection sel = adios.SelectionBoundingBox(
-      {s.ndx, s.ndy},
-      {s.offsx, s.offsy}); // local dims and offsets; both as list
-  var2D.SetSelection(sel);
+    /* This selection is redundant and not required, since we defined
+     * the selection already in DefineVariable(). It is here just as an example.
+     */
+    // Make a selection to describe the local dimensions of the variable we
+    // write
+    // and
+    // its offsets in the global spaces. This could have been done in
+    // adios.DefineVariable()
+    adios::Selection sel = adios.SelectionBoundingBox(
+        {s.ndx, s.ndy},
+        {s.offsx, s.offsy}); // local dims and offsets; both as list
+    var2D.SetSelection(sel);
 
-  /* Select the area that we want to write from the data pointer we pass to the
-     writer.
-     Think HDF5 memspace, just not hyperslabs, only a bounding box selection.
-     Engine will copy this bounding box from the data pointer into the output
-     buffer.
-     Size of the bounding box should match the "space" selection which was given
-     above.
-     Default memspace is always the full selection.
-  */
-  adios::Selection memspace =
-      adios.SelectionBoundingBox({s.ndx, s.ndy}, {1, 1});
-  var2D.SetMemorySelection(memspace);
+    /* Select the area that we want to write from the data pointer we pass to
+       the
+       writer.
+       Think HDF5 memspace, just not hyperslabs, only a bounding box selection.
+       Engine will copy this bounding box from the data pointer into the output
+       buffer.
+       Size of the bounding box should match the "space" selection which was
+       given
+       above.
+       Default memspace is always the full selection.
+    */
+    adios::Selection memspace =
+        adios.SelectionBoundingBox({s.ndx, s.ndy}, {1, 1});
+    var2D.SetMemorySelection(memspace);
 
-  bpWriter->Write<double>(*varT, ht.data());
-  bpWriter->Advance();
+    bpWriter->Write<double>(*varT, ht.data());
+    bpWriter->Advance();
 }
diff --git a/examples/heatTransfer/IO_ascii.cpp b/examples/heatTransfer/IO_ascii.cpp
index ccf158dabdf8b373fb47290165556f6bb40e8254..5f16aa05f9ed1ac75892d903ec7af0fe794e64db 100644
--- a/examples/heatTransfer/IO_ascii.cpp
+++ b/examples/heatTransfer/IO_ascii.cpp
@@ -19,60 +19,61 @@ static std::streambuf *buf;
 
 IO::IO(const Settings &s, MPI_Comm comm)
 {
-  m_outputfilename = s.outputfile;
+    m_outputfilename = s.outputfile;
 
-  if (m_outputfilename == "cout")
-  {
-    buf = std::cout.rdbuf();
-  }
-  else
-  {
-    int rank;
-    MPI_Comm_rank(comm, &rank);
-    std::string rs = std::to_string(rank);
-    of.open(m_outputfilename + rs + ".txt");
-    buf = of.rdbuf();
-  }
+    if (m_outputfilename == "cout")
+    {
+        buf = std::cout.rdbuf();
+    }
+    else
+    {
+        int rank;
+        MPI_Comm_rank(comm, &rank);
+        std::string rs = std::to_string(rank);
+        of.open(m_outputfilename + rs + ".txt");
+        buf = of.rdbuf();
+    }
 }
 
 IO::~IO()
 {
-  if (m_outputfilename != "cout")
-  {
-    of.close();
-  }
+    if (m_outputfilename != "cout")
+    {
+        of.close();
+    }
 }
 
 void IO::write(int step, const HeatTransfer &ht, const Settings &s,
                MPI_Comm comm)
 {
-  std::ostream out(buf);
-  if (step == 0)
-  {
-    out << "rank=" << s.rank << " size=" << s.ndx << "x" << s.ndy
-        << " offsets=" << s.offsx << ":" << s.offsy << " step=" << step
-        << std::endl;
-    out << " time   row   columns " << s.offsy << "..." << s.offsy + s.ndy - 1
-        << std::endl;
-    out << "        ";
-    for (int j = 1; j <= s.ndy; ++j)
+    std::ostream out(buf);
+    if (step == 0)
+    {
+        out << "rank=" << s.rank << " size=" << s.ndx << "x" << s.ndy
+            << " offsets=" << s.offsx << ":" << s.offsy << " step=" << step
+            << std::endl;
+        out << " time   row   columns " << s.offsy << "..."
+            << s.offsy + s.ndy - 1 << std::endl;
+        out << "        ";
+        for (int j = 1; j <= s.ndy; ++j)
+        {
+            out << std::setw(9) << s.offsy + j - 1;
+        }
+        out << "\n-------------------------------------------------------------"
+               "-\n";
+    }
+    else
     {
-      out << std::setw(9) << s.offsy + j - 1;
+        out << std::endl;
     }
-    out << "\n--------------------------------------------------------------\n";
-  }
-  else
-  {
-    out << std::endl;
-  }
 
-  for (int i = 1; i <= s.ndx; ++i)
-  {
-    out << std::setw(5) << step << std::setw(5) << s.offsx + i - 1;
-    for (int j = 1; j <= s.ndy; ++j)
+    for (int i = 1; i <= s.ndx; ++i)
     {
-      out << std::setw(9) << ht.T(i, j);
+        out << std::setw(5) << step << std::setw(5) << s.offsx + i - 1;
+        for (int j = 1; j <= s.ndy; ++j)
+        {
+            out << std::setw(9) << ht.T(i, j);
+        }
+        out << std::endl;
     }
-    out << std::endl;
-  }
 }
diff --git a/examples/heatTransfer/IO_hdf5_a.cpp b/examples/heatTransfer/IO_hdf5_a.cpp
index 881085f0c59a28aa4a8547fb3a67853d99c35f9a..c0514b803dff617f24d732f8dbcae60a50f6dd7c 100644
--- a/examples/heatTransfer/IO_hdf5_a.cpp
+++ b/examples/heatTransfer/IO_hdf5_a.cpp
@@ -26,37 +26,38 @@ IO::~IO() {}
 void IO::write(int step, const HeatTransfer &ht, const Settings &s,
                MPI_Comm comm)
 {
-  std::string rs = std::to_string(s.rank);
-  std::string ts = std::to_string(step);
-  std::string fname = s.outputfile + "." + rs + "." + ts + ".h5";
-
-  // for time measurements, let's synchronize the processes
-  MPI_Barrier(comm);
-  double time_start = MPI_Wtime();
-
-  hsize_t dims[2] = {static_cast<hsize_t>(s.ndx), static_cast<hsize_t>(s.ndy)};
-
-  hid_t space = H5Screate_simple(2, dims, NULL);
-  hid_t file =
-      H5Fcreate(fname.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-  hid_t dset = H5Dcreate(file, "T", H5T_NATIVE_DOUBLE, space, H5P_DEFAULT,
-                         H5P_DEFAULT, H5P_DEFAULT);
-
-  H5Dwrite(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-           ht.data_noghost().data());
-
-  H5Dclose(dset);
-  H5Sclose(space);
-  H5Fclose(file);
-
-  MPI_Barrier(comm);
-  double total_time = MPI_Wtime() - time_start;
-  uint64_t adios_totalsize =
-      2 * sizeof(int) + 2 * s.ndx * s.ndy * sizeof(double);
-  uint64_t sizeMB =
-      adios_totalsize * s.nproc / 1024 / 1024 / 1024; // size in MB
-  uint64_t mbs = sizeMB / total_time;
-  if (s.rank == 0)
-    std::cout << "Step " << step << ": " << m_outputfilename << " " << sizeMB
-              << " " << total_time << "" << mbs << std::endl;
+    std::string rs = std::to_string(s.rank);
+    std::string ts = std::to_string(step);
+    std::string fname = s.outputfile + "." + rs + "." + ts + ".h5";
+
+    // for time measurements, let's synchronize the processes
+    MPI_Barrier(comm);
+    double time_start = MPI_Wtime();
+
+    hsize_t dims[2] = {static_cast<hsize_t>(s.ndx),
+                       static_cast<hsize_t>(s.ndy)};
+
+    hid_t space = H5Screate_simple(2, dims, NULL);
+    hid_t file =
+        H5Fcreate(fname.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    hid_t dset = H5Dcreate(file, "T", H5T_NATIVE_DOUBLE, space, H5P_DEFAULT,
+                           H5P_DEFAULT, H5P_DEFAULT);
+
+    H5Dwrite(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+             ht.data_noghost().data());
+
+    H5Dclose(dset);
+    H5Sclose(space);
+    H5Fclose(file);
+
+    MPI_Barrier(comm);
+    double total_time = MPI_Wtime() - time_start;
+    uint64_t adios_totalsize =
+        2 * sizeof(int) + 2 * s.ndx * s.ndy * sizeof(double);
+    uint64_t sizeMB =
+        adios_totalsize * s.nproc / 1024 / 1024 / 1024; // size in MB
+    uint64_t mbs = sizeMB / total_time;
+    if (s.rank == 0)
+        std::cout << "Step " << step << ": " << m_outputfilename << " "
+                  << sizeMB << " " << total_time << "" << mbs << std::endl;
 }
diff --git a/examples/heatTransfer/Settings.cpp b/examples/heatTransfer/Settings.cpp
index f5e0459ed2f989dcc08cb3a0c466e476369af247..4337a00a33f7b3865bceb1feeb569537f1e6271c 100644
--- a/examples/heatTransfer/Settings.cpp
+++ b/examples/heatTransfer/Settings.cpp
@@ -15,70 +15,70 @@
 
 static unsigned int convertToUint(std::string varName, char *arg)
 {
-  char *end;
-  int retval = std::strtoll(arg, &end, 10);
-  if (end[0] || errno == ERANGE)
-  {
-    throw std::invalid_argument("Invalid value given for " + varName + ": " +
-                                std::string(arg));
-  }
-  if (retval < 0)
-  {
-    throw std::invalid_argument("Negative value given for " + varName + ": " +
-                                std::string(arg));
-  }
-  return (unsigned int)retval;
+    char *end;
+    int retval = std::strtoll(arg, &end, 10);
+    if (end[0] || errno == ERANGE)
+    {
+        throw std::invalid_argument("Invalid value given for " + varName +
+                                    ": " + std::string(arg));
+    }
+    if (retval < 0)
+    {
+        throw std::invalid_argument("Negative value given for " + varName +
+                                    ": " + std::string(arg));
+    }
+    return (unsigned int)retval;
 }
 
 Settings::Settings(int argc, char *argv[], int rank, int nproc) : rank{rank}
 {
-  if (argc < 8)
-  {
-    throw std::invalid_argument("Not enough arguments");
-  }
-  this->nproc = (unsigned int)nproc;
+    if (argc < 8)
+    {
+        throw std::invalid_argument("Not enough arguments");
+    }
+    this->nproc = (unsigned int)nproc;
 
-  outputfile = argv[1];
-  npx = convertToUint("N", argv[2]);
-  npy = convertToUint("M", argv[3]);
-  ndx = convertToUint("nx", argv[4]);
-  ndy = convertToUint("ny", argv[5]);
-  steps = convertToUint("steps", argv[6]);
-  iterations = convertToUint("iterations", argv[7]);
+    outputfile = argv[1];
+    npx = convertToUint("N", argv[2]);
+    npy = convertToUint("M", argv[3]);
+    ndx = convertToUint("nx", argv[4]);
+    ndy = convertToUint("ny", argv[5]);
+    steps = convertToUint("steps", argv[6]);
+    iterations = convertToUint("iterations", argv[7]);
 
-  if (npx * npy != this->nproc)
-  {
-    throw std::invalid_argument("N*M must equal the number of processes");
-  }
+    if (npx * npy != this->nproc)
+    {
+        throw std::invalid_argument("N*M must equal the number of processes");
+    }
 
-  // calculate global array size and the local offsets in that global space
-  gndx = npx * ndx;
-  gndy = npy * ndy;
-  posx = rank % npx;
-  posy = rank / npx;
-  offsx = posx * ndx;
-  offsy = posy * ndy;
+    // calculate global array size and the local offsets in that global space
+    gndx = npx * ndx;
+    gndy = npy * ndy;
+    posx = rank % npx;
+    posy = rank / npx;
+    offsx = posx * ndx;
+    offsy = posy * ndy;
 
-  // determine neighbors
-  if (posx == 0)
-    rank_left = -1;
-  else
-    rank_left = rank - 1;
+    // determine neighbors
+    if (posx == 0)
+        rank_left = -1;
+    else
+        rank_left = rank - 1;
 
-  if (posx == npx - 1)
-    rank_right = -1;
-  else
-    rank_right = rank + 1;
+    if (posx == npx - 1)
+        rank_right = -1;
+    else
+        rank_right = rank + 1;
 
-  if (posy == 0)
-    rank_up = -1;
-  else
-    rank_up = rank - npx;
+    if (posy == 0)
+        rank_up = -1;
+    else
+        rank_up = rank - npx;
 
-  if (posy == npy - 1)
-    rank_down = -1;
-  else
-    rank_down = rank + npx;
+    if (posy == npy - 1)
+        rank_down = -1;
+    else
+        rank_down = rank + npx;
 }
 
 Settings::~Settings() {}
diff --git a/examples/heatTransfer/Settings.h b/examples/heatTransfer/Settings.h
index 85382656abff49205a77422ec5b880588ff74af6..97e85ea310adcd55a2ccc10ca8333346461b3949 100644
--- a/examples/heatTransfer/Settings.h
+++ b/examples/heatTransfer/Settings.h
@@ -17,37 +17,38 @@ class Settings
 {
 
 public:
-  // user arguments
-  std::string outputfile;
-  unsigned int npx;        // Number of processes in X (slow) dimension
-  unsigned int npy;        // Number of processes in Y (fast) dimension
-  unsigned int ndx;        // Local array size in X dimension per process
-  unsigned int ndy;        // Local array size in y dimension per process
-  unsigned int steps;      // Number of output steps
-  unsigned int iterations; // Number of computing iterations between steps
-
-  // calculated values from those arguments and number of processes
-  unsigned int gndx; // Global array size in slow dimension
-  unsigned int gndy; // Global array size in fast dimension
-  // X dim positions: rank 0, npx, 2npx... are in the same X position
-  // Y dim positions: npx number of consecutive processes belong to one row (npx
-  // columns)
-  unsigned int posx;  // Position of this process in X dimension
-  unsigned int posy;  // Position of this process in Y dimension
-  unsigned int offsx; // Offset of local array in X dimension on this process
-  unsigned int offsy; // Offset of local array in Y dimension on this process
-
-  int rank;           // MPI rank
-  unsigned int nproc; // number of processors
-
-  // neighbors by their MPI ranks, -1 if there is no such neighbor
-  int rank_left;
-  int rank_right;
-  int rank_up;
-  int rank_down;
-
-  Settings(int argc, char *argv[], int rank, int nproc);
-  ~Settings();
+    // user arguments
+    std::string outputfile;
+    unsigned int npx;        // Number of processes in X (slow) dimension
+    unsigned int npy;        // Number of processes in Y (fast) dimension
+    unsigned int ndx;        // Local array size in X dimension per process
+    unsigned int ndy;        // Local array size in y dimension per process
+    unsigned int steps;      // Number of output steps
+    unsigned int iterations; // Number of computing iterations between steps
+
+    // calculated values from those arguments and number of processes
+    unsigned int gndx; // Global array size in slow dimension
+    unsigned int gndy; // Global array size in fast dimension
+    // X dim positions: rank 0, npx, 2npx... are in the same X position
+    // Y dim positions: npx number of consecutive processes belong to one row
+    // (npx
+    // columns)
+    unsigned int posx;  // Position of this process in X dimension
+    unsigned int posy;  // Position of this process in Y dimension
+    unsigned int offsx; // Offset of local array in X dimension on this process
+    unsigned int offsy; // Offset of local array in Y dimension on this process
+
+    int rank;           // MPI rank
+    unsigned int nproc; // number of processors
+
+    // neighbors by their MPI ranks, -1 if there is no such neighbor
+    int rank_left;
+    int rank_right;
+    int rank_up;
+    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/main.cpp
index d15216eb8f775819f037eba802772949dd369bbb..1d1372f401ff641f3dc0da71a1b175b9b5c5b1fb 100644
--- a/examples/heatTransfer/main.cpp
+++ b/examples/heatTransfer/main.cpp
@@ -23,86 +23,87 @@
 
 void printUsage()
 {
-  std::cout << "Usage: heatTransfer  output  N  M   nx  ny   steps iterations\n"
-            << "  output: name of output file\n"
-            << "  N:      number of processes in X dimension\n"
-            << "  M:      number of processes in Y dimension\n"
-            << "  nx:     local array size in X dimension per processor\n"
-            << "  ny:     local array size in Y dimension per processor\n"
-            << "  steps:  the total number of steps to output\n"
-            << "  iterations: one step consist of this many iterations\n\n";
+    std::cout
+        << "Usage: heatTransfer  output  N  M   nx  ny   steps iterations\n"
+        << "  output: name of output file\n"
+        << "  N:      number of processes in X dimension\n"
+        << "  M:      number of processes in Y dimension\n"
+        << "  nx:     local array size in X dimension per processor\n"
+        << "  ny:     local array size in Y dimension per processor\n"
+        << "  steps:  the total number of steps to output\n"
+        << "  iterations: one step consist of this many iterations\n\n";
 }
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  /* World comm spans all applications started with the same aprun command
-     on a Cray XK6. So we have to split and create the local
-     'world' communicator for heat_transfer only.
-     In normal start-up, the communicator will just equal the MPI_COMM_WORLD.
-  */
+    MPI_Init(&argc, &argv);
+    /* World comm spans all applications started with the same aprun command
+       on a Cray XK6. So we have to split and create the local
+       'world' communicator for heat_transfer only.
+       In normal start-up, the communicator will just equal the MPI_COMM_WORLD.
+    */
 
-  int wrank, wnproc;
-  MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
-  MPI_Comm_size(MPI_COMM_WORLD, &wnproc);
-  MPI_Barrier(MPI_COMM_WORLD);
+    int wrank, wnproc;
+    MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
+    MPI_Comm_size(MPI_COMM_WORLD, &wnproc);
+    MPI_Barrier(MPI_COMM_WORLD);
 
-  const unsigned int color = 1;
-  MPI_Comm mpiHeatTransferComm;
-  MPI_Comm_split(MPI_COMM_WORLD, color, wrank, &mpiHeatTransferComm);
+    const unsigned int color = 1;
+    MPI_Comm mpiHeatTransferComm;
+    MPI_Comm_split(MPI_COMM_WORLD, color, wrank, &mpiHeatTransferComm);
 
-  int rank, nproc;
-  MPI_Comm_rank(mpiHeatTransferComm, &rank);
-  MPI_Comm_size(mpiHeatTransferComm, &nproc);
+    int rank, nproc;
+    MPI_Comm_rank(mpiHeatTransferComm, &rank);
+    MPI_Comm_size(mpiHeatTransferComm, &nproc);
 
-  try
-  {
-    double timeStart = MPI_Wtime();
-    Settings settings(argc, argv, rank, nproc);
-    HeatTransfer ht(settings);
-    IO io(settings, mpiHeatTransferComm);
+    try
+    {
+        double timeStart = MPI_Wtime();
+        Settings settings(argc, argv, rank, nproc);
+        HeatTransfer ht(settings);
+        IO io(settings, mpiHeatTransferComm);
+
+        ht.init(true);
+        ht.printT("Initialized T:", mpiHeatTransferComm);
+        ht.heatEdges();
+        // ht.exchange( mpiHeatTransferComm );
+        ht.printT("Heated T:", mpiHeatTransferComm);
+        io.write(0, ht, settings, mpiHeatTransferComm);
 
-    ht.init(true);
-    ht.printT("Initialized T:", mpiHeatTransferComm);
-    ht.heatEdges();
-    // ht.exchange( mpiHeatTransferComm );
-    ht.printT("Heated T:", mpiHeatTransferComm);
-    io.write(0, ht, settings, mpiHeatTransferComm);
+        for (unsigned int t = 1; t <= settings.steps; ++t)
+        {
+            if (rank == 0)
+                std::cout << "Step " << t << ":\n";
+            for (unsigned int iter = 1; iter <= settings.iterations; ++iter)
+            {
+                ht.iterate();
+                ht.exchange(mpiHeatTransferComm);
+                ht.heatEdges();
+            }
+            io.write(t, ht, settings, mpiHeatTransferComm);
+        }
+        MPI_Barrier(mpiHeatTransferComm);
 
-    for (unsigned int t = 1; t <= settings.steps; ++t)
+        double timeEnd = MPI_Wtime();
+        if (rank == 0)
+            std::cout << "Total runtime = " << timeEnd - timeStart << "s\n";
+    }
+    catch (std::invalid_argument &e) // command-line argument errors
     {
-      if (rank == 0)
-        std::cout << "Step " << t << ":\n";
-      for (unsigned int iter = 1; iter <= settings.iterations; ++iter)
-      {
-        ht.iterate();
-        ht.exchange(mpiHeatTransferComm);
-        ht.heatEdges();
-      }
-      io.write(t, ht, settings, mpiHeatTransferComm);
+        std::cout << e.what() << std::endl;
+        printUsage();
+    }
+    catch (std::ios_base::failure &e) // I/O failure (e.g. file not found)
+    {
+        std::cout << "I/O base exception caught\n";
+        std::cout << e.what() << std::endl;
+    }
+    catch (std::exception &e) // All other exceptions
+    {
+        std::cout << "Exception caught\n";
+        std::cout << e.what() << std::endl;
     }
-    MPI_Barrier(mpiHeatTransferComm);
-
-    double timeEnd = MPI_Wtime();
-    if (rank == 0)
-      std::cout << "Total runtime = " << timeEnd - timeStart << "s\n";
-  }
-  catch (std::invalid_argument &e) // command-line argument errors
-  {
-    std::cout << e.what() << std::endl;
-    printUsage();
-  }
-  catch (std::ios_base::failure &e) // I/O failure (e.g. file not found)
-  {
-    std::cout << "I/O base exception caught\n";
-    std::cout << e.what() << std::endl;
-  }
-  catch (std::exception &e) // All other exceptions
-  {
-    std::cout << "Exception caught\n";
-    std::cout << e.what() << std::endl;
-  }
 
-  MPI_Finalize();
-  return 0;
+    MPI_Finalize();
+    return 0;
 }
diff --git a/examples/hello/adios1Writer/helloADIOS1Writer.cpp b/examples/hello/adios1Writer/helloADIOS1Writer.cpp
index 9543ec43b2530c7f64d1435092dee25e8b6719e0..2a7803ab6edac9adc2618699fb3be45c3960b6c7 100644
--- a/examples/hello/adios1Writer/helloADIOS1Writer.cpp
+++ b/examples/hello/adios1Writer/helloADIOS1Writer.cpp
@@ -17,104 +17,107 @@
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank, nproc;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::INFO, adiosDebug);
-
-  // Application variable
-  float frank = (float)rank;
-  std::vector<double> myDoubles = {
-      frank,        frank + 0.1f, frank + 0.2f, frank + 0.3f, frank + 0.4f,
-      frank + 0.5f, frank + 0.6f, frank + 0.7f, frank + 0.8f, frank + 0.9f};
-  const std::size_t Nx = myDoubles.size();
-
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
-
-  std::vector<float> myMatrix;
-  myMatrix.reserve(rows * columns);
-  myMatrix.push_back(frank + 0.0);
-  myMatrix.push_back(frank + 0.1), myMatrix.push_back(frank + 0.2);
-  myMatrix.push_back(frank + 0.3);
-  myMatrix.push_back(frank + 0.4), myMatrix.push_back(frank + 0.5);
-  myMatrix.push_back(frank + 0.6);
-  myMatrix.push_back(frank + 0.7), myMatrix.push_back(frank + 0.8);
-
-  frank = -(float)rank;
-  std::vector<float> myMatrix2 = {frank - 0.1f, frank - 0.2f, frank - 0.3f,
-                                  frank - 0.4f, frank - 0.5f, frank - 0.6f,
-                                  frank - 0.7f, frank - 0.8f, frank - 0.9f};
-
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles = adios.DefineVariable<double>(
-        "myDoubles", {1, Nx}, {nproc, Nx}, {rank, 0});
-    adios::Variable<float> &ioMyMatrix = adios.DefineVariable<float>(
-        "myMatrix", {rows, columns}, {nproc * rows, columns}, {rank * rows, 0});
-    adios::Variable<float> &ioMyMatrix2 = adios.DefineVariable<float>(
-        "myMatrix2", {rows, columns}, {rows, nproc * columns},
-        {0, rank * columns});
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpWriterSettings.SetEngine("ADIOS1Writer");
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport(
-        "File", "profile_units=mus",
-        "have_metadata_file=no"); // uses default POSIX library
-
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings,
-                               adios::IOMode::COLLECTIVE);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
-
-    bpWriter->Write<double>(ioMyDoubles, myDoubles.data()); // Base class Engine
-                                                            // own the Write<T>
-                                                            // that will call
-                                                            // overloaded Write
-                                                            // from Derived
-
-    bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
-    bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
-
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    MPI_Init(&argc, &argv);
+    int rank, nproc;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::INFO, adiosDebug);
+
+    // Application variable
+    float frank = (float)rank;
+    std::vector<double> myDoubles = {
+        frank,        frank + 0.1f, frank + 0.2f, frank + 0.3f, frank + 0.4f,
+        frank + 0.5f, frank + 0.6f, frank + 0.7f, frank + 0.8f, frank + 0.9f};
+    const std::size_t Nx = myDoubles.size();
+
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
+
+    std::vector<float> myMatrix;
+    myMatrix.reserve(rows * columns);
+    myMatrix.push_back(frank + 0.0);
+    myMatrix.push_back(frank + 0.1), myMatrix.push_back(frank + 0.2);
+    myMatrix.push_back(frank + 0.3);
+    myMatrix.push_back(frank + 0.4), myMatrix.push_back(frank + 0.5);
+    myMatrix.push_back(frank + 0.6);
+    myMatrix.push_back(frank + 0.7), myMatrix.push_back(frank + 0.8);
+
+    frank = -(float)rank;
+    std::vector<float> myMatrix2 = {frank - 0.1f, frank - 0.2f, frank - 0.3f,
+                                    frank - 0.4f, frank - 0.5f, frank - 0.6f,
+                                    frank - 0.7f, frank - 0.8f, frank - 0.9f};
+
+    try
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles = adios.DefineVariable<double>(
+            "myDoubles", {1, Nx}, {nproc, Nx}, {rank, 0});
+        adios::Variable<float> &ioMyMatrix = adios.DefineVariable<float>(
+            "myMatrix", {rows, columns}, {nproc * rows, columns},
+            {rank * rows, 0});
+        adios::Variable<float> &ioMyMatrix2 = adios.DefineVariable<float>(
+            "myMatrix2", {rows, columns}, {rows, nproc * columns},
+            {0, rank * columns});
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpWriterSettings.SetEngine("ADIOS1Writer");
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport(
+            "File", "profile_units=mus",
+            "have_metadata_file=no"); // uses default POSIX library
+
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings,
+                                   adios::IOMode::COLLECTIVE);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
+
+        bpWriter->Write<double>(ioMyDoubles,
+                                myDoubles.data()); // Base class Engine
+                                                   // own the Write<T>
+                                                   // that will call
+                                                   // overloaded Write
+                                                   // from Derived
+
+        bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
+        bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
+
+        bpWriter->Close();
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/adios1Writer/helloADIOS1Writer_nompi.cpp b/examples/hello/adios1Writer/helloADIOS1Writer_nompi.cpp
index eb282251d2de28fbf726628c99dddfcc6bc62eb2..44d4d5547050e79ef4a3cb3b0222b4d21433438f 100644
--- a/examples/hello/adios1Writer/helloADIOS1Writer_nompi.cpp
+++ b/examples/hello/adios1Writer/helloADIOS1Writer_nompi.cpp
@@ -15,73 +15,76 @@
 
 int main(int argc, char *argv[])
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adiosDebug);
 
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
-  std::vector<float> myMatrix = {1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
+    std::vector<float> myMatrix = {1, 2, 3, 4, 5, 6, 7, 8, 9};
 
-  std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
+    std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
 
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
-    adios::Variable<float> &ioMyMatrix =
-        adios.DefineVariable<float>("myMatrix", adios::Dims{rows, columns});
-    adios::Variable<float> &ioMyMatrix2 =
-        adios.DefineVariable<float>("myMatrix2", adios::Dims{rows, columns});
-    adios::Variable<float> &ioMyMatrix3 =
-        adios.DefineVariable<float>("myMatrix3", adios::Dims{rows, columns});
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
+        adios::Variable<float> &ioMyMatrix =
+            adios.DefineVariable<float>("myMatrix", adios::Dims{rows, columns});
+        adios::Variable<float> &ioMyMatrix2 = adios.DefineVariable<float>(
+            "myMatrix2", adios::Dims{rows, columns});
+        adios::Variable<float> &ioMyMatrix3 = adios.DefineVariable<float>(
+            "myMatrix3", adios::Dims{rows, columns});
 
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SinglePOSIXFile"); // default method type is Writer
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport("File", "have_metadata_file=yes",
-                                  "profile_units=mus");
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SinglePOSIXFile"); // default method type is Writer
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport("File", "have_metadata_file=yes",
+                                      "profile_units=mus");
 
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpFileWriter = adios.Open("myDoubles_nompi.bp", "w", bpWriterSettings,
-                                   adios::IOMode::COLLECTIVE);
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpFileWriter =
+            adios.Open("myDoubles_nompi.bp", "w", bpWriterSettings,
+                       adios::IOMode::COLLECTIVE);
 
-    if (bpFileWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
+        if (bpFileWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
 
-    bpFileWriter->Write<double>(
-        ioMyDoubles, myDoubles.data()); // Base class Engine own the Write<T>
-                                        // that will call overloaded Write from
-                                        // Derived
-    bpFileWriter->Write<float>(ioMyMatrix, myMatrix.data());   // 2d Example
-    bpFileWriter->Write<float>(ioMyMatrix2, myMatrix2.data()); // 2d Example
-    bpFileWriter->Write<float>(ioMyMatrix3, myMatrix2.data()); // 2d Example
-    bpFileWriter->Close();
-    //
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        bpFileWriter->Write<double>(
+            ioMyDoubles,
+            myDoubles.data()); // Base class Engine own the Write<T>
+                               // that will call overloaded Write from
+                               // Derived
+        bpFileWriter->Write<float>(ioMyMatrix, myMatrix.data());   // 2d Example
+        bpFileWriter->Write<float>(ioMyMatrix2, myMatrix2.data()); // 2d Example
+        bpFileWriter->Write<float>(ioMyMatrix3, myMatrix2.data()); // 2d Example
+        bpFileWriter->Close();
+        //
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/bpReader/helloBPReader.cpp b/examples/hello/bpReader/helloBPReader.cpp
index 5558ee04a5ff9e00ccc772986689c0a348a3d295..934439584aad6c69509e2191e4a5d1ee3e38e0d0 100644
--- a/examples/hello/bpReader/helloBPReader.cpp
+++ b/examples/hello/bpReader/helloBPReader.cpp
@@ -17,54 +17,55 @@
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
 
-  try
-  {
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpReaderSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpReaderSettings.AddTransport("File"); // uses default POSIX library
+    try
+    {
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpReaderSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpReaderSettings.AddTransport("File"); // uses default POSIX library
 
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpReader = adios.Open("myDoubles_nompi.bp", "r", bpReaderSettings);
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpReader = adios.Open("myDoubles_nompi.bp", "r", bpReaderSettings);
 
-    if (bpReader == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpReader at Open\n");
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+        if (bpReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpReader at Open\n");
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/bpReader/helloBPReader_nompi.cpp b/examples/hello/bpReader/helloBPReader_nompi.cpp
index d5a604fbddb59f33f8f8a38ad09a825ec940d737..79de6af15eb5b0c6892d57a8a2c4b5a92d6f7009 100644
--- a/examples/hello/bpReader/helloBPReader_nompi.cpp
+++ b/examples/hello/bpReader/helloBPReader_nompi.cpp
@@ -15,40 +15,41 @@
 
 int main(int argc, char *argv[])
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adiosDebug);
 
-  try
-  {
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpReaderSettings = adios.DeclareMethod(
-        "SingleFile"); // default method type is BPWriter/BPReader
-    bpReaderSettings.AddTransport("File"); // uses default POSIX library
+    try
+    {
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpReaderSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter/BPReader
+        bpReaderSettings.AddTransport("File"); // uses default POSIX library
 
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpReader = adios.Open("myDoubles.bp", "r", bpReaderSettings);
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpReader = adios.Open("myDoubles.bp", "r", bpReaderSettings);
 
-    if (bpReader == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpReader at Open\n");
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        if (bpReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpReader at Open\n");
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/bpWriter/helloBPWriter.cpp b/examples/hello/bpWriter/helloBPWriter.cpp
index 7281aca901c1522f18b1aa074ea98e50cd006e53..27691eae1e3375c22c6006f3157be9427ed833f0 100644
--- a/examples/hello/bpWriter/helloBPWriter.cpp
+++ b/examples/hello/bpWriter/helloBPWriter.cpp
@@ -17,100 +17,102 @@
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::INFO, adiosDebug);
-
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
-
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
-
-  std::vector<float> myMatrix;
-  if (rank % 2 == 0) // even rank
-  {
-    myMatrix.reserve(rows * columns);
-    myMatrix.push_back(1);
-    myMatrix.push_back(2), myMatrix.push_back(3);
-    myMatrix.push_back(4);
-    myMatrix.push_back(5), myMatrix.push_back(6);
-    myMatrix.push_back(7);
-    myMatrix.push_back(8), myMatrix.push_back(8);
-  }
-
-  std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
-
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", {Nx});
-    adios::Variable<float> &ioMyMatrix =
-        adios.DefineVariable<float>("myMatrix", {rows, columns});
-    adios::Variable<float> &ioMyMatrix2 =
-        adios.DefineVariable<float>("myMatrix2", {rows, columns});
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport(
-        "File", "profile_units=mus",
-        "have_metadata_file=no"); // uses default POSIX library
-
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
-
-    bpWriter->Write<double>(ioMyDoubles, myDoubles.data()); // Base class Engine
-                                                            // own the Write<T>
-                                                            // that will call
-                                                            // overloaded Write
-                                                            // from Derived
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::INFO, adiosDebug);
 
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
+
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
+
+    std::vector<float> myMatrix;
     if (rank % 2 == 0) // even rank
     {
-      bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
-      bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
+        myMatrix.reserve(rows * columns);
+        myMatrix.push_back(1);
+        myMatrix.push_back(2), myMatrix.push_back(3);
+        myMatrix.push_back(4);
+        myMatrix.push_back(5), myMatrix.push_back(6);
+        myMatrix.push_back(7);
+        myMatrix.push_back(8), myMatrix.push_back(8);
     }
 
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
+
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", {Nx});
+        adios::Variable<float> &ioMyMatrix =
+            adios.DefineVariable<float>("myMatrix", {rows, columns});
+        adios::Variable<float> &ioMyMatrix2 =
+            adios.DefineVariable<float>("myMatrix2", {rows, columns});
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport(
+            "File", "profile_units=mus",
+            "have_metadata_file=no"); // uses default POSIX library
+
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
+
+        bpWriter->Write<double>(ioMyDoubles,
+                                myDoubles.data()); // Base class Engine
+                                                   // own the Write<T>
+                                                   // that will call
+                                                   // overloaded Write
+                                                   // from Derived
+
+        if (rank % 2 == 0) // even rank
+        {
+            bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
+            bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
+        }
+
+        bpWriter->Close();
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/bpWriter/helloBPWriter_nompi.cpp b/examples/hello/bpWriter/helloBPWriter_nompi.cpp
index 6c62e53b0aed54f866a7a5040cc2abe131d20765..68e3fcf6a79548e893939d24e264861b89861168 100644
--- a/examples/hello/bpWriter/helloBPWriter_nompi.cpp
+++ b/examples/hello/bpWriter/helloBPWriter_nompi.cpp
@@ -17,73 +17,77 @@
 
 int main(int /*argc*/, char ** /*argv*/)
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
 
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
-  std::vector<float> myMatrix = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-  std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
+    std::vector<float> myMatrix = {1, 2, 3, 4, 5, 6, 7, 8, 9};
 
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
-    adios::Variable<float> &ioMyMatrix =
-        adios.DefineVariable<float>("myMatrix", adios::Dims{rows, columns});
-    adios::Variable<float> &ioMyMatrix2 =
-        adios.DefineVariable<float>("myMatrix2", adios::Dims{rows, columns});
-    adios::Variable<float> &ioMyMatrix3 =
-        adios.DefineVariable<float>("myMatrix3", adios::Dims{rows, columns});
+    std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
 
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SinglePOSIXFile"); // default method type is Writer
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport("File", "have_metadata_file=yes",
-                                  "profile_units=mus");
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
+        adios::Variable<float> &ioMyMatrix =
+            adios.DefineVariable<float>("myMatrix", adios::Dims{rows, columns});
+        adios::Variable<float> &ioMyMatrix2 = adios.DefineVariable<float>(
+            "myMatrix2", adios::Dims{rows, columns});
+        adios::Variable<float> &ioMyMatrix3 = adios.DefineVariable<float>(
+            "myMatrix3", adios::Dims{rows, columns});
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SinglePOSIXFile"); // default method type is Writer
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport("File", "have_metadata_file=yes",
+                                      "profile_units=mus");
+
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpFileWriter =
+            adios.Open("myDoubles_nompi.bp", "w", bpWriterSettings);
 
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpFileWriter = adios.Open("myDoubles_nompi.bp", "w", bpWriterSettings);
+        if (bpFileWriter == nullptr)
+        {
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
+        }
 
-    if (bpFileWriter == nullptr)
+        bpFileWriter->Write<double>(
+            ioMyDoubles,
+            myDoubles.data()); // Base class Engine own the Write<T>
+                               // that will call overloaded Write from
+                               // Derived
+        bpFileWriter->Write<float>(ioMyMatrix, myMatrix.data());   // 2d Example
+        bpFileWriter->Write<float>(ioMyMatrix2, myMatrix2.data()); // 2d Example
+        bpFileWriter->Write<float>(ioMyMatrix3, myMatrix2.data()); // 2d Example
+        bpFileWriter->Close();
+        //
+    }
+    catch (std::invalid_argument &e)
     {
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
     }
 
-    bpFileWriter->Write<double>(
-        ioMyDoubles, myDoubles.data()); // Base class Engine own the Write<T>
-                                        // that will call overloaded Write from
-                                        // Derived
-    bpFileWriter->Write<float>(ioMyMatrix, myMatrix.data());   // 2d Example
-    bpFileWriter->Write<float>(ioMyMatrix2, myMatrix2.data()); // 2d Example
-    bpFileWriter->Write<float>(ioMyMatrix3, myMatrix2.data()); // 2d Example
-    bpFileWriter->Close();
-    //
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/compound/helloCompound.cpp b/examples/hello/compound/helloCompound.cpp
index fac04ed5936bf0d7fe4c7865435df32f2a84c96f..32ccddd7f70ffd8f0b992f36dda2839118d07c55 100644
--- a/examples/hello/compound/helloCompound.cpp
+++ b/examples/hello/compound/helloCompound.cpp
@@ -18,94 +18,98 @@
 
 struct Particle
 {
-  char Type[10];      ///< alpha, beta, gamma, etc.
-  double Position[3]; ///< x, y, z
-  double Velocity[3]; ///< Vx, Vy, Vz
+    char Type[10];      ///< alpha, beta, gamma, etc.
+    double Position[3]; ///< x, y, z
+    double Velocity[3]; ///< Vx, Vy, Vz
 };
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
-
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
-
-  Particle myParticle;
-  sprintf(myParticle.Type, "%s", "photon");
-  myParticle.Position[0] = 0;
-  myParticle.Position[1] = 1;
-  myParticle.Position[2] = 2;
-
-  myParticle.Velocity[0] = 10;
-  myParticle.Velocity[1] = 11;
-  myParticle.Velocity[2] = 12;
-
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
-
-    adios::VariableCompound &ioMyParticle =
-        adios.DefineVariableCompound<Particle>("myParticle", adios::Dims{1});
-    ioMyParticle.InsertMember<std::string>("Type", offsetof(Particle, Type));
-    ioMyParticle.InsertMember<std::vector<double>>(
-        "Position", offsetof(Particle, Position));
-    ioMyParticle.InsertMember<std::vector<double>>(
-        "Velocity", offsetof(Particle, Velocity));
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpWriterSettings.AddTransport(
-        "File", "have_metadata_file=yes"); // uses default POSIX library
-
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
-
-    bpWriter->Write(ioMyDoubles, myDoubles.data()); // Base class Engine own the
-                                                    // Write<T> that will call
-                                                    // overloaded Write from
-                                                    // Derived
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adiosDebug);
+
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
+
+    Particle myParticle;
+    sprintf(myParticle.Type, "%s", "photon");
+    myParticle.Position[0] = 0;
+    myParticle.Position[1] = 1;
+    myParticle.Position[2] = 2;
+
+    myParticle.Velocity[0] = 10;
+    myParticle.Velocity[1] = 11;
+    myParticle.Velocity[2] = 12;
+
+    try
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
+
+        adios::VariableCompound &ioMyParticle =
+            adios.DefineVariableCompound<Particle>("myParticle",
+                                                   adios::Dims{1});
+        ioMyParticle.InsertMember<std::string>("Type",
+                                               offsetof(Particle, Type));
+        ioMyParticle.InsertMember<std::vector<double>>(
+            "Position", offsetof(Particle, Position));
+        ioMyParticle.InsertMember<std::vector<double>>(
+            "Velocity", offsetof(Particle, Velocity));
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpWriterSettings.AddTransport(
+            "File", "have_metadata_file=yes"); // uses default POSIX library
+
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
+
+        bpWriter->Write(ioMyDoubles,
+                        myDoubles.data()); // Base class Engine own the
+                                           // Write<T> that will call
+                                           // overloaded Write from
+                                           // Derived
+        bpWriter->Close();
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::invalid_argument &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/compound/helloCompound_nompi.cpp b/examples/hello/compound/helloCompound_nompi.cpp
index 08b7debffa9c5f46ed2d2e129bde24f0b8e75778..52d4075ccde051180437ba06a1f7b66b9121c293 100644
--- a/examples/hello/compound/helloCompound_nompi.cpp
+++ b/examples/hello/compound/helloCompound_nompi.cpp
@@ -17,78 +17,82 @@
 
 struct Particle
 {
-  char Type[10];      ///< alpha, beta, gamma, etc.
-  double Position[3]; ///< x, y, z
-  double Velocity[3]; ///< Vx, Vy, Vz
+    char Type[10];      ///< alpha, beta, gamma, etc.
+    double Position[3]; ///< x, y, z
+    double Velocity[3]; ///< Vx, Vy, Vz
 };
 
 int main(int argc, char *argv[])
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adiosDebug);
 
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  Particle myParticle;
-  sprintf(myParticle.Type, "%s", "photon");
-  myParticle.Position[0] = 0;
-  myParticle.Position[1] = 1;
-  myParticle.Position[2] = 2;
+    Particle myParticle;
+    sprintf(myParticle.Type, "%s", "photon");
+    myParticle.Position[0] = 0;
+    myParticle.Position[1] = 1;
+    myParticle.Position[2] = 2;
 
-  myParticle.Velocity[0] = 10;
-  myParticle.Velocity[1] = 11;
-  myParticle.Velocity[2] = 12;
+    myParticle.Velocity[0] = 10;
+    myParticle.Velocity[1] = 11;
+    myParticle.Velocity[2] = 12;
 
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", adios::Dims{Nx});
 
-    adios::VariableCompound &ioMyParticle =
-        adios.DefineVariableCompound<Particle>("myParticle");
-    ioMyParticle.InsertMember<char>("Type", offsetof(Particle, Type));
-    ioMyParticle.InsertMember<double>("Position", offsetof(Particle, Position));
-    ioMyParticle.InsertMember<double>("Velocity", offsetof(Particle, Velocity));
+        adios::VariableCompound &ioMyParticle =
+            adios.DefineVariableCompound<Particle>("myParticle");
+        ioMyParticle.InsertMember<char>("Type", offsetof(Particle, Type));
+        ioMyParticle.InsertMember<double>("Position",
+                                          offsetof(Particle, Position));
+        ioMyParticle.InsertMember<double>("Velocity",
+                                          offsetof(Particle, Velocity));
 
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpWriterSettings.AddTransport(
-        "File", "have_metadata_file=yes"); // uses default POSIX library
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpWriterSettings.AddTransport(
+            "File", "have_metadata_file=yes"); // uses default POSIX library
 
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpWriter = adios.Open("myDoubles.bp", "w", bpWriterSettings);
 
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
 
-    bpWriter->Write(ioMyDoubles, myDoubles.data()); // Base class Engine own the
-                                                    // Write<T> that will call
-                                                    // overloaded Write from
-                                                    // Derived
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        bpWriter->Write(ioMyDoubles,
+                        myDoubles.data()); // Base class Engine own the
+                                           // Write<T> that will call
+                                           // overloaded Write from
+                                           // Derived
+        bpWriter->Close();
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/datamanReader/helloDataManReader.cpp b/examples/hello/datamanReader/helloDataManReader.cpp
index ec1713e73fa3368f0048caeba5abdb59b0efb37d..6c1c87897cd7f8bfef280a045586d5c94131d195 100644
--- a/examples/hello/datamanReader/helloDataManReader.cpp
+++ b/examples/hello/datamanReader/helloDataManReader.cpp
@@ -21,88 +21,91 @@
 void getcb(const void *data, std::string doid, std::string var,
            std::string dtype, std::vector<std::size_t> varshape)
 {
-  std::cout << "data object ID = " << doid << "\n"; // do you need to flush?
-  std::cout << "variable name = " << var << "\n";
-  std::cout << "data type = " << dtype << "\n";
+    std::cout << "data object ID = " << doid << "\n"; // do you need to flush?
+    std::cout << "variable name = " << var << "\n";
+    std::cout << "data type = " << dtype << "\n";
 
-  std::size_t varsize = std::accumulate(varshape.begin(), varshape.end(), 1,
-                                        std::multiplies<std::size_t>());
+    std::size_t varsize = std::accumulate(varshape.begin(), varshape.end(), 1,
+                                          std::multiplies<std::size_t>());
 
-  for (unsigned int i = 0; i < varsize; ++i)
-    std::cout << ((float *)data)[i] << " ";
-  std::cout << std::endl;
+    for (unsigned int i = 0; i < varsize; ++i)
+        std::cout << ((float *)data)[i] << " ";
+    std::cout << std::endl;
 }
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::WARN, adiosDebug);
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::WARN, adiosDebug);
 
-  try
-  {
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &datamanSettings = adios.DeclareMethod("WAN");
-    if (!datamanSettings.isUserDefined())
+    try
     {
-      // if not defined by user, we can change the default settings
-      datamanSettings.SetEngine("DataManReader");
-      datamanSettings.SetParameters("peer-to-peer=yes");
-      datamanSettings.AddTransport("Mdtm", "localIP=128.0.0.0.1",
-                                   "remoteIP=128.0.0.0.2", "tolerances=1,2,3");
-      // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
-      // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported ,
-      // will throw an exception
-    }
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &datamanSettings = adios.DeclareMethod("WAN");
+        if (!datamanSettings.isUserDefined())
+        {
+            // if not defined by user, we can change the default settings
+            datamanSettings.SetEngine("DataManReader");
+            datamanSettings.SetParameters("peer-to-peer=yes");
+            datamanSettings.AddTransport("Mdtm", "localIP=128.0.0.0.1",
+                                         "remoteIP=128.0.0.0.2",
+                                         "tolerances=1,2,3");
+            // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
+            // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported
+            // ,
+            // will throw an exception
+        }
 
-    // Create engine smart pointer to DataManReader Engine due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // DataManReader
-    auto datamanReader = adios.Open("myDoubles.bp", "r", datamanSettings,
-                                    adios::IOMode::INDEPENDENT);
+        // Create engine smart pointer to DataManReader Engine due to
+        // polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // DataManReader
+        auto datamanReader = adios.Open("myDoubles.bp", "r", datamanSettings,
+                                        adios::IOMode::INDEPENDENT);
 
-    if (datamanReader == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to create DataMan I/O engine at Open\n");
+        if (datamanReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to create DataMan I/O engine at Open\n");
 
-    datamanReader->SetCallBack(getcb);
+        datamanReader->SetCallBack(getcb);
 
-    adios::Variable<double> *ioMyDoubles =
-        datamanReader->InquireVariableDouble("ioMyDoubles");
-    if (ioMyDoubles == nullptr)
-      std::cout << "Variable ioMyDoubles not read...yet\n";
+        adios::Variable<double> *ioMyDoubles =
+            datamanReader->InquireVariableDouble("ioMyDoubles");
+        if (ioMyDoubles == nullptr)
+            std::cout << "Variable ioMyDoubles not read...yet\n";
 
-    datamanReader->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+        datamanReader->Close();
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/datamanReader/helloDataManReader_nompi.cpp b/examples/hello/datamanReader/helloDataManReader_nompi.cpp
index 28973cbc19a94c8dc6b5b9cd111b85a19c0b30fa..db7a717be43dbfe7809d1dbcc21f3645c03eda5d 100644
--- a/examples/hello/datamanReader/helloDataManReader_nompi.cpp
+++ b/examples/hello/datamanReader/helloDataManReader_nompi.cpp
@@ -17,81 +17,83 @@
 void getcb(const void *data, std::string doid, std::string var,
            std::string dtype, std::vector<std::size_t> varshape)
 {
-  std::cout << "data object ID = " << doid << "\n"; // do you need to flush?
-  std::cout << "variable name = " << var << "\n";
-  std::cout << "data type = " << dtype << "\n";
+    std::cout << "data object ID = " << doid << "\n"; // do you need to flush?
+    std::cout << "variable name = " << var << "\n";
+    std::cout << "data type = " << dtype << "\n";
 
-  std::size_t varsize = std::accumulate(varshape.begin(), varshape.end(), 1,
-                                        std::multiplies<std::size_t>());
+    std::size_t varsize = std::accumulate(varshape.begin(), varshape.end(), 1,
+                                          std::multiplies<std::size_t>());
 
-  for (unsigned int i = 0; i < varsize; ++i)
-    std::cout << ((float *)data)[i] << " ";
-  std::cout << std::endl;
+    for (unsigned int i = 0; i < varsize; ++i)
+        std::cout << ((float *)data)[i] << " ";
+    std::cout << std::endl;
 }
 
 int main(int argc, char *argv[])
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
 
-  try
-  {
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &datamanSettings = adios.DeclareMethod("WAN");
-    if (!datamanSettings.isUserDefined())
+    try
     {
-      // if not defined by user, we can change the default settings
-      datamanSettings.SetEngine("DataManReader");
-      datamanSettings.SetParameters("real_time=yes", "method_type=stream",
-                                    "method=zmq", "local_ip=127.0.0.1",
-                                    "remote_ip=127.0.0.1", "local_port=12307",
-                                    "remote_port=12306");
-      // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
-      // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported ,
-      // will throw an exception
-    }
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &datamanSettings = adios.DeclareMethod("WAN");
+        if (!datamanSettings.isUserDefined())
+        {
+            // if not defined by user, we can change the default settings
+            datamanSettings.SetEngine("DataManReader");
+            datamanSettings.SetParameters(
+                "real_time=yes", "method_type=stream", "method=zmq",
+                "local_ip=127.0.0.1", "remote_ip=127.0.0.1", "local_port=12307",
+                "remote_port=12306");
+            // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
+            // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported
+            // ,
+            // will throw an exception
+        }
 
-    // Create engine smart pointer to DataManReader Engine due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // DataManReader
-    auto datamanReader = adios.Open("myDoubles.bp", "r", datamanSettings,
-                                    adios::IOMode::INDEPENDENT);
+        // Create engine smart pointer to DataManReader Engine due to
+        // polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // DataManReader
+        auto datamanReader = adios.Open("myDoubles.bp", "r", datamanSettings,
+                                        adios::IOMode::INDEPENDENT);
 
-    if (datamanReader == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to create DataMan I/O engine at Open\n");
+        if (datamanReader == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to create DataMan I/O engine at Open\n");
 
-    datamanReader->SetCallBack(getcb);
+        datamanReader->SetCallBack(getcb);
 
-    while (1)
-    {
-    }
+        while (1)
+        {
+        }
 
-    adios::Variable<double> *ioMyDoubles =
-        datamanReader->InquireVariableDouble("ioMyDoubles");
-    if (ioMyDoubles == nullptr)
-      std::cout << "Variable ioMyDoubles not read...yet\n";
+        adios::Variable<double> *ioMyDoubles =
+            datamanReader->InquireVariableDouble("ioMyDoubles");
+        if (ioMyDoubles == nullptr)
+            std::cout << "Variable ioMyDoubles not read...yet\n";
 
-    datamanReader->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        datamanReader->Close();
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/datamanWriter/helloDataManWriter.cpp b/examples/hello/datamanWriter/helloDataManWriter.cpp
index 138abbcec405bed0ac6847667438387bf22b1ca1..745722051a5523d4f740475b361612f7569e76e9 100644
--- a/examples/hello/datamanWriter/helloDataManWriter.cpp
+++ b/examples/hello/datamanWriter/helloDataManWriter.cpp
@@ -17,99 +17,103 @@
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::WARN, adiosDebug);
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::WARN, adiosDebug);
 
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  std::vector<std::complex<float>> myCFloats;
-  myCFloats.reserve(3);
-  myCFloats.emplace_back(1, 3);
-  myCFloats.emplace_back(2, 2);
-  myCFloats.emplace_back(3, 1);
+    std::vector<std::complex<float>> myCFloats;
+    myCFloats.reserve(3);
+    myCFloats.emplace_back(1, 3);
+    myCFloats.emplace_back(2, 2);
+    myCFloats.emplace_back(3, 1);
 
-  try
-  {
-    // Define variable and local size
-    auto ioMyDoubles = adios.DefineVariable<double>("myDoubles", {Nx});
-    auto ioMyCFloats =
-        adios.DefineVariable<std::complex<float>>("myCFloats", {3});
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &datamanSettings = adios.DeclareMethod("WAN");
-    if (!datamanSettings.isUserDefined())
+    try
     {
-      // if not defined by user, we can change the default settings
-      datamanSettings.SetEngine("DatamanWriter");
-      datamanSettings.SetParameters("peer-to-peer=yes", "real_time=yes",
-                                    "compress=no");
-      datamanSettings.AddTransport("Mdtm", "localIP=128.0.0.0.1",
-                                   "remoteIP=128.0.0.0.2", "tolerances=1,2,3");
-      // datamanSettings.AddTransport( "file", "name=myfile.bp",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "file", "name=myfile.bp",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
-      // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported, will
-      // throw an exception
-    }
+        // Define variable and local size
+        auto ioMyDoubles = adios.DefineVariable<double>("myDoubles", {Nx});
+        auto ioMyCFloats =
+            adios.DefineVariable<std::complex<float>>("myCFloats", {3});
 
-    // Create engine smart pointer to DataMan Engine due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // DataMan
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &datamanSettings = adios.DeclareMethod("WAN");
+        if (!datamanSettings.IsUserDefined())
+        {
+            // if not defined by user, we can change the default settings
+            datamanSettings.SetEngine("DataManWriter");
+            datamanSettings.SetParameters("peer-to-peer=yes", "real_time=yes",
+                                          "compress=no");
+            datamanSettings.AddTransport("Mdtm", "localIP=128.0.0.0.1",
+                                         "remoteIP=128.0.0.0.2",
+                                         "tolerances=1,2,3");
+            // datamanSettings.AddTransport( "file", "name=myfile.bp",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "file", "name=myfile.bp",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
+            // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet
+            // supported, will
+            // throw an exception
+        }
 
-    // adios::DataManWriter datamanWriter;
+        // Create engine smart pointer to DataMan Engine due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // DataMan
 
-    auto datamanWriter = adios.Open("myDoubles.bp", "w", datamanSettings,
-                                    adios::IOMode::INDEPENDENT);
+        // adios::DataManWriter datamanWriter;
 
-    if (datamanWriter == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to create DataMan I/O engine at Open\n");
+        auto datamanWriter = adios.Open("myDoubles.bp", "w", datamanSettings,
+                                        adios::IOMode::INDEPENDENT);
 
-    datamanWriter->Write<double>(
-        ioMyDoubles, myDoubles.data()); // Base class Engine own the Write<T>
-                                        // that will call overloaded Write from
-                                        // Derived
-    datamanWriter->Write<std::complex<float>>(ioMyCFloats, myCFloats.data());
-    datamanWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+        if (datamanWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to create DataMan I/O engine at Open\n");
+
+        datamanWriter->Write<double>(
+            ioMyDoubles,
+            myDoubles.data()); // Base class Engine own the Write<T>
+                               // that will call overloaded Write from
+                               // Derived
+        datamanWriter->Write<std::complex<float>>(ioMyCFloats,
+                                                  myCFloats.data());
+        datamanWriter->Close();
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/datamanWriter/helloDataManWriter_nompi.cpp b/examples/hello/datamanWriter/helloDataManWriter_nompi.cpp
index 75114e8721323d17809359be69bbd2bfa32e4e03..58df48ab4eb805be9d47f7bb81332ff9322713c3 100644
--- a/examples/hello/datamanWriter/helloDataManWriter_nompi.cpp
+++ b/examples/hello/datamanWriter/helloDataManWriter_nompi.cpp
@@ -15,85 +15,89 @@
 
 int main(int argc, char *argv[])
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adios::Verbose::WARN, adiosDebug);
 
-  // Application variable
-  std::vector<float> myFloats = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<float> myFloats = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  std::vector<std::complex<float>> myCFloats;
-  myCFloats.reserve(3);
-  myCFloats.emplace_back(1, 3);
-  myCFloats.emplace_back(2, 2);
-  myCFloats.emplace_back(3, 1);
+    std::vector<std::complex<float>> myCFloats;
+    myCFloats.reserve(3);
+    myCFloats.emplace_back(1, 3);
+    myCFloats.emplace_back(2, 2);
+    myCFloats.emplace_back(3, 1);
 
-  try
-  {
-    // Define variable and local size
-    // Define variable and local size
-    auto ioMyFloats = adios.DefineVariable<float>("myfloats", adios::Dims{Nx});
-    auto ioMyFloat = adios.DefineVariable<float>("myfloat", adios::Dims{1});
-    //        auto& ioMyDoubles = adios.DefineVariable<double>( "myDoubles",
-    //        adios::Dims{Nx} );
-    //        auto& ioMyCFloats = adios.DefineVariable<std::complex<float>>(
-    //        "myCFloats", {3} );
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &datamanSettings = adios.DeclareMethod("WAN");
-    if (!datamanSettings.isUserDefined())
+    try
     {
-      // if not defined by user, we can change the default settings
-      datamanSettings.SetEngine("DataManWriter");
-      datamanSettings.SetParameters("real_time=yes", "method_type=stream",
-                                    "method=dump", "monitoring=yes",
-                                    "local_ip=127.0.0.1", "remote_ip=127.0.0.1",
-                                    "local_port=12306", "remote_port=12307");
-      // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
-      // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
-      // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
-      // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported ,
-      // will throw an exception
-    }
+        // Define variable and local size
+        // Define variable and local size
+        auto ioMyFloats =
+            adios.DefineVariable<float>("myfloats", adios::Dims{Nx});
+        auto ioMyFloat = adios.DefineVariable<float>("myfloat", adios::Dims{1});
+        //        auto& ioMyDoubles = adios.DefineVariable<double>( "myDoubles",
+        //        adios::Dims{Nx} );
+        //        auto& ioMyCFloats = adios.DefineVariable<std::complex<float>>(
+        //        "myCFloats", {3} );
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &datamanSettings = adios.DeclareMethod("WAN");
+        if (!datamanSettings.IsUserDefined())
+        {
+            // if not defined by user, we can change the default settings
+            datamanSettings.SetEngine("DataManWriter");
+            datamanSettings.SetParameters(
+                "real_time=yes", "method_type=stream", "method=dump",
+                "monitoring=yes", "local_ip=127.0.0.1", "remote_ip=127.0.0.1",
+                "local_port=12306", "remote_port=12307");
+            // datamanSettings.AddTransport( "Mdtm", "localIP=128.0.0.0.1",
+            // "remoteIP=128.0.0.0.2", "tolerances=1,2,3" );
+            // datamanSettings.AddTransport( "ZeroMQ", "localIP=128.0.0.0.1.1",
+            // "remoteIP=128.0.0.0.2.1", "tolerances=1,2,3" ); not yet supported
+            // ,
+            // will throw an exception
+        }
 
-    // Create engine smart pointer to DataMan Engine due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // DataMan
-    auto datamanWriter = adios.Open("myDoubles.bp", "w", datamanSettings,
-                                    adios::IOMode::INDEPENDENT);
+        // Create engine smart pointer to DataMan Engine due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // DataMan
+        auto datamanWriter = adios.Open("myDoubles.bp", "w", datamanSettings,
+                                        adios::IOMode::INDEPENDENT);
 
-    if (datamanWriter == nullptr)
-      throw std::ios_base::failure(
-          "ERROR: failed to create DataMan I/O engine at Open\n");
+        if (datamanWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: failed to create DataMan I/O engine at Open\n");
 
-    datamanWriter->Write<float>(
-        ioMyFloats, myFloats.data()); // Base class Engine own the Write<T> that
-                                      // will call overloaded Write from Derived
-    const float num = 1.12;
-    datamanWriter->Write<float>(ioMyFloat, &num); // Base class Engine own the
-                                                  // Write<T> that will call
-                                                  // overloaded Write from
-                                                  // Derived
-    //        datamanWriter->Write( ioMyCFloats, myCFloats.data() );
-    datamanWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        datamanWriter->Write<float>(
+            ioMyFloats,
+            myFloats.data()); // Base class Engine own the Write<T> that
+                              // will call overloaded Write from Derived
+        const float num = 1.12;
+        datamanWriter->Write<float>(ioMyFloat,
+                                    &num); // Base class Engine own the
+                                           // Write<T> that will call
+                                           // overloaded Write from
+                                           // Derived
+        //        datamanWriter->Write( ioMyCFloats, myCFloats.data() );
+        datamanWriter->Close();
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/timeBP/timeBPWriter.cpp b/examples/hello/timeBP/timeBPWriter.cpp
index 280e97e1e7eb08761a1b7ce5f0eba11bb4ed66e6..b9ae445debe12905c0614549778632eb32758a6b 100644
--- a/examples/hello/timeBP/timeBPWriter.cpp
+++ b/examples/hello/timeBP/timeBPWriter.cpp
@@ -17,107 +17,109 @@
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-  const bool adiosDebug = true;
-  adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::ERROR, adiosDebug);
-
-  // Application variable
-  std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
-
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
-
-  std::vector<float> myMatrix;
-  if (rank % 2 == 0) // even rank
-  {
-    myMatrix.reserve(rows * columns);
-    myMatrix.push_back(1);
-    myMatrix.push_back(2), myMatrix.push_back(3);
-    myMatrix.push_back(4);
-    myMatrix.push_back(5), myMatrix.push_back(6);
-    myMatrix.push_back(7);
-    myMatrix.push_back(8), myMatrix.push_back(8);
-  }
-
-  std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
-
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", {Nx});
-    adios::Variable<float> &ioMyMatrix =
-        adios.DefineVariable<float>("myMatrix", {rows, columns});
-    adios::Variable<float> &ioMyMatrix2 =
-        adios.DefineVariable<float>("myMatrix2", {rows, columns});
-
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("MyMethod"); // default method type is BPWriter
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport(
-        "File", "profile_units=mus",
-        "have_metadata_file=no"); // uses default POSIX library
-
-    // Create engine smart pointer due to polymorphism,
-    // Open returns a smart pointer to Engine containing the Derived class
-    // Writer
-    auto bpWriter = adios.Open("time.bp", "w", bpWriterSettings);
-
-    if (bpWriter == nullptr)
-      throw std::ios_base::failure("ERROR: couldn't create bpWriter at Open\n");
-
-    for (unsigned int t = 0; t < 10; ++t)
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::ERROR, adiosDebug);
+
+    // Application variable
+    std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
+
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
+
+    std::vector<float> myMatrix;
+    if (rank % 2 == 0) // even rank
     {
-      myDoubles[0] = t;
-      bpWriter->Write<double>(
-          ioMyDoubles, myDoubles.data()); // Base class Engine own the Write<T>
-                                          // that will call overloaded Write
-                                          // from Derived
-
-      if (rank % 2 == 0) // even rank
-      {
-        myMatrix[0] = t;
-        myMatrix2[0] = t;
-
-        bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
-        bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
-      }
-      bpWriter->Advance();
+        myMatrix.reserve(rows * columns);
+        myMatrix.push_back(1);
+        myMatrix.push_back(2), myMatrix.push_back(3);
+        myMatrix.push_back(4);
+        myMatrix.push_back(5), myMatrix.push_back(6);
+        myMatrix.push_back(7);
+        myMatrix.push_back(8), myMatrix.push_back(8);
     }
 
-    bpWriter->Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
+    std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
+
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", {Nx});
+        adios::Variable<float> &ioMyMatrix =
+            adios.DefineVariable<float>("myMatrix", {rows, columns});
+        adios::Variable<float> &ioMyMatrix2 =
+            adios.DefineVariable<float>("myMatrix2", {rows, columns});
+
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings =
+            adios.DeclareMethod("MyMethod"); // default method type is BPWriter
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport(
+            "File", "profile_units=mus",
+            "have_metadata_file=no"); // uses default POSIX library
+
+        // Create engine smart pointer due to polymorphism,
+        // Open returns a smart pointer to Engine containing the Derived class
+        // Writer
+        auto bpWriter = adios.Open("time.bp", "w", bpWriterSettings);
+
+        if (bpWriter == nullptr)
+            throw std::ios_base::failure(
+                "ERROR: couldn't create bpWriter at Open\n");
+
+        for (unsigned int t = 0; t < 10; ++t)
+        {
+            myDoubles[0] = t;
+            bpWriter->Write<double>(
+                ioMyDoubles,
+                myDoubles.data()); // Base class Engine own the Write<T>
+                                   // that will call overloaded Write
+                                   // from Derived
+
+            if (rank % 2 == 0) // even rank
+            {
+                myMatrix[0] = t;
+                myMatrix2[0] = t;
+
+                bpWriter->Write<float>(ioMyMatrix, myMatrix.data());
+                bpWriter->Write<float>(ioMyMatrix2, myMatrix2.data());
+            }
+            bpWriter->Advance();
+        }
+
+        bpWriter->Close();
+    }
+    catch (std::invalid_argument &e)
     {
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::ios_base::failure &e)
-  {
-    if (rank == 0)
+    catch (std::ios_base::failure &e)
     {
-      std::cout << "System exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "System exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
+    catch (std::exception &e)
     {
-      std::cout << "Exception, STOPPING PROGRAM\n";
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "Exception, STOPPING PROGRAM\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 
-  MPI_Finalize();
+    MPI_Finalize();
 
-  return 0;
+    return 0;
 }
diff --git a/examples/hello/timeBP/timeBPWriter_nompi.cpp b/examples/hello/timeBP/timeBPWriter_nompi.cpp
index 48fdd2bbf3111f3c36b550c927d03b475893bf4e..42af66f238ff9e7dad277d0d7c89e4dee30de5d0 100644
--- a/examples/hello/timeBP/timeBPWriter_nompi.cpp
+++ b/examples/hello/timeBP/timeBPWriter_nompi.cpp
@@ -15,82 +15,83 @@
 
 int main(int /*argc*/, char ** /*argv*/)
 {
-  const bool adiosDebug = true;
-  adios::ADIOS adios(adios::Verbose::ERROR, adiosDebug);
+    const bool adiosDebug = true;
+    adios::ADIOS adios(adios::Verbose::ERROR, adiosDebug);
 
-  // Application variable
-  std::vector<double> myDoubles = {10, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  const std::size_t Nx = myDoubles.size();
+    // Application variable
+    std::vector<double> myDoubles = {10, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    const std::size_t Nx = myDoubles.size();
 
-  const std::size_t rows = 3;
-  const std::size_t columns = 3;
+    const std::size_t rows = 3;
+    const std::size_t columns = 3;
 
-  std::vector<float> myMatrix;
-  myMatrix.reserve(rows * columns);
-  myMatrix.push_back(1);
-  myMatrix.push_back(2), myMatrix.push_back(3);
-  myMatrix.push_back(4);
-  myMatrix.push_back(5), myMatrix.push_back(6);
-  myMatrix.push_back(7);
-  myMatrix.push_back(8), myMatrix.push_back(8);
+    std::vector<float> myMatrix;
+    myMatrix.reserve(rows * columns);
+    myMatrix.push_back(1);
+    myMatrix.push_back(2), myMatrix.push_back(3);
+    myMatrix.push_back(4);
+    myMatrix.push_back(5), myMatrix.push_back(6);
+    myMatrix.push_back(7);
+    myMatrix.push_back(8), myMatrix.push_back(8);
 
-  std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
+    std::vector<float> myMatrix2 = {-1, -2, -3, -4, -5, -6, -7, -8, -9};
 
-  try
-  {
-    // Define variable and local size
-    adios::Variable<double> &ioMyDoubles =
-        adios.DefineVariable<double>("myDoubles", {Nx});
-    adios::Variable<float> &ioMyMatrix =
-        adios.DefineVariable<float>("myMatrix", {rows, columns});
-    adios::Variable<float> &ioMyMatrix2 =
-        adios.DefineVariable<float>("myMatrix2", {rows, columns});
+    try
+    {
+        // Define variable and local size
+        adios::Variable<double> &ioMyDoubles =
+            adios.DefineVariable<double>("myDoubles", {Nx});
+        adios::Variable<float> &ioMyMatrix =
+            adios.DefineVariable<float>("myMatrix", {rows, columns});
+        adios::Variable<float> &ioMyMatrix2 =
+            adios.DefineVariable<float>("myMatrix2", {rows, columns});
 
-    // Define method for engine creation, it is basically straight-forward
-    // parameters
-    adios::Method &bpWriterSettings =
-        adios.DeclareMethod("SingleFile"); // default method type is BPWriter
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport(
-        "File", "profile_units=mus",
-        "have_metadata_file=no"); // uses default POSIX library
+        // Define method for engine creation, it is basically straight-forward
+        // parameters
+        adios::Method &bpWriterSettings = adios.DeclareMethod(
+            "SingleFile"); // default method type is BPWriter
+        bpWriterSettings.SetParameters("profile_units=mus");
+        bpWriterSettings.AddTransport(
+            "File", "profile_units=mus",
+            "have_metadata_file=no"); // uses default POSIX library
 
-    // Create object directly rather than using polymorphism with ADIOS.Open
-    adios::BPFileWriter bpWriter(adios, "time_nompi.bp", "w", adios.m_MPIComm,
-                                 bpWriterSettings);
+        // Create object directly rather than using polymorphism with ADIOS.Open
+        adios::BPFileWriter bpWriter(adios, "time_nompi.bp", "w",
+                                     adios.m_MPIComm, bpWriterSettings);
 
-    for (unsigned int t = 0; t < 3; ++t)
-    {
-      myDoubles[0] = t; // t * -1;
-      myMatrix[0] = t;
-      myMatrix2[0] = t;
+        for (unsigned int t = 0; t < 3; ++t)
+        {
+            myDoubles[0] = t; // t * -1;
+            myMatrix[0] = t;
+            myMatrix2[0] = t;
 
-      bpWriter.Write(ioMyDoubles, myDoubles.data()); // Base class Engine own
-                                                     // the Write<T> that will
-                                                     // call overloaded Write
-                                                     // from Derived
-      bpWriter.Write(ioMyMatrix, myMatrix.data());
-      bpWriter.Write(ioMyMatrix2, myMatrix2.data());
-      bpWriter.Advance();
-    }
+            bpWriter.Write(ioMyDoubles,
+                           myDoubles.data()); // Base class Engine own
+                                              // the Write<T> that will
+                                              // call overloaded Write
+                                              // from Derived
+            bpWriter.Write(ioMyMatrix, myMatrix.data());
+            bpWriter.Write(ioMyMatrix2, myMatrix2.data());
+            bpWriter.Advance();
+        }
 
-    bpWriter.Close();
-  }
-  catch (std::invalid_argument &e)
-  {
-    std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::ios_base::failure &e)
-  {
-    std::cout << "System exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    std::cout << "Exception, STOPPING PROGRAM\n";
-    std::cout << e.what() << "\n";
-  }
+        bpWriter.Close();
+    }
+    catch (std::invalid_argument &e)
+    {
+        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::ios_base::failure &e)
+    {
+        std::cout << "System exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Exception, STOPPING PROGRAM\n";
+        std::cout << e.what() << "\n";
+    }
 
-  return 0;
+    return 0;
 }
diff --git a/examples/solidfluid/solidfluid_read.cpp b/examples/solidfluid/solidfluid_read.cpp
index 97f7f950563cf91b85747b32b3ba02f69b6ef6a4..028590601b9cdefaae4eeb6ebd37206726d70357 100644
--- a/examples/solidfluid/solidfluid_read.cpp
+++ b/examples/solidfluid/solidfluid_read.cpp
@@ -19,9 +19,9 @@
 
 struct MYDATA
 {
-  int NX;
-  double *t;
-  std::vector<double> p;
+    int NX;
+    double *t;
+    std::vector<double> p;
 };
 
 const int N = 10;
@@ -31,276 +31,284 @@ int rank, size;
 
 void read_ckpt(adios::ADIOS adios, struct MYDATA &solid, struct MYDATA &fluid)
 {
-  try
-  {
-    // Open an input which was written with an expected Method
-    // The write transport is associated with the group in the XML
-    // ADIOS pairs that with the corresponding read transport
-    // "r" is required to indicate we are reading
-    auto ckptfile = adios.Open("checkpoint.bp", "r", comm, "checkpoint");
-    // We can also manually set the read transport
-    // auto ckptfile = adios.Open("checkpoint.bp", adios::READ_METHOD_BP, "r",
-    // comm);
-
-    // Note: we only see a single step in the input but the checkpoint has
-    // only one step anyway. This makes this code simple
-
-    // simple immediate read of a scalar
-    ckptfile->ReadScalar("solid/NX", &solid.NX);
-    // solid.NX is filled at this point
-
-    // scheduled version of read of another scalar
-    // //ckptfile->ScheduleRead ("fluid/NX", &fluid.NX);
-    // //ckptfile->Read(); // perform reading now
-    ckptfile->Read("fluid/NX", &fluid.NX);
-    // fluid.NX is filled at this point
-
-    solid.t = new double(solid.NX);
-    solid.p = std::vector<double>(solid.NX);
-
-    fluid.t = new double(fluid.NX);
-    fluid.p = std::vector<double>(fluid.NX);
-
-    adios::ADIOS_SELECTION_WRITEBLOCK sel(rank);
-    adios.Read(ckptfile, sel, "solid/temperature", solid.t);
-    adios.Read(ckptfile, sel, "solid/pressure", solid.p);
-    adios.Read(ckptfile, sel, "fluid/temperature", fluid.t);
-    // force checking if the allocated space equals to the size of the
-    // selection:
-    adios.Read(ckptfile, sel, "fluid/pressure", fluid.p,
-               fluid.NX * sizeof(double));
-    adios.Read(ckptfile, true); // true: blocking read, which is also default
-    adios.Close(ckptfile); // Should this do Read() if user misses or should we
-                           // complain?
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    try
+    {
+        // Open an input which was written with an expected Method
+        // The write transport is associated with the group in the XML
+        // ADIOS pairs that with the corresponding read transport
+        // "r" is required to indicate we are reading
+        auto ckptfile = adios.Open("checkpoint.bp", "r", comm, "checkpoint");
+        // We can also manually set the read transport
+        // auto ckptfile = adios.Open("checkpoint.bp", adios::READ_METHOD_BP,
+        // "r",
+        // comm);
+
+        // Note: we only see a single step in the input but the checkpoint has
+        // only one step anyway. This makes this code simple
+
+        // simple immediate read of a scalar
+        ckptfile->ReadScalar("solid/NX", &solid.NX);
+        // solid.NX is filled at this point
+
+        // scheduled version of read of another scalar
+        // //ckptfile->ScheduleRead ("fluid/NX", &fluid.NX);
+        // //ckptfile->Read(); // perform reading now
+        ckptfile->Read("fluid/NX", &fluid.NX);
+        // fluid.NX is filled at this point
+
+        solid.t = new double(solid.NX);
+        solid.p = std::vector<double>(solid.NX);
+
+        fluid.t = new double(fluid.NX);
+        fluid.p = std::vector<double>(fluid.NX);
+
+        adios::ADIOS_SELECTION_WRITEBLOCK sel(rank);
+        adios.Read(ckptfile, sel, "solid/temperature", solid.t);
+        adios.Read(ckptfile, sel, "solid/pressure", solid.p);
+        adios.Read(ckptfile, sel, "fluid/temperature", fluid.t);
+        // force checking if the allocated space equals to the size of the
+        // selection:
+        adios.Read(ckptfile, sel, "fluid/pressure", fluid.p,
+                   fluid.NX * sizeof(double));
+        adios.Read(ckptfile,
+                   true); // true: blocking read, which is also default
+        adios.Close(
+            ckptfile); // Should this do Read() if user misses or should we
+                       // complain?
+    }
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 }
 
 void read_solid(adios::ADIOS adios, struct MYDATA &solid)
 {
-  float timeout_sec = 1.0;
-  int retval = 0;
-
-  try
-  {
-    // Open a file for input, no group defined
-    // A reading transport should be defined if not file based
-    // "r" is required to indicate we are reading
-    int solidfile = adios.Open("solid.bp", "r",
-                               comm); //, ADIOS_LOCKMODE_NONE, timeout_sec);
-    // int solidfile = adios.Open("solid.bp", adios::READ_METHOD_BP, "r", comm);
-    /* process file here... */
-    const adios::ADIOS_VARINFO &v = adios.InqVar(solidfile, "temperature");
-    v.GetBlockInfo();
-
-    printf("ndim = %d\n", v.ndim);
-    // printf ("nsteps = %d\n",  v.nsteps);
-    printf("dims[%" PRIu64 "][%" PRIu64 "]\n", v.dims[0], v.dims[1]);
-
-    uint64_t slice_size = v.dims[0] / size;
+    float timeout_sec = 1.0;
+    int retval = 0;
 
-    if (rank == size - 1)
-      slice_size = slice_size + v.dims[0] % size;
+    try
+    {
+        // Open a file for input, no group defined
+        // A reading transport should be defined if not file based
+        // "r" is required to indicate we are reading
+        int solidfile = adios.Open("solid.bp", "r",
+                                   comm); //, ADIOS_LOCKMODE_NONE, timeout_sec);
+        // int solidfile = adios.Open("solid.bp", adios::READ_METHOD_BP, "r",
+        // comm);
+        /* process file here... */
+        const adios::ADIOS_VARINFO &v = adios.InqVar(solidfile, "temperature");
+        v.GetBlockInfo();
 
-    start[0] = rank * slice_size;
-    count[0] = slice_size;
-    start[1] = 0;
-    count[1] = v.dims[1];
+        printf("ndim = %d\n", v.ndim);
+        // printf ("nsteps = %d\n",  v.nsteps);
+        printf("dims[%" PRIu64 "][%" PRIu64 "]\n", v.dims[0], v.dims[1]);
 
-    auto data = std::make_unique<double[]>(slice_size * v.dims[1] * 8);
+        uint64_t slice_size = v.dims[0] / size;
 
-    adios::ADIOS_SELECTION_BOUNDINGBOX sel(v.ndim, start, count);
+        if (rank == size - 1)
+            slice_size = slice_size + v.dims[0] % size;
 
-    /* Processing loop over the steps (we are already in the first one) */
-    while (adios_errno != err_end_of_stream)
-    {
-      steps++; // steps start counting from 1
+        start[0] = rank * slice_size;
+        count[0] = slice_size;
+        start[1] = 0;
+        count[1] = v.dims[1];
 
-      solidfile.ScheduleRead(sel, "temperature", solid.t);
-      solidfile.Read(true);
+        auto data = std::make_unique<double[]>(slice_size * v.dims[1] * 8);
 
-      if (rank == 0)
-        printf("--------- Step: %d --------------------------------\n",
-               solidfile.getCurrentStep());
+        adios::ADIOS_SELECTION_BOUNDINGBOX sel(v.ndim, start, count);
 
-      printf("rank=%d: [0:%" PRIu64 ",0:%" PRIu64 "] = [", rank, v.dims[0],
-             v.dims[1]);
-      for (i = 0; i < slice_size; i++)
-      {
-        printf(" [");
-        for (j = 0; j < v.dims[1]; j++)
+        /* Processing loop over the steps (we are already in the first one) */
+        while (adios_errno != err_end_of_stream)
         {
-          printf("%g ", *((double *)data + i * v.dims[1] + j));
+            steps++; // steps start counting from 1
+
+            solidfile.ScheduleRead(sel, "temperature", solid.t);
+            solidfile.Read(true);
+
+            if (rank == 0)
+                printf("--------- Step: %d --------------------------------\n",
+                       solidfile.getCurrentStep());
+
+            printf("rank=%d: [0:%" PRIu64 ",0:%" PRIu64 "] = [", rank,
+                   v.dims[0], v.dims[1]);
+            for (i = 0; i < slice_size; i++)
+            {
+                printf(" [");
+                for (j = 0; j < v.dims[1]; j++)
+                {
+                    printf("%g ", *((double *)data + i * v.dims[1] + j));
+                }
+                printf("]");
+            }
+            printf(" ]\n\n");
+
+            // advance to 1) next available step with 2) blocking wait
+            solidfile.AdvanceStep(false, timeout_sec);
+            if (adios_errno == err_step_notready)
+            {
+                printf("rank %d: No new step arrived within the timeout. Quit. "
+                       "%s\n",
+                       rank, adios_errmsg());
+                break; // quit while loop
+            }
         }
-        printf("]");
-      }
-      printf(" ]\n\n");
-
-      // advance to 1) next available step with 2) blocking wait
-      solidfile.AdvanceStep(false, timeout_sec);
-      if (adios_errno == err_step_notready)
-      {
-        printf("rank %d: No new step arrived within the timeout. Quit. %s\n",
-               rank, adios_errmsg());
-        break; // quit while loop
-      }
-    }
-    solidfile.Close();
-  }
-  catch (std::exception &e)
-  {
-    if (adios_errno == err_file_not_found)
-    {
-      printf("rank %d: Stream not found after waiting %f seconds: %s\n", rank,
-             timeout_sec, adios_errmsg());
-      retval = adios_errno;
-    }
-    else if (adios_errno == err_end_of_stream)
-    {
-      printf("rank %d: Stream terminated before open. %s\n", rank,
-             adios_errmsg());
-      retval = adios_errno;
+        solidfile.Close();
     }
-    else if (f == NULL)
+    catch (std::exception &e)
     {
-      printf("rank %d: Error at opening stream: %s\n", rank, adios_errmsg());
-      retval = adios_errno;
+        if (adios_errno == err_file_not_found)
+        {
+            printf("rank %d: Stream not found after waiting %f seconds: %s\n",
+                   rank, timeout_sec, adios_errmsg());
+            retval = adios_errno;
+        }
+        else if (adios_errno == err_end_of_stream)
+        {
+            printf("rank %d: Stream terminated before open. %s\n", rank,
+                   adios_errmsg());
+            retval = adios_errno;
+        }
+        else if (f == NULL)
+        {
+            printf("rank %d: Error at opening stream: %s\n", rank,
+                   adios_errmsg());
+            retval = adios_errno;
+        }
     }
-  }
 }
 
 void read_fluid(adios::ADIOS adios, struct MYDATA &fluid)
 {
-  float timeout_sec = 1.0;
-  int retval = 0;
+    float timeout_sec = 1.0;
+    int retval = 0;
 
-  // Open a file for input, no group defined
-  // A reading transport should be defined if not file based
-  // "r" is required to indicate we are reading
-  adios::ADIOS_INPUT fluidfile(comm, "r");
-
-  try
-  {
-    fluidfile.Open("fluid.bp"); //, ADIOS_LOCKMODE_NONE, timeout_sec);
-
-    /* process file here... */
-    const adios::ADIOS_VARINFO &v = fluidfile.InqVar("temperature");
-    v.GetBlockInfo();
-
-    printf("ndim = %d\n", v.ndim);
-    // printf ("nsteps = %d\n",  v.nsteps);
-    printf("dims[%" PRIu64 "][%" PRIu64 "]\n", v.dims[0], v.dims[1]);
+    // Open a file for input, no group defined
+    // A reading transport should be defined if not file based
+    // "r" is required to indicate we are reading
+    adios::ADIOS_INPUT fluidfile(comm, "r");
 
-    uint64_t slice_size = v.dims[0] / size;
+    try
+    {
+        fluidfile.Open("fluid.bp"); //, ADIOS_LOCKMODE_NONE, timeout_sec);
 
-    if (rank == size - 1)
-      slice_size = slice_size + v.dims[0] % size;
+        /* process file here... */
+        const adios::ADIOS_VARINFO &v = fluidfile.InqVar("temperature");
+        v.GetBlockInfo();
 
-    start[0] = rank * slice_size;
-    count[0] = slice_size;
-    start[1] = 0;
-    count[1] = v.dims[1];
+        printf("ndim = %d\n", v.ndim);
+        // printf ("nsteps = %d\n",  v.nsteps);
+        printf("dims[%" PRIu64 "][%" PRIu64 "]\n", v.dims[0], v.dims[1]);
 
-    data = malloc(slice_size * v.dims[1] * 8);
+        uint64_t slice_size = v.dims[0] / size;
 
-    adios::ADIOS_SELECTION_BOUNDINGBOX sel(v.ndim, start, count);
+        if (rank == size - 1)
+            slice_size = slice_size + v.dims[0] % size;
 
-    /* Processing loop over the steps (we are already in the first one) */
-    while (adios_errno != err_end_of_stream)
-    {
-      steps++; // steps start counting from 1
+        start[0] = rank * slice_size;
+        count[0] = slice_size;
+        start[1] = 0;
+        count[1] = v.dims[1];
 
-      fluidfile.ScheduleRead(sel, "temperature", fluid.t);
-      fluidfile.Read(true);
+        data = malloc(slice_size * v.dims[1] * 8);
 
-      if (rank == 0)
-        printf("--------- Step: %d --------------------------------\n",
-               fluidfile.getCurrentStep());
+        adios::ADIOS_SELECTION_BOUNDINGBOX sel(v.ndim, start, count);
 
-      printf("rank=%d: [0:%" PRIu64 ",0:%" PRIu64 "] = [", rank, v.dims[0],
-             v.dims[1]);
-      for (i = 0; i < slice_size; i++)
-      {
-        printf(" [");
-        for (j = 0; j < v.dims[1]; j++)
+        /* Processing loop over the steps (we are already in the first one) */
+        while (adios_errno != err_end_of_stream)
         {
-          printf("%g ", *((double *)data + i * v.dims[1] + j));
+            steps++; // steps start counting from 1
+
+            fluidfile.ScheduleRead(sel, "temperature", fluid.t);
+            fluidfile.Read(true);
+
+            if (rank == 0)
+                printf("--------- Step: %d --------------------------------\n",
+                       fluidfile.getCurrentStep());
+
+            printf("rank=%d: [0:%" PRIu64 ",0:%" PRIu64 "] = [", rank,
+                   v.dims[0], v.dims[1]);
+            for (i = 0; i < slice_size; i++)
+            {
+                printf(" [");
+                for (j = 0; j < v.dims[1]; j++)
+                {
+                    printf("%g ", *((double *)data + i * v.dims[1] + j));
+                }
+                printf("]");
+            }
+            printf(" ]\n\n");
+
+            // advance to 1) next available step with 2) blocking wait
+            fluidfile.AdvanceStep(false, timeout_sec);
+            if (adios_errno == err_step_notready)
+            {
+                printf("rank %d: No new step arrived within the timeout. Quit. "
+                       "%s\n",
+                       rank, adios_errmsg());
+                break; // quit while loop
+            }
         }
-        printf("]");
-      }
-      printf(" ]\n\n");
-
-      // advance to 1) next available step with 2) blocking wait
-      fluidfile.AdvanceStep(false, timeout_sec);
-      if (adios_errno == err_step_notready)
-      {
-        printf("rank %d: No new step arrived within the timeout. Quit. %s\n",
-               rank, adios_errmsg());
-        break; // quit while loop
-      }
-    }
-    fluidfile.Close();
-  }
-  catch (std::exception &e)
-  {
-    if (adios_errno == err_file_not_found)
-    {
-      printf("rank %d: Stream not found after waiting %f seconds: %s\n", rank,
-             timeout_sec, adios_errmsg());
-      retval = adios_errno;
-    }
-    else if (adios_errno == err_end_of_stream)
-    {
-      printf("rank %d: Stream terminated before open. %s\n", rank,
-             adios_errmsg());
-      retval = adios_errno;
+        fluidfile.Close();
     }
-    else if (f == NULL)
+    catch (std::exception &e)
     {
-      printf("rank %d: Error at opening stream: %s\n", rank, adios_errmsg());
-      retval = adios_errno;
+        if (adios_errno == err_file_not_found)
+        {
+            printf("rank %d: Stream not found after waiting %f seconds: %s\n",
+                   rank, timeout_sec, adios_errmsg());
+            retval = adios_errno;
+        }
+        else if (adios_errno == err_end_of_stream)
+        {
+            printf("rank %d: Stream terminated before open. %s\n", rank,
+                   adios_errmsg());
+            retval = adios_errno;
+        }
+        else if (f == NULL)
+        {
+            printf("rank %d: Error at opening stream: %s\n", rank,
+                   adios_errmsg());
+            retval = adios_errno;
+        }
     }
-  }
 }
 
 int main(int argc, char **argv)
 {
 
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
 
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios("globalArrayXML.xml", comm, true);
+    try
+    {
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios("globalArrayXML.xml", comm, true);
 
-    read_ckpt(adios, solid, fluid);
+        read_ckpt(adios, solid, fluid);
 
-    read_solid(adios, solid);
+        read_solid(adios, solid);
 
-    read_fluid(adios, fluid);
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+        read_fluid(adios, fluid);
+    }
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  if (rank == 0)
-    printf("We have processed %d steps\n", steps);
+    if (rank == 0)
+        printf("We have processed %d steps\n", steps);
 
-  free(data);
-  MPI_Finalize();
+    free(data);
+    MPI_Finalize();
 
-  return retval;
+    return retval;
 }
diff --git a/examples/solidfluid/solidfluid_write.cpp b/examples/solidfluid/solidfluid_write.cpp
index fd17df803d8c77336a471649e31c7543e1bec75f..68992800e2c9496ad51caa01b2e3e3a30e4eb66d 100644
--- a/examples/solidfluid/solidfluid_write.cpp
+++ b/examples/solidfluid/solidfluid_write.cpp
@@ -20,9 +20,9 @@ using adiosFile = std::shared_ptr<adios::Engine>;
 
 struct MYDATA
 {
-  int NX;
-  double *t;
-  std::vector<double> p;
+    int NX;
+    double *t;
+    std::vector<double> p;
 };
 
 const int N = 10;
@@ -32,206 +32,218 @@ int rank, size;
 
 void write_data(adiosFile writer, struct MYDATA &data)
 {
-  writer->Write("NX", &data.NX);
-  writer->Write("rank", &rank);
-  writer->Write("size", &size);
-  writer->Write("temperature", data.t);
-  writer->Write("pressure", data.p.data());
-  // writer->Flush();  AdvanceStep()???
+    writer->Write("NX", &data.NX);
+    writer->Write("rank", &rank);
+    writer->Write("size", &size);
+    writer->Write("temperature", data.t);
+    writer->Write("pressure", data.p.data());
+    // writer->Flush();  AdvanceStep()???
 }
 
 void write_checkpoint(adiosFile ckptfile, const struct MYDATA &solid,
                       const struct MYDATA &fluid)
 {
-  try
-  {
-    ckptfile->Write("solid/NX", &solid.NX);
-    ckptfile->Write("solid/rank", &rank);
-    ckptfile->Write("solid/size", &size);
-    ckptfile->Write("solid/temperature", solid.t);
-    ckptfile->Write("solid/pressure", &solid.p[0]);
-
-    ckptfile->Write("fluid/NX", &fluid.NX);
-    ckptfile->Write("fluid/rank", &rank);
-    ckptfile->Write("fluid/size", &size);
-    ckptfile->Write("fluid/temperature", fluid.t);
-    ckptfile->Write("fluid/pressure", fluid.p.data());
-    // ckptfile->AdvanceStep(); ??
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    try
     {
-      std::cout << "ERROR: caught an exception from write_checkpoint\n";
-      std::cout << e.what() << "\n";
+        ckptfile->Write("solid/NX", &solid.NX);
+        ckptfile->Write("solid/rank", &rank);
+        ckptfile->Write("solid/size", &size);
+        ckptfile->Write("solid/temperature", solid.t);
+        ckptfile->Write("solid/pressure", &solid.p[0]);
+
+        ckptfile->Write("fluid/NX", &fluid.NX);
+        ckptfile->Write("fluid/rank", &rank);
+        ckptfile->Write("fluid/size", &size);
+        ckptfile->Write("fluid/temperature", fluid.t);
+        ckptfile->Write("fluid/pressure", fluid.p.data());
+        // ckptfile->AdvanceStep(); ??
+    }
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
+    {
+        if (rank == 0)
+        {
+            std::cout << "ERROR: caught an exception from write_checkpoint\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 }
 
 void write_viz(std::shared_ptr<adios::Engine> vizstream, struct MYDATA &solid,
                struct MYDATA &fluid)
 {
-  // This stream is not associated with a group, so we must say for each write
-  // which group to use
-  // The output variable is re-defined inside as <groupname>/<varname>, unless
-  // given as third string argument
-  // An array variable's dimension definitions are also re-defined with
-  // dimensions <groupname>/<dimensionvar>
+    // This stream is not associated with a group, so we must say for each write
+    // which group to use
+    // The output variable is re-defined inside as <groupname>/<varname>, unless
+    // given as third string argument
+    // An array variable's dimension definitions are also re-defined with
+    // dimensions <groupname>/<dimensionvar>
 
-  // vizstream->Write ("solid", "NX", &solid.NX);
-  // vizstream->Write ("solid", "rank", &rank);
-  // vizstream->Write ("solid", "size", &size);
+    // vizstream->Write ("solid", "NX", &solid.NX);
+    // vizstream->Write ("solid", "rank", &rank);
+    // vizstream->Write ("solid", "size", &size);
 
-  // write solid group's temperature simply as temperature, risking overloading
-  // the 'temperature' variable when
-  // reading from a file
+    // write solid group's temperature simply as temperature, risking
+    // overloading
+    // the 'temperature' variable when
+    // reading from a file
 
-  // vizstream->Write ("solid", "temperature", "my/tempvarinfile", solid.t);
+    // vizstream->Write ("solid", "temperature", "my/tempvarinfile", solid.t);
 
-  // vizstream->Write ("fluid", "NX", &fluid.NX);
-  // vizstream->Write ("fluid", "rank", &rank);
-  // vizstream->Write ("fluid", "size", &size);
+    // vizstream->Write ("fluid", "NX", &fluid.NX);
+    // vizstream->Write ("fluid", "rank", &rank);
+    // vizstream->Write ("fluid", "size", &size);
 
-  // vizstream->Write ("fluid", "temperature", "temperature", fluid.t);
+    // vizstream->Write ("fluid", "temperature", "temperature", fluid.t);
 
-  // vizstream->Flush(); // flushes all data to disk; required operation
-  // vizstream.AdvanceStep();
+    // vizstream->Flush(); // flushes all data to disk; required operation
+    // vizstream.AdvanceStep();
 }
 
 void compute(int it, struct MYDATA &solid, struct MYDATA &fluid)
 {
-  for (int i = 0; i < solid.NX; i++)
-  {
-    solid.t[i] = it * 100.0 + rank * solid.NX + i;
-    solid.p[i] = it * 1000.0 + rank * solid.NX + i;
-  }
-  for (int i = 0; i < fluid.NX; i++)
-  {
-    fluid.t[i] = it * 200.0 + rank * fluid.NX + i;
-    fluid.p[i] = it * 2000.0 + rank * fluid.NX + i;
-  }
+    for (int i = 0; i < solid.NX; i++)
+    {
+        solid.t[i] = it * 100.0 + rank * solid.NX + i;
+        solid.p[i] = it * 1000.0 + rank * solid.NX + i;
+    }
+    for (int i = 0; i < fluid.NX; i++)
+    {
+        fluid.t[i] = it * 200.0 + rank * fluid.NX + i;
+        fluid.p[i] = it * 2000.0 + rank * fluid.NX + i;
+    }
 }
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  MPI_Comm_rank(comm, &rank);
-  MPI_Comm_size(comm, &size);
-
-  solid.NX = N;
-  solid.t = new double[N];
-  solid.p = std::vector<double>(N);
-
-  fluid.NX = N;
-  fluid.t = new double[N];
-  fluid.p = std::vector<double>(N);
-
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios(comm, true);
-
-    adios::Method &fileSettings =
-        adios.DeclareMethod("Reusable"); // default engine is BP writer
-    fileSettings.AddTransport("POSIX", "have_metadata_file=no");
-
-    // Open a file with a Method which has selected a group and a transport in
-    // the XML.
-    // "a" will append to an already existing file, "w" would create a new file
-    // Multiple writes to the same file work as append in this application run
-    // FIXME: how do we support Update to same step?
-
-    auto solidfile = adios.Open("solid.bp", "w", comm, fileSettings);
-
-    // "solid" is a method but incidentally also a group
-    // Constructor only creates an object and what is needed there but does not
-    // open a stream/file
-    // It can be used to initialize a staging connection if not declared before
-    // FIXME: which argument can be post-poned into Open() instead of
-    // constructor?
-    // solidfile.Open("solid.bp");
-
-    // Open a file with a Method that has selected a group and an engine in the
-    // XML
-    // The transport method(s) are (must be) associated with the engines
-    // "a" will append to an already existing file, "w" would create a new file
-    // Multiple writes to the same file work as append in this application run
-    // FIXME: how do we support Update to same step?
-    auto fluidfile = adios.Open("fluid.bp", "w", comm, fileSettings);
-
-    auto checkpointFile = adios.Open("checkpoint.bp", "w", comm, fileSettings);
-
-    // int ckptfile = adios.Open("checkpoint.bp", "checkpoint", "w", comm);
-    // we do not open this here, but every time when needed in a function
-
-    // Another output not associated with a single group, so that we can mix
-    // variables to it
-    // adios:handle vizstream = adios.Open( "stream.bp", comm, "w", "STAGING",
-    // "options to staging method");
-    auto vizstream = adios.Open("stream.bp", "w", comm, fileSettings);
-
-    // This creates an empty group inside, and we can write all kinds of
-    // variables to it
-
-    // Get Monitor info
-    std::ofstream logStream("info_" + std::to_string(rank) + ".log");
-    adios.MonitorVariables(logStream);
-
-    int checkPointSteps = 10;
-
-    for (int it = 1; it <= 100; it++)
-    {
-      compute(it, solid, fluid);
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
 
-      write_data(solidfile, solid);
-      write_data(fluidfile, fluid);
+    solid.NX = N;
+    solid.t = new double[N];
+    solid.p = std::vector<double>(N);
 
-      if (it % checkPointSteps == 0)
-      {
-        write_checkpoint(checkpointFile, solid, fluid);
+    fluid.NX = N;
+    fluid.t = new double[N];
+    fluid.p = std::vector<double>(N);
 
-        MPI_Barrier(comm);
-        if (rank == 0)
+    try
+    {
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios(comm, true);
+
+        adios::Method &fileSettings =
+            adios.DeclareMethod("Reusable"); // default engine is BP writer
+        fileSettings.AddTransport("POSIX", "have_metadata_file=no");
+
+        // Open a file with a Method which has selected a group and a transport
+        // in
+        // the XML.
+        // "a" will append to an already existing file, "w" would create a new
+        // file
+        // Multiple writes to the same file work as append in this application
+        // run
+        // FIXME: how do we support Update to same step?
+
+        auto solidfile = adios.Open("solid.bp", "w", comm, fileSettings);
+
+        // "solid" is a method but incidentally also a group
+        // Constructor only creates an object and what is needed there but does
+        // not
+        // open a stream/file
+        // It can be used to initialize a staging connection if not declared
+        // before
+        // FIXME: which argument can be post-poned into Open() instead of
+        // constructor?
+        // solidfile.Open("solid.bp");
+
+        // Open a file with a Method that has selected a group and an engine in
+        // the
+        // XML
+        // The transport method(s) are (must be) associated with the engines
+        // "a" will append to an already existing file, "w" would create a new
+        // file
+        // Multiple writes to the same file work as append in this application
+        // run
+        // FIXME: how do we support Update to same step?
+        auto fluidfile = adios.Open("fluid.bp", "w", comm, fileSettings);
+
+        auto checkpointFile =
+            adios.Open("checkpoint.bp", "w", comm, fileSettings);
+
+        // int ckptfile = adios.Open("checkpoint.bp", "checkpoint", "w", comm);
+        // we do not open this here, but every time when needed in a function
+
+        // Another output not associated with a single group, so that we can mix
+        // variables to it
+        // adios:handle vizstream = adios.Open( "stream.bp", comm, "w",
+        // "STAGING",
+        // "options to staging method");
+        auto vizstream = adios.Open("stream.bp", "w", comm, fileSettings);
+
+        // This creates an empty group inside, and we can write all kinds of
+        // variables to it
+
+        // Get Monitor info
+        std::ofstream logStream("info_" + std::to_string(rank) + ".log");
+        adios.MonitorVariables(logStream);
+
+        int checkPointSteps = 10;
+
+        for (int it = 1; it <= 100; it++)
         {
-          std::cout << "New checkpoint step, current = " << checkPointSteps
-                    << "\n";
-          std::cin >> checkPointSteps;
-          MPI_Bcast(&checkPointSteps, 1, MPI_INT, 0, comm);
+            compute(it, solid, fluid);
+
+            write_data(solidfile, solid);
+            write_data(fluidfile, fluid);
+
+            if (it % checkPointSteps == 0)
+            {
+                write_checkpoint(checkpointFile, solid, fluid);
+
+                MPI_Barrier(comm);
+                if (rank == 0)
+                {
+                    std::cout
+                        << "New checkpoint step, current = " << checkPointSteps
+                        << "\n";
+                    std::cin >> checkPointSteps;
+                    MPI_Bcast(&checkPointSteps, 1, MPI_INT, 0, comm);
+                }
+                MPI_Barrier(comm);
+            }
+
+            write_viz(vizstream, solid, fluid);
+
+            MPI_Barrier(comm);
+            if (rank == 0)
+                printf("Timestep %d written\n", it);
         }
-        MPI_Barrier(comm);
-      }
 
-      write_viz(vizstream, solid, fluid);
+        solidfile->Close();
+        fluidfile->Close();
+        vizstream->Close();
 
-      MPI_Barrier(comm);
-      if (rank == 0)
-        printf("Timestep %d written\n", it);
+        // need barrier before we destroy the ADIOS object here automatically
+        MPI_Barrier(comm);
+        if (rank == 0)
+            printf("Finalize adios\n");
     }
-
-    solidfile->Close();
-    fluidfile->Close();
-    vizstream->Close();
-
-    // need barrier before we destroy the ADIOS object here automatically
-    MPI_Barrier(comm);
-    if (rank == 0)
-      printf("Finalize adios\n");
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
     {
-      std::cout << "ERROR: " << e.what() << "\n";
+        if (rank == 0)
+        {
+            std::cout << "ERROR: " << e.what() << "\n";
+        }
     }
-  }
 
-  delete[] solid.t;
-  delete[] fluid.t;
+    delete[] solid.t;
+    delete[] fluid.t;
 
-  if (rank == 0)
-    printf("Finalize MPI\n");
-  MPI_Finalize();
-  return 0;
+    if (rank == 0)
+        printf("Finalize MPI\n");
+    MPI_Finalize();
+    return 0;
 }
diff --git a/examples/solidfluid/solidfluid_write_nompi.cpp b/examples/solidfluid/solidfluid_write_nompi.cpp
index c5342e9a755746b62dbad7c9118e68f4154247c5..37e641fdfcc455f318cbccfabfdf6f459ef362d7 100644
--- a/examples/solidfluid/solidfluid_write_nompi.cpp
+++ b/examples/solidfluid/solidfluid_write_nompi.cpp
@@ -20,9 +20,9 @@ using adiosFile = std::shared_ptr<adios::Engine>;
 
 struct MYDATA
 {
-  int NX;
-  double *t;
-  std::vector<double> p;
+    int NX;
+    double *t;
+    std::vector<double> p;
 };
 
 const int N = 10;
@@ -31,200 +31,212 @@ int rank = 0, size = 1;
 
 void set_io_variables(adios::ADIOS &adios, const std::string process)
 {
-  adios.DefineVariable<int>(process + "/NX");
-  adios.DefineVariable<int>(process + "/rank");
-  adios.DefineVariable<int>(process + "/size");
-  adios.DefineVariable<double>(process + "/temperature", adios::Dims{N});
-  adios.DefineVariable<double>(process + "/pressure", adios::Dims{N});
+    adios.DefineVariable<int>(process + "/NX");
+    adios.DefineVariable<int>(process + "/rank");
+    adios.DefineVariable<int>(process + "/size");
+    adios.DefineVariable<double>(process + "/temperature", adios::Dims{N});
+    adios.DefineVariable<double>(process + "/pressure", adios::Dims{N});
 }
 
 void write_data(adiosFile writer, const std::string process,
                 struct MYDATA &data)
 {
-  writer->Write(process + "/NX", &data.NX);
-  writer->Write(process + "/rank", &rank);
-  writer->Write(process + "/size", &size);
-  writer->Write(process + "/temperature", data.t);
-  writer->Write(process + "/pressure", data.p.data());
-  // writer->Flush();  AdvanceStep()???
+    writer->Write(process + "/NX", &data.NX);
+    writer->Write(process + "/rank", &rank);
+    writer->Write(process + "/size", &size);
+    writer->Write(process + "/temperature", data.t);
+    writer->Write(process + "/pressure", data.p.data());
+    // writer->Flush();  AdvanceStep()???
 }
 
 void write_checkpoint(adiosFile ckptfile, const struct MYDATA &solid,
                       const struct MYDATA &fluid)
 {
-  try
-  {
-    ckptfile->Write("solid/NX", &solid.NX);
-    ckptfile->Write("solid/rank", &rank);
-    ckptfile->Write("solid/size", &size);
-    ckptfile->Write("solid/temperature", solid.t);
-    ckptfile->Write("solid/pressure", &solid.p[0]);
-
-    ckptfile->Write("fluid/NX", &fluid.NX);
-    ckptfile->Write("fluid/rank", &rank);
-    ckptfile->Write("fluid/size", &size);
-    ckptfile->Write("fluid/temperature", fluid.t);
-    ckptfile->Write("fluid/pressure", fluid.p.data());
-    // ckptfile->AdvanceStep(); ??
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    if (rank == 0)
+    try
     {
-      std::cout << "ERROR: caught an exception from write_checkpoint\n";
-      std::cout << e.what() << "\n";
+        ckptfile->Write("solid/NX", &solid.NX);
+        ckptfile->Write("solid/rank", &rank);
+        ckptfile->Write("solid/size", &size);
+        ckptfile->Write("solid/temperature", solid.t);
+        ckptfile->Write("solid/pressure", &solid.p[0]);
+
+        ckptfile->Write("fluid/NX", &fluid.NX);
+        ckptfile->Write("fluid/rank", &rank);
+        ckptfile->Write("fluid/size", &size);
+        ckptfile->Write("fluid/temperature", fluid.t);
+        ckptfile->Write("fluid/pressure", fluid.p.data());
+        // ckptfile->AdvanceStep(); ??
+    }
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
+    {
+        if (rank == 0)
+        {
+            std::cout << "ERROR: caught an exception from write_checkpoint\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
 }
 
 void write_viz(adiosFile vizstream, struct MYDATA &solid, struct MYDATA &fluid)
 {
-  // This stream is not associated with a group, so we must say for each write
-  // which group to use
-  // The output variable is re-defined inside as <groupname>/<varname>, unless
-  // given as third string argument
-  // An array variable's dimension definitions are also re-defined with
-  // dimensions <groupname>/<dimensionvar>
+    // This stream is not associated with a group, so we must say for each write
+    // which group to use
+    // The output variable is re-defined inside as <groupname>/<varname>, unless
+    // given as third string argument
+    // An array variable's dimension definitions are also re-defined with
+    // dimensions <groupname>/<dimensionvar>
 
-  // vizstream->Write ("solid", "NX", &solid.NX);
-  // vizstream->Write ("solid", "rank", &rank);
-  // vizstream->Write ("solid", "size", &size);
+    // vizstream->Write ("solid", "NX", &solid.NX);
+    // vizstream->Write ("solid", "rank", &rank);
+    // vizstream->Write ("solid", "size", &size);
 
-  // write solid group's temperature simply as temperature, risking overloading
-  // the 'temperature' variable when
-  // reading from a file
+    // write solid group's temperature simply as temperature, risking
+    // overloading
+    // the 'temperature' variable when
+    // reading from a file
 
-  // vizstream->Write ("solid", "temperature", "my/tempvarinfile", solid.t);
+    // vizstream->Write ("solid", "temperature", "my/tempvarinfile", solid.t);
 
-  // vizstream->Write ("fluid", "NX", &fluid.NX);
-  // vizstream->Write ("fluid", "rank", &rank);
-  // vizstream->Write ("fluid", "size", &size);
+    // vizstream->Write ("fluid", "NX", &fluid.NX);
+    // vizstream->Write ("fluid", "rank", &rank);
+    // vizstream->Write ("fluid", "size", &size);
 
-  // vizstream->Write ("fluid", "temperature", "temperature", fluid.t);
+    // vizstream->Write ("fluid", "temperature", "temperature", fluid.t);
 
-  // vizstream->Flush(); // flushes all data to disk; required operation
-  // vizstream.AdvanceStep();
+    // vizstream->Flush(); // flushes all data to disk; required operation
+    // vizstream.AdvanceStep();
 }
 
 void compute(int it, struct MYDATA &solid, struct MYDATA &fluid)
 {
-  for (int i = 0; i < solid.NX; i++)
-  {
-    solid.t[i] = it * 100.0 + rank * solid.NX + i;
-    solid.p[i] = it * 1000.0 + rank * solid.NX + i;
-  }
-  for (int i = 0; i < fluid.NX; i++)
-  {
-    fluid.t[i] = it * 200.0 + rank * fluid.NX + i;
-    fluid.p[i] = it * 2000.0 + rank * fluid.NX + i;
-  }
+    for (int i = 0; i < solid.NX; i++)
+    {
+        solid.t[i] = it * 100.0 + rank * solid.NX + i;
+        solid.p[i] = it * 1000.0 + rank * solid.NX + i;
+    }
+    for (int i = 0; i < fluid.NX; i++)
+    {
+        fluid.t[i] = it * 200.0 + rank * fluid.NX + i;
+        fluid.p[i] = it * 2000.0 + rank * fluid.NX + i;
+    }
 }
 
 int main(int argc, char *argv[])
 {
-  solid.NX = N;
-  solid.t = new double[N];
-  solid.p = std::vector<double>(N);
-
-  fluid.NX = N;
-  fluid.t = new double[N];
-  fluid.p = std::vector<double>(N);
-
-  try
-  {
-    // ADIOS manager object creation. MPI must be initialized
-    adios::ADIOS adios(true);
-    set_io_variables(adios, "solid");
-    set_io_variables(adios, "fluid");
-
-    adios::Method &fileSettings =
-        adios.DeclareMethod("Reusable"); // default engine is BP writer
-    fileSettings.AddTransport("POSIX", "have_metadata_file=no");
-
-    // Open a file with a Method which has selected a group and a transport in
-    // the XML.
-    // "a" will append to an already existing file, "w" would create a new file
-    // Multiple writes to the same file work as append in this application run
-    // FIXME: how do we support Update to same step?
-
-    auto solidfile = adios.Open("solid.bp", "w", fileSettings);
-
-    // "solid" is a method but incidentally also a group
-    // Constructor only creates an object and what is needed there but does not
-    // open a stream/file
-    // It can be used to initialize a staging connection if not declared before
-    // FIXME: which argument can be post-poned into Open() instead of
-    // constructor?
-    // solidfile.Open("solid.bp");
-
-    // Open a file with a Method that has selected a group and an engine in the
-    // XML
-    // The transport method(s) are (must be) associated with the engines
-    // "a" will append to an already existing file, "w" would create a new file
-    // Multiple writes to the same file work as append in this application run
-    // FIXME: how do we support Update to same step?
-    auto fluidfile = adios.Open("fluid.bp", "w", fileSettings);
-
-    auto checkpointFile = adios.Open("checkpoint.bp", "w", fileSettings);
-
-    // int ckptfile = adios.Open("checkpoint.bp", "checkpoint", "w", comm);
-    // we do not open this here, but every time when needed in a function
-
-    // Another output not associated with a single group, so that we can mix
-    // variables to it
-    // adios:handle vizstream = adios.Open( "stream.bp", comm, "w", "STAGING",
-    // "options to staging method");
-    auto vizstream = adios.Open("stream.bp", "w", fileSettings);
-
-    // This creates an empty group inside, and we can write all kinds of
-    // variables to it
-
-    // Get Monitor info
-    std::ofstream logStream("info_nompi.log");
-    adios.MonitorVariables(logStream);
-
-    int checkPointSteps = 10;
-
-    for (int it = 1; it <= 100; it++)
+    solid.NX = N;
+    solid.t = new double[N];
+    solid.p = std::vector<double>(N);
+
+    fluid.NX = N;
+    fluid.t = new double[N];
+    fluid.p = std::vector<double>(N);
+
+    try
     {
-      compute(it, solid, fluid);
+        // ADIOS manager object creation. MPI must be initialized
+        adios::ADIOS adios(true);
+        set_io_variables(adios, "solid");
+        set_io_variables(adios, "fluid");
+
+        adios::Method &fileSettings =
+            adios.DeclareMethod("Reusable"); // default engine is BP writer
+        fileSettings.AddTransport("POSIX", "have_metadata_file=no");
+
+        // Open a file with a Method which has selected a group and a transport
+        // in
+        // the XML.
+        // "a" will append to an already existing file, "w" would create a new
+        // file
+        // Multiple writes to the same file work as append in this application
+        // run
+        // FIXME: how do we support Update to same step?
+
+        auto solidfile = adios.Open("solid.bp", "w", fileSettings);
+
+        // "solid" is a method but incidentally also a group
+        // Constructor only creates an object and what is needed there but does
+        // not
+        // open a stream/file
+        // It can be used to initialize a staging connection if not declared
+        // before
+        // FIXME: which argument can be post-poned into Open() instead of
+        // constructor?
+        // solidfile.Open("solid.bp");
+
+        // Open a file with a Method that has selected a group and an engine in
+        // the
+        // XML
+        // The transport method(s) are (must be) associated with the engines
+        // "a" will append to an already existing file, "w" would create a new
+        // file
+        // Multiple writes to the same file work as append in this application
+        // run
+        // FIXME: how do we support Update to same step?
+        auto fluidfile = adios.Open("fluid.bp", "w", fileSettings);
+
+        auto checkpointFile = adios.Open("checkpoint.bp", "w", fileSettings);
+
+        // int ckptfile = adios.Open("checkpoint.bp", "checkpoint", "w", comm);
+        // we do not open this here, but every time when needed in a function
+
+        // Another output not associated with a single group, so that we can mix
+        // variables to it
+        // adios:handle vizstream = adios.Open( "stream.bp", comm, "w",
+        // "STAGING",
+        // "options to staging method");
+        auto vizstream = adios.Open("stream.bp", "w", fileSettings);
+
+        // This creates an empty group inside, and we can write all kinds of
+        // variables to it
+
+        // Get Monitor info
+        std::ofstream logStream("info_nompi.log");
+        adios.MonitorVariables(logStream);
+
+        int checkPointSteps = 10;
+
+        for (int it = 1; it <= 100; it++)
+        {
+            compute(it, solid, fluid);
 
-      write_data(solidfile, "solid", solid);
-      write_data(fluidfile, "fluid", fluid);
+            write_data(solidfile, "solid", solid);
+            write_data(fluidfile, "fluid", fluid);
 
-      if (it % checkPointSteps == 0)
-      {
-        write_checkpoint(checkpointFile, solid, fluid);
+            if (it % checkPointSteps == 0)
+            {
+                write_checkpoint(checkpointFile, solid, fluid);
 
-        {
-          std::cout << "New checkpoint step, current = " << checkPointSteps
-                    << "\n";
-          std::cin >> checkPointSteps;
-        }
-      }
+                {
+                    std::cout
+                        << "New checkpoint step, current = " << checkPointSteps
+                        << "\n";
+                    std::cin >> checkPointSteps;
+                }
+            }
 
-      write_viz(vizstream, solid, fluid);
+            write_viz(vizstream, solid, fluid);
 
-      std::cout << "Timestep " << it << " written\n";
-    }
+            std::cout << "Timestep " << it << " written\n";
+        }
 
-    solidfile->Close();
-    fluidfile->Close();
-    vizstream->Close();
-    checkpointFile->Close();
+        solidfile->Close();
+        fluidfile->Close();
+        vizstream->Close();
+        checkpointFile->Close();
 
-    // need barrier before we destroy the ADIOS object here automatically ...no!
-    std::cout << "Finalize adios\n";
-  }
-  catch (std::exception &e) // need to think carefully how to handle C++
-                            // exceptions with MPI to avoid deadlocking
-  {
-    std::cout << e.what() << "\n";
-  }
+        // need barrier before we destroy the ADIOS object here automatically
+        // ...no!
+        std::cout << "Finalize adios\n";
+    }
+    catch (std::exception &e) // need to think carefully how to handle C++
+                              // exceptions with MPI to avoid deadlocking
+    {
+        std::cout << e.what() << "\n";
+    }
 
-  delete[] solid.t;
-  delete[] fluid.t;
+    delete[] solid.t;
+    delete[] fluid.t;
 
-  return 0;
+    return 0;
 }
diff --git a/examples/xmlParser/xmlParser.cpp b/examples/xmlParser/xmlParser.cpp
index 358f4467888e4b44e34f3b8290dd1c5fed9f0e4e..98624de22bb771c31a2b9a5de2b9a62fb17ace88 100644
--- a/examples/xmlParser/xmlParser.cpp
+++ b/examples/xmlParser/xmlParser.cpp
@@ -25,40 +25,40 @@ static void Usage();
 
 int main(int argc, char *argv[])
 {
-  MPI_Init(&argc, &argv);
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Init(&argc, &argv);
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
-  try
-  {
-    if (argc != 2)
+    try
     {
-      Usage();
+        if (argc != 2)
+        {
+            Usage();
+        }
+        else
+        {
+            const std::string xmlConfigFile(argv[1]);
+            adios::ADIOS adios(xmlConfigFile, MPI_COMM_WORLD, true);
+            adios.MonitorGroups(std::cout);
+        }
     }
-    else
+    catch (std::exception &e)
     {
-      const std::string xmlConfigFile(argv[1]);
-      adios::ADIOS adios(xmlConfigFile, MPI_COMM_WORLD, true);
-      adios.MonitorGroups(std::cout);
+        if (rank == 0)
+        {
+            std::cout << "ERROR: exception caught\n";
+            std::cout << e.what() << "\n";
+        }
     }
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-    {
-      std::cout << "ERROR: exception caught\n";
-      std::cout << e.what() << "\n";
-    }
-  }
 
-  MPI_Finalize();
-  return 0;
+    MPI_Finalize();
+    return 0;
 }
 
 static void Usage()
 {
-  std::cout << "Program to test XML Config file parsing\n";
-  std::cout << "Usage: \n";
-  std::cout << "\t MPI version: ./xmlParser_mpi xmlConfigFile\n";
-  std::cout << "\t Non-MPI version: ./xmlParser_nompi xmlConfigFile\n";
+    std::cout << "Program to test XML Config file parsing\n";
+    std::cout << "Usage: \n";
+    std::cout << "\t MPI version: ./xmlParser_mpi xmlConfigFile\n";
+    std::cout << "\t Non-MPI version: ./xmlParser_nompi xmlConfigFile\n";
 }
diff --git a/include/ADIOS.h b/include/ADIOS.h
index e0a42c05aa45d8d21add357ae69d5c5aace3e38f..5e711e3eabad6d787e83e8ca37b1fdca0243a0f9 100644
--- a/include/ADIOS.h
+++ b/include/ADIOS.h
@@ -42,627 +42,621 @@ class Engine;
 class ADIOS
 {
 public:
-  MPI_Comm m_MPIComm = MPI_COMM_SELF; ///< only used as reference to MPI
-                                      /// communicator passed from parallel
-  /// constructor, MPI_Comm is a pointer
-  /// itself. Public as called from C
-
-  int m_RankMPI = 0; ///< current MPI rank process
-  int m_SizeMPI = 1; ///< current MPI processes size
-
-  std::string m_HostLanguage = "C++";
-
-  /**
-   * @brief ADIOS empty constructor. Used for non XML config file API calls.
-   */
-  ADIOS(const Verbose verbose = Verbose::WARN, const bool debugMode = false);
-
-  /**
-   * @brief Serial constructor for config file, only allowed and compiled in
-   * libadios_nompi.a
-   * @param config XML config file name
-   * @param debugMode true: on throws exceptions and do additional checks,
-   * false: off (faster, but unsafe)
-   */
-  ADIOS(const std::string config, const Verbose verbose = Verbose::WARN,
-        const bool debugMode = false);
-
-  /**
-   * @brief Parallel constructor for XML config file and MPI
-   * @param config XML config file
-   * @param mpiComm MPI communicator ...const to be discussed
-   * @param debugMode true: on, false: off (faster, but unsafe)
-   */
-
-  ADIOS(const std::string config, MPI_Comm mpiComm,
-        const Verbose verbose = Verbose::WARN, const bool debugMode = false);
-
-  /**
-   * @brief Parallel MPI communicator without XML config file
-   * @param mpiComm MPI communicator passed to m_MPIComm*
-   * @param debugMode true: on, false: off (faster)
-   */
-  ADIOS(MPI_Comm mpiComm, const Verbose verbose = Verbose::WARN,
-        const bool debugMode = false);
-
-  ~ADIOS() = default;
-
-  void InitMPI(); ///< sets rank and size in m_rank and m_Size, respectively.
-
-  /**
-   * Look for template specialization
-   * @param name
-   * @param dimensions
-   * @param globalDimensions
-   * @param globalOffsets
-   * @return
-   */
-  template <class T>
-  inline Variable<T> &DefineVariable(const std::string name,
-                                     const Dims dimensions = Dims{1},
-                                     const Dims globalDimensions = Dims(),
-                                     const Dims globalOffsets = Dims())
-  {
-    throw std::invalid_argument("ERROR: type not supported for variable " +
-                                name + " in call to DefineVariable\n");
-  }
-
-  template <class T> inline Variable<T> &GetVariable(const std::string name)
-  {
-    throw std::invalid_argument("ERROR: type not supported for variable " +
-                                name + " in call to GetVariable\n");
-  }
-
-  template <class T>
-  VariableCompound &DefineVariableCompound(const std::string name,
-                                           const Dims dimensions = Dims{1},
-                                           const Dims globalDimensions = Dims(),
-                                           const Dims globalOffsets = Dims())
-  {
-    CheckVariableInput(name, dimensions);
-    const unsigned int size = m_Compound.size();
-    m_Compound.emplace(size, VariableCompound(name, sizeof(T), dimensions,
-                                              globalDimensions, globalOffsets,
-                                              m_DebugMode));
-    m_Variables.emplace(name, std::make_pair(GetType<T>(), size));
-    return m_Compound.at(size);
-  }
-
-  VariableCompound &GetVariableCompound(const std::string name);
-
-  /**
-   * Declares a new method. If the method is defined in the user config file,
-   * it will be already created during processing the config file,
-   * the method is set up with the user settings and this function just returns
-   * that method.
-   * Otherwise it will create and return a new Method with default settings.
-   * Use method.isUserDefined() to distinguish between the two cases.
-   * @param methodName must be unique
-   */
-  Method &DeclareMethod(const std::string methodName);
-
-  /**
-   * @brief Open to Write, Read. Creates a new engine from previously defined
-   * method
-   * @param streamName unique stream or file name
-   * @param accessMode "w" or "write", "r" or "read", "a" or "append", "u" or
-   * "update"
-   * @param mpiComm option to modify communicator from ADIOS class constructor
-   * @param method looks for corresponding Method object in ADIOS to initialize
-   * the engine
-   * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @param timeout_sec Wait some time before reporting on missing stream (i.e.
-   * wait for it for a while)
-    * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> Open(const std::string streamName,
-                               const std::string accessMode, MPI_Comm mpiComm,
-                               const Method &method);
-
-  /**
-   * @brief Open to Write, Read. Creates a new engine from previously defined
-   * method.
-   * Reuses MPI communicator from ADIOS constructor.
-   * @param streamName unique stream or file name
-   * @param accessMode "w" or "write", "r" or "read", "a" or "append", "u" or
-   * "update"
-   * @param method contains engine parameters
-   * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @param timeout_sec Wait some time before reporting on missing stream (i.e.
-   * wait for it for a while)
-    * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> Open(std::string streamName,
-                               const std::string accessMode,
-                               const Method &method);
-
-  /**
-   * Version required by the XML config file implementation, searches method
-   * inside ADIOS through a unique name
-   * @param streamName unique stream or file name
-   * @param accessMode "w" or "write", "r" or "read", "a" or "append"
-   * @param mpiComm mpi Communicator
-   * @param methodName used to search method object inside ADIOS object
-   * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @param timeout_sec Wait some time before reporting on missing stream (i.e.
-   * wait for it for a while)
-   * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> Open(const std::string streamName,
-                               const std::string accessMode, MPI_Comm mpiComm,
-                               const std::string methodName);
-
-  /**
-   * Version required by the XML config file implementation, searches method
-   * inside ADIOS through a unique name.
-   * Reuses ADIOS MPI Communicator from constructor.
-   * @param streamName unique stream or file name
-   * @param accessMode "w" or "write", "r" or "read", "a" or "append"
-   * @param methodName used to search method object inside ADIOS object
-   * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @param timeout_sec Wait some time before reporting on missing stream (i.e.
-   * wait for it for a while)
-   * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> Open(const std::string streamName,
-                               const std::string accessMode,
-                               const std::string methodName);
-
-  /**
-   * @brief Open to Read all steps from a file. No streaming, advancing is
-   * possible here. All steps in the file
-   * are immediately available for reading. Creates a new engine from previously
-   * defined method.
-   * @param fileName file name
-   * @param mpiComm option to modify communicator from ADIOS class constructor
-   * @param method looks for corresponding Method object in ADIOS to initialize
-   * the engine
-   * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> OpenFileReader(const std::string fileName,
-                                         MPI_Comm mpiComm,
-                                         const Method &method);
-
-  /**
-   * @brief Open to Read all steps from a file. No streaming, advancing is
-   * possible here. All steps in the file
-   * are immediately available for reading. Creates a new engine from previously
-   * defined method.
-   * Version required by the XML config file implementation, searches method
-   * inside ADIOS through a unique name.
-   * @param fileName file name
-   * @param mpiComm option to modify communicator from ADIOS class constructor
-   * @param methodName used to search method object inside ADIOS object
-    * @param iomode Independent or collective open/advance by writers/readers?
-   * Write() operations are always independent.
-   * @return Derived class of base Engine depending on Method parameters,
-   * shared_ptr for potential flexibility
-   */
-  std::shared_ptr<Engine> OpenFileReader(const std::string fileName,
-                                         MPI_Comm mpiComm,
-                                         const std::string methodName);
-
-  /**
-   * @brief Dumps groups information to a file stream or standard output.
-   * Note that either the user closes this fileStream or it's closed at the end.
-   * @param logStream either std::cout standard output, or a std::ofstream file
-   */
-  void MonitorVariables(std::ostream &logStream);
+    MPI_Comm m_MPIComm = MPI_COMM_SELF; ///< only used as reference to MPI
+                                        /// communicator passed from parallel
+    /// constructor, MPI_Comm is a pointer
+    /// itself. Public as called from C
+
+    int m_RankMPI = 0; ///< current MPI rank process
+    int m_SizeMPI = 1; ///< current MPI processes size
+
+    std::string m_HostLanguage = "C++";
+
+    /**
+     * @brief ADIOS empty constructor. Used for non XML config file API calls.
+     */
+    ADIOS(const Verbose verbose = Verbose::WARN, const bool debugMode = false);
+    /**
+     * @brief Serial constructor for config file, only allowed and compiled in
+     * libadios_nompi.a
+     * @param configFile XML config file name
+     * @param debugMode true: on throws exceptions and do additional checks,
+     * false: off (faster, but unsafe)
+     */
+    ADIOS(const std::string configFile, const Verbose verbose = Verbose::WARN,
+          const bool debugMode = false);
+
+    /**
+     * @brief Parallel constructor for XML config file and MPI
+     * @param config XML config file
+     * @param mpiComm MPI communicator ...const to be discussed
+     * @param debugMode true: on, false: off (faster, but unsafe)
+     */
+
+    ADIOS(const std::string configFile, MPI_Comm mpiComm,
+          const Verbose verbose = Verbose::WARN, const bool debugMode = false);
+
+    /**
+     * @brief Parallel MPI communicator without XML config file
+     * @param mpiComm MPI communicator passed to m_MPIComm*
+     * @param debugMode true: on, false: off (faster)
+     */
+    ADIOS(MPI_Comm mpiComm, const Verbose verbose = Verbose::WARN,
+          const bool debugMode = false);
+
+    ~ADIOS() = default;
+
+    void InitMPI(); ///< sets rank and size in m_rank and m_Size, respectively.
+
+    /**
+     * Look for template specialization
+     * @param name
+     * @param dimensions
+     * @param globalDimensions
+     * @param globalOffsets
+     * @return
+     */
+    template <class T>
+    inline Variable<T> &DefineVariable(const std::string &name,
+                                       const Dims &dimensions = Dims{1},
+                                       const Dims &globalDimensions = Dims(),
+                                       const Dims &globalOffsets = Dims())
+    {
+        throw std::invalid_argument("ERROR: type not supported for variable " +
+                                    name + " in call to DefineVariable\n");
+    }
+
+    template <class T>
+    inline Variable<T> &GetVariable(const std::string &name)
+    {
+        throw std::invalid_argument("ERROR: type not supported for variable " +
+                                    name + " in call to GetVariable\n");
+    }
+
+    template <class T>
+    VariableCompound &
+    DefineVariableCompound(const std::string &name,
+                           const Dims &dimensions = Dims{1},
+                           const Dims &globalDimensions = Dims(),
+                           const Dims &globalOffsets = Dims())
+    {
+        CheckVariableInput(name, dimensions);
+        const unsigned int size = m_Compound.size();
+        m_Compound.emplace(size, VariableCompound(name, sizeof(T), dimensions,
+                                                  globalDimensions,
+                                                  globalOffsets, m_DebugMode));
+        m_Variables.emplace(name, std::make_pair(GetType<T>(), size));
+        return m_Compound.at(size);
+    }
+
+    VariableCompound &GetVariableCompound(const std::string &name);
+
+    /**
+     * Declares a new method. If the method is defined in the user config file,
+     * it will be already created during processing the config file,
+     * the method is set up with the user settings and this function just
+     * returns
+     * that method.
+     * Otherwise it will create and return a new Method with default settings.
+     * Use method.isUserDefined() to distinguish between the two cases.
+     * @param methodName must be unique
+     */
+    Method &DeclareMethod(const std::string methodName);
+
+    /**
+     * @brief Open to Write, Read. Creates a new engine from previously defined
+     * method
+     * @param streamName unique stream or file name
+     * @param accessMode "w" or "write", "r" or "read", "a" or "append", "u" or
+     * "update"
+     * @param mpiComm option to modify communicator from ADIOS class constructor
+     * @param method looks for corresponding Method object in ADIOS to
+     * initialize
+     * the engine
+     * @return Derived class of base Engine depending on Method parameters,
+     * shared_ptr for potential flexibility
+     */
+    std::shared_ptr<Engine> Open(const std::string &streamName,
+                                 const std::string accessMode, MPI_Comm mpiComm,
+                                 const Method &method);
+
+    /**
+     * @brief Open to Write, Read. Creates a new engine from previously defined
+     * method.
+     * Reuses MPI communicator from ADIOS constructor.
+     * @param streamName unique stream or file name
+     * @param accessMode "w" or "write", "r" or "read", "a" or "append", "u" or
+     * "update"
+     * @param method contains engine parameters
+     */
+    std::shared_ptr<Engine> Open(const std::string &streamName,
+                                 const std::string accessMode,
+                                 const Method &method);
+
+    /**
+     * Version required by the XML config file implementation, searches method
+     * inside ADIOS through a unique name
+     * @param streamName unique stream or file name
+     * @param accessMode "w" or "write", "r" or "read", "a" or "append"
+     * @param mpiComm mpi Communicator
+     * @param methodName used to search method object inside ADIOS object
+     * @return Derived class of base Engine depending on Method parameters,
+     * shared_ptr for potential flexibility
+     */
+    std::shared_ptr<Engine> Open(const std::string &streamName,
+                                 const std::string accessMode, MPI_Comm mpiComm,
+                                 const std::string methodName);
+    /**
+     * Version required by the XML config file implementation, searches method
+     * inside ADIOS through a unique name.
+     * Reuses ADIOS MPI Communicator from constructor.
+     * @param streamName unique stream or file name
+     * @param accessMode "w" or "write", "r" or "read", "a" or "append"
+     * @param methodName used to search method object inside ADIOS object
+     * @return Derived class of base Engine depending on Method parameters,
+     * shared_ptr for potential flexibility
+     */
+    std::shared_ptr<Engine> Open(const std::string &streamName,
+                                 const std::string accessMode,
+                                 const std::string methodName);
+
+    /**
+     * @brief Open to Read all steps from a file. No streaming, advancing is
+     * possible here. All steps in the file
+     * are immediately available for reading. Creates a new engine from
+     * previously
+     * defined method.
+     * @param fileName file name
+     * @param mpiComm option to modify communicator from ADIOS class constructor
+     * @param method looks for corresponding Method object in ADIOS to
+     * initialize the engine
+     * @return Derived class of base Engine depending on Method parameters,
+     * shared_ptr for potential flexibility
+     */
+    std::shared_ptr<Engine> OpenFileReader(const std::string &fileName,
+                                           MPI_Comm mpiComm,
+                                           const Method &method);
+
+    /**
+     * @brief Open to Read all steps from a file. No streaming, advancing is
+     * possible here. All steps in the file
+     * are immediately available for reading. Creates a new engine from
+     * previously defined method.
+     * Version required by the XML config file implementation, searches method
+     * inside ADIOS through a unique name.
+     * @param fileName file name
+     * @param mpiComm option to modify communicator from ADIOS class constructor
+     * @param methodName used to search method object inside ADIOS object
+     * @return Derived class of base Engine depending on Method parameters,
+     * shared_ptr for potential flexibility
+     */
+    std::shared_ptr<Engine> OpenFileReader(const std::string &fileName,
+                                           MPI_Comm mpiComm,
+                                           const std::string methodName);
+    /**
+     * @brief Dumps groups information to a file stream or standard output.
+     * Note that either the user closes this fileStream or it's closed at the
+     * end.
+     * @param logStream either std::cout standard output, or a std::ofstream
+     * file
+     */
+    void MonitorVariables(std::ostream &logStream);
 
 protected: // no const to allow default empty and copy constructors
-  std::map<unsigned int, Variable<char>> m_Char;
-  std::map<unsigned int, Variable<unsigned char>> m_UChar;
-  std::map<unsigned int, Variable<short>> m_Short;
-  std::map<unsigned int, Variable<unsigned short>> m_UShort;
-  std::map<unsigned int, Variable<int>> m_Int;
-  std::map<unsigned int, Variable<unsigned int>> m_UInt;
-  std::map<unsigned int, Variable<long int>> m_LInt;
-  std::map<unsigned int, Variable<unsigned long int>> m_ULInt;
-  std::map<unsigned int, Variable<long long int>> m_LLInt;
-  std::map<unsigned int, Variable<unsigned long long int>> m_ULLInt;
-  std::map<unsigned int, Variable<float>> m_Float;
-  std::map<unsigned int, Variable<double>> m_Double;
-  std::map<unsigned int, Variable<long double>> m_LDouble;
-  std::map<unsigned int, Variable<std::complex<float>>> m_CFloat;
-  std::map<unsigned int, Variable<std::complex<double>>> m_CDouble;
-  std::map<unsigned int, Variable<std::complex<long double>>> m_CLDouble;
-  std::map<unsigned int, VariableCompound> m_Compound;
-
-  std::string m_ConfigFile; ///< XML File to be read containing configuration
-                            /// information
-  bool m_DebugMode = false; ///< if true will do more checks, exceptions,
-                            /// warnings, expect slower code
-
-  // Variables
-  std::map<std::string, std::pair<std::string, unsigned int>>
-      m_Variables; ///< Makes variable name unique, key: variable name, value:
-                   /// pair.first = type, pair.second = index in corresponding
-  /// vector of Variable
-
-  std::vector<std::shared_ptr<Transform>>
-      m_Transforms; ///< transforms associated with ADIOS run
-
-  /**
-   * @brief List of Methods (engine metadata) defined from either ADIOS XML
-   * configuration file or the DeclareMethod function.
-   * <pre>
-   *     Key: std::string unique method name
-   *     Value: Method class
-   * </pre>
-   */
-  std::map<std::string, Method> m_Methods;
-  std::set<std::string>
-      m_EngineNames; ///< set used to check Engine name uniqueness in debug mode
-
-  /**
-   * @brief Checks for group existence in m_Groups, if failed throws
-   * std::invalid_argument exception
-   * @param itGroup m_Groups iterator, usually from find function
-   * @param groupName unique name, passed for thrown exception only
-   * @param hint adds information to thrown exception
-   */
-  void CheckVariableInput(const std::string name, const Dims &dimensions) const;
-
-  /**
-   * Checks for variable name, if not found throws an invalid exception
-   * @param itVariable iterator pointing to the variable name in m_Variables
-   * @param name variable name
-   * @param hint message to be thrown for debugging purporses
-   */
-  void CheckVariableName(
-      std::map<std::string,
-               std::pair<std::string, unsigned int>>::const_iterator itVariable,
-      const std::string name, const std::string hint) const;
-
-  /**
-   * @brief Checks for method existence in m_Methods, if failed throws
-   * std::invalid_argument exception
-   * @param itMethod m_Methods iterator, usually from find function
-   * @param methodName unique name, passed for thrown exception only
-   * @param hint adds information to thrown exception
-   */
-  void CheckMethod(std::map<std::string, Method>::const_iterator itMethod,
-                   const std::string methodName, const std::string hint) const;
-
-  template <class T> unsigned int GetVariableIndex(const std::string name)
-  {
-    auto itVariable = m_Variables.find(name);
-    CheckVariableName(
-        itVariable, name,
-        "in call to GetVariable<" + GetType<T>() +
-            ">, or call to GetVariableCompound if <T> = <compound>\n");
-    return itVariable->second.second;
-  }
+    std::map<unsigned int, Variable<char>> m_Char;
+    std::map<unsigned int, Variable<unsigned char>> m_UChar;
+    std::map<unsigned int, Variable<short>> m_Short;
+    std::map<unsigned int, Variable<unsigned short>> m_UShort;
+    std::map<unsigned int, Variable<int>> m_Int;
+    std::map<unsigned int, Variable<unsigned int>> m_UInt;
+    std::map<unsigned int, Variable<long int>> m_LInt;
+    std::map<unsigned int, Variable<unsigned long int>> m_ULInt;
+    std::map<unsigned int, Variable<long long int>> m_LLInt;
+    std::map<unsigned int, Variable<unsigned long long int>> m_ULLInt;
+    std::map<unsigned int, Variable<float>> m_Float;
+    std::map<unsigned int, Variable<double>> m_Double;
+    std::map<unsigned int, Variable<long double>> m_LDouble;
+    std::map<unsigned int, Variable<std::complex<float>>> m_CFloat;
+    std::map<unsigned int, Variable<std::complex<double>>> m_CDouble;
+    std::map<unsigned int, Variable<std::complex<long double>>> m_CLDouble;
+    std::map<unsigned int, VariableCompound> m_Compound;
+
+    std::string m_ConfigFile; ///< XML File to be read containing configuration
+                              /// information
+    bool m_DebugMode = false; ///< if true will do more checks, exceptions,
+                              /// warnings, expect slower code
+
+    // Variables
+    std::map<std::string, std::pair<std::string, unsigned int>>
+        m_Variables; ///< Makes variable name unique, key: variable name,
+                     /// value:
+    /// pair.first = type, pair.second = index in corresponding
+    /// vector of Variable
+
+    std::vector<std::shared_ptr<Transform>>
+        m_Transforms; ///< transforms associated with ADIOS run
+
+    /**
+     * @brief List of Methods (engine metadata) defined from either ADIOS XML
+     * configuration file or the DeclareMethod function.
+     * <pre>
+     *     Key: std::string unique method name
+     *     Value: Method class
+     * </pre>
+     */
+    std::map<std::string, Method> m_Methods;
+    std::set<std::string> m_EngineNames; ///< set used to check Engine name
+                                         /// uniqueness in debug mode
+
+    /**
+     * @brief Checks for group existence in m_Groups, if failed throws
+     * std::invalid_argument exception
+     * @param itGroup m_Groups iterator, usually from find function
+     * @param groupName unique name, passed for thrown exception only
+     * @param hint adds information to thrown exception
+     */
+    void CheckVariableInput(const std::string &name,
+                            const Dims &dimensions) const;
+
+    /**
+     * Checks for variable name, if not found throws an invalid exception
+     * @param itVariable iterator pointing to the variable name in m_Variables
+     * @param name variable name
+     * @param hint message to be thrown for debugging purporses
+     */
+    void CheckVariableName(
+        std::map<std::string,
+                 std::pair<std::string, unsigned int>>::const_iterator
+            itVariable,
+        const std::string &name, const std::string hint) const;
+
+    /**
+     * @brief Checks for method existence in m_Methods, if failed throws
+     * std::invalid_argument exception
+     * @param itMethod m_Methods iterator, usually from find function
+     * @param methodName unique name, passed for thrown exception only
+     * @param hint adds information to thrown exception
+     */
+    void CheckMethod(std::map<std::string, Method>::const_iterator itMethod,
+                     const std::string methodName,
+                     const std::string hint) const;
+
+    template <class T>
+    unsigned int GetVariableIndex(const std::string &name)
+    {
+        auto itVariable = m_Variables.find(name);
+        CheckVariableName(itVariable, name,
+                          "in call to GetVariable<" + GetType<T>() +
+                              ">, or call to GetVariableCompound if <T> = "
+                              "<compound>\n");
+        return itVariable->second.second;
+    }
 };
 
 // template specializations of DefineVariable:
 template <>
 inline Variable<char> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_Char.size();
-  m_Char.emplace(size, Variable<char>(name, dimensions, globalDimensions,
-                                      globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<char>(), size));
-  return m_Char.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_Char.size();
+    m_Char.emplace(size, Variable<char>(name, dimensions, globalDimensions,
+                                        globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<char>(), size));
+    return m_Char.at(size);
 }
 
 template <>
 inline Variable<unsigned char> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_UChar.size();
-  m_UChar.emplace(size,
-                  Variable<unsigned char>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<unsigned char>(), size));
-  return m_UChar.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_UChar.size();
+    m_UChar.emplace(size,
+                    Variable<unsigned char>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<unsigned char>(), size));
+    return m_UChar.at(size);
 }
 
 template <>
 inline Variable<short> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_Short.size();
-  m_Short.emplace(size, Variable<short>(name, dimensions, globalDimensions,
-                                        globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<unsigned char>(), size));
-  return m_Short.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_Short.size();
+    m_Short.emplace(size, Variable<short>(name, dimensions, globalDimensions,
+                                          globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<unsigned char>(), size));
+    return m_Short.at(size);
 }
 
 template <>
 inline Variable<unsigned short> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_UShort.size();
-  m_UShort.emplace(size,
-                   Variable<unsigned short>(name, dimensions, globalDimensions,
-                                            globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<unsigned short>(), size));
-  return m_UShort.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_UShort.size();
+    m_UShort.emplace(
+        size, Variable<unsigned short>(name, dimensions, globalDimensions,
+                                       globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<unsigned short>(), size));
+    return m_UShort.at(size);
 }
 
 template <>
 inline Variable<int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_Int.size();
-  m_Int.emplace(size, Variable<int>(name, dimensions, globalDimensions,
-                                    globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<int>(), size));
-  return m_Int.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_Int.size();
+    m_Int.emplace(size, Variable<int>(name, dimensions, globalDimensions,
+                                      globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<int>(), size));
+    return m_Int.at(size);
 }
 
 template <>
 inline Variable<unsigned int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_UInt.size();
-  m_UInt.emplace(size,
-                 Variable<unsigned int>(name, dimensions, globalDimensions,
-                                        globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<unsigned int>(), size));
-  return m_UInt.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_UInt.size();
+    m_UInt.emplace(size,
+                   Variable<unsigned int>(name, dimensions, globalDimensions,
+                                          globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<unsigned int>(), size));
+    return m_UInt.at(size);
 }
 
 template <>
 inline Variable<long int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_LInt.size();
-  m_LInt.emplace(size, Variable<long int>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<long int>(), size));
-  return m_LInt.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_LInt.size();
+    m_LInt.emplace(size, Variable<long int>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<long int>(), size));
+    return m_LInt.at(size);
 }
 
 template <>
 inline Variable<unsigned long int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_LInt.size();
-  m_ULInt.emplace(
-      size, Variable<unsigned long int>(name, dimensions, globalDimensions,
-                                        globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<unsigned long int>(), size));
-  return m_ULInt.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_LInt.size();
+    m_ULInt.emplace(
+        size, Variable<unsigned long int>(name, dimensions, globalDimensions,
+                                          globalOffsets, m_DebugMode));
+    m_Variables.emplace(name,
+                        std::make_pair(GetType<unsigned long int>(), size));
+    return m_ULInt.at(size);
 }
 
 template <>
 inline Variable<long long int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_LLInt.size();
-  m_LLInt.emplace(size,
-                  Variable<long long int>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<long long int>(), size));
-  return m_LLInt.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_LLInt.size();
+    m_LLInt.emplace(size,
+                    Variable<long long int>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<long long int>(), size));
+    return m_LLInt.at(size);
 }
 
 template <>
 inline Variable<unsigned long long int> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_ULLInt.size();
-  m_ULLInt.emplace(
-      size, Variable<unsigned long long int>(name, dimensions, globalDimensions,
-                                             globalOffsets, m_DebugMode));
-  m_Variables.emplace(name,
-                      std::make_pair(GetType<unsigned long long int>(), size));
-  return m_ULLInt.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_ULLInt.size();
+    m_ULLInt.emplace(size, Variable<unsigned long long int>(
+                               name, dimensions, globalDimensions,
+                               globalOffsets, m_DebugMode));
+    m_Variables.emplace(
+        name, std::make_pair(GetType<unsigned long long int>(), size));
+    return m_ULLInt.at(size);
 }
 
 template <>
 inline Variable<float> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_Float.size();
-  m_Float.emplace(size, Variable<float>(name, dimensions, globalDimensions,
-                                        globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<float>(), size));
-  return m_Float.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_Float.size();
+    m_Float.emplace(size, Variable<float>(name, dimensions, globalDimensions,
+                                          globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<float>(), size));
+    return m_Float.at(size);
 }
 
 template <>
 inline Variable<double> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_Double.size();
-  m_Double.emplace(size, Variable<double>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<double>(), size));
-  return m_Double.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_Double.size();
+    m_Double.emplace(size, Variable<double>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<double>(), size));
+    return m_Double.at(size);
 }
 
 template <>
 inline Variable<long double> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_LDouble.size();
-  m_LDouble.emplace(size,
-                    Variable<long double>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
-  m_Variables.emplace(name, std::make_pair(GetType<long double>(), size));
-  return m_LDouble.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_LDouble.size();
+    m_LDouble.emplace(size,
+                      Variable<long double>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name, std::make_pair(GetType<long double>(), size));
+    return m_LDouble.at(size);
 }
 
 template <>
 inline Variable<std::complex<float>> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_CFloat.size();
-  m_CFloat.emplace(
-      size, Variable<std::complex<float>>(name, dimensions, globalDimensions,
-                                          globalOffsets, m_DebugMode));
 
-  m_Variables.emplace(name,
-                      std::make_pair(GetType<std::complex<float>>(), size));
-  return m_CFloat.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_CFloat.size();
+    m_CFloat.emplace(
+        size, Variable<std::complex<float>>(name, dimensions, globalDimensions,
+                                            globalOffsets, m_DebugMode));
+    m_Variables.emplace(name,
+                        std::make_pair(GetType<std::complex<float>>(), size));
+    return m_CFloat.at(size);
 }
 
 template <>
 inline Variable<std::complex<double>> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_CDouble.size();
-  m_CDouble.emplace(
-      size, Variable<std::complex<double>>(name, dimensions, globalDimensions,
-                                           globalOffsets, m_DebugMode));
-  m_Variables.emplace(name,
-                      std::make_pair(GetType<std::complex<double>>(), size));
-  return m_CDouble.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_CDouble.size();
+    m_CDouble.emplace(
+        size, Variable<std::complex<double>>(name, dimensions, globalDimensions,
+                                             globalOffsets, m_DebugMode));
+    m_Variables.emplace(name,
+                        std::make_pair(GetType<std::complex<double>>(), size));
+    return m_CDouble.at(size);
 }
 
 template <>
 inline Variable<std::complex<long double>> &
-ADIOS::DefineVariable(const std::string name, const Dims dimensions,
-                      const Dims globalDimensions, const Dims globalOffsets)
+ADIOS::DefineVariable(const std::string &name, const Dims &dimensions,
+                      const Dims &globalDimensions, const Dims &globalOffsets)
 {
-  CheckVariableInput(name, dimensions);
-  const unsigned int size = m_CLDouble.size();
-  m_CLDouble.emplace(size, Variable<std::complex<long double>>(
-                               name, dimensions, globalDimensions,
-                               globalOffsets, m_DebugMode));
-  m_Variables.emplace(
-      name, std::make_pair(GetType<std::complex<long double>>(), size));
-  return m_CLDouble.at(size);
+    CheckVariableInput(name, dimensions);
+    const unsigned int size = m_CLDouble.size();
+    m_CLDouble.emplace(size, Variable<std::complex<long double>>(
+                                 name, dimensions, globalDimensions,
+                                 globalOffsets, m_DebugMode));
+    m_Variables.emplace(
+        name, std::make_pair(GetType<std::complex<long double>>(), size));
+    return m_CLDouble.at(size);
 }
 
 // Get template specialization
-template <> inline Variable<char> &ADIOS::GetVariable(const std::string name)
+template <>
+inline Variable<char> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_Char.at(GetVariableIndex<char>(name));
+    return m_Char.at(GetVariableIndex<char>(name));
 }
 
 template <>
-inline Variable<unsigned char> &ADIOS::GetVariable(const std::string name)
+inline Variable<unsigned char> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_UChar.at(GetVariableIndex<unsigned char>(name));
+    return m_UChar.at(GetVariableIndex<unsigned char>(name));
 }
 
-template <> inline Variable<short> &ADIOS::GetVariable(const std::string name)
+template <>
+inline Variable<short> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_Short.at(GetVariableIndex<short>(name));
+    return m_Short.at(GetVariableIndex<short>(name));
 }
 
 template <>
-inline Variable<unsigned short> &ADIOS::GetVariable(const std::string name)
+inline Variable<unsigned short> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_UShort.at(GetVariableIndex<unsigned short>(name));
+    return m_UShort.at(GetVariableIndex<unsigned short>(name));
 }
 
-template <> inline Variable<int> &ADIOS::GetVariable(const std::string name)
+template <>
+inline Variable<int> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_Int.at(GetVariableIndex<int>(name));
+    return m_Int.at(GetVariableIndex<int>(name));
 }
 
 template <>
-inline Variable<unsigned int> &ADIOS::GetVariable(const std::string name)
+inline Variable<unsigned int> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_UInt.at(GetVariableIndex<unsigned int>(name));
+    return m_UInt.at(GetVariableIndex<unsigned int>(name));
 }
 
 template <>
-inline Variable<long int> &ADIOS::GetVariable(const std::string name)
+inline Variable<long int> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_LInt.at(GetVariableIndex<unsigned int>(name));
+    return m_LInt.at(GetVariableIndex<unsigned int>(name));
 }
 
 template <>
-inline Variable<unsigned long int> &ADIOS::GetVariable(const std::string name)
+inline Variable<unsigned long int> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_ULInt.at(GetVariableIndex<unsigned long int>(name));
+    return m_ULInt.at(GetVariableIndex<unsigned long int>(name));
 }
 
 template <>
-inline Variable<long long int> &ADIOS::GetVariable(const std::string name)
+inline Variable<long long int> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_LLInt.at(GetVariableIndex<long long int>(name));
+    return m_LLInt.at(GetVariableIndex<long long int>(name));
 }
 
 template <>
 inline Variable<unsigned long long int> &
-ADIOS::GetVariable(const std::string name)
+ADIOS::GetVariable(const std::string &name)
 {
-  return m_ULLInt.at(GetVariableIndex<unsigned long long int>(name));
+    return m_ULLInt.at(GetVariableIndex<unsigned long long int>(name));
 }
 
-template <> inline Variable<float> &ADIOS::GetVariable(const std::string name)
+template <>
+inline Variable<float> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_Float.at(GetVariableIndex<float>(name));
+    return m_Float.at(GetVariableIndex<float>(name));
 }
 
-template <> inline Variable<double> &ADIOS::GetVariable(const std::string name)
+template <>
+inline Variable<double> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_Double.at(GetVariableIndex<double>(name));
+    return m_Double.at(GetVariableIndex<double>(name));
 }
 
 template <>
-inline Variable<long double> &ADIOS::GetVariable(const std::string name)
+inline Variable<long double> &ADIOS::GetVariable(const std::string &name)
 {
-  return m_LDouble.at(GetVariableIndex<long double>(name));
+    return m_LDouble.at(GetVariableIndex<long double>(name));
 }
 
 template <>
-inline Variable<std::complex<float>> &ADIOS::GetVariable(const std::string name)
+inline Variable<std::complex<float>> &
+ADIOS::GetVariable(const std::string &name)
 {
-  return m_CFloat.at(GetVariableIndex<std::complex<float>>(name));
+    return m_CFloat.at(GetVariableIndex<std::complex<float>>(name));
 }
 
 template <>
 inline Variable<std::complex<double>> &
-ADIOS::GetVariable(const std::string name)
+ADIOS::GetVariable(const std::string &name)
 {
-  return m_CDouble.at(GetVariableIndex<std::complex<double>>(name));
+    return m_CDouble.at(GetVariableIndex<std::complex<double>>(name));
 }
 
 template <>
 inline Variable<std::complex<long double>> &
-ADIOS::GetVariable(const std::string name)
+ADIOS::GetVariable(const std::string &name)
 {
-  return m_CLDouble.at(GetVariableIndex<std::complex<long double>>(name));
+    return m_CLDouble.at(GetVariableIndex<std::complex<long double>>(name));
 }
 
 } // end namespace
diff --git a/include/ADIOSTypes.h b/include/ADIOSTypes.h
index 3949bbc36f98f935a5069b38ea95c567a99d00f5..a3e286d943cff87ecacae3dea7cfb58c636be47f 100644
--- a/include/ADIOSTypes.h
+++ b/include/ADIOSTypes.h
@@ -18,23 +18,23 @@ namespace adios
  */
 enum
 {
-  VARYING_DIMENSION = -1, //!< VARYING_DIMENSION
-  LOCAL_VALUE = 0,        //!< LOCAL_VALUE
-  GLOBAL_VALUE = 1        //!< GLOBAL_VALUE
+    VARYING_DIMENSION = -1, //!< VARYING_DIMENSION
+    LOCAL_VALUE = 0,        //!< LOCAL_VALUE
+    GLOBAL_VALUE = 1        //!< GLOBAL_VALUE
 };
 
 enum class Verbose
 {
-  ERROR = 0,
-  WARN = 1,
-  INFO = 2,
-  DEBUG = 3
+    ERROR = 0,
+    WARN = 1,
+    INFO = 2,
+    DEBUG = 3
 };
 
 enum class IOMode
 {
-  INDEPENDENT = 0,
-  COLLECTIVE = 1
+    INDEPENDENT = 0,
+    COLLECTIVE = 1
 };
 
 } // end namespace
diff --git a/include/capsule/heap/STLVector.h b/include/capsule/heap/STLVector.h
index 7e83a09d9a5ee4b7ff9177895746fca683f97719..18c7f348d2dd84a2688313b7c4e70138c75b4ec7 100644
--- a/include/capsule/heap/STLVector.h
+++ b/include/capsule/heap/STLVector.h
@@ -29,30 +29,31 @@ class STLVector : public Capsule
 {
 
 public:
-  std::vector<char> m_Data;     ///< data buffer allocated using the STL in heap
-                                /// memory, default size = 16 Mb
-  std::vector<char> m_Metadata; ///< metadata buffer allocated using the STL in
-                                /// heap memory, default size = 100 Kb
-
-  /**
-   * Unique constructor
-   * @param accessMode read, write or append
-   * @param rankMPI MPI rank
-   * @param debugMode true: extra checks, slower
-   */
-  STLVector(const std::string accessMode, const int rankMPI,
-            const bool debugMode = false);
-
-  ~STLVector() = default;
-
-  char *GetData();
-  char *GetMetadata();
-
-  std::size_t GetDataSize() const;
-  std::size_t GetMetadataSize() const;
-
-  void ResizeData(const std::size_t size);
-  void ResizeMetadata(const std::size_t size);
+    std::vector<char> m_Data; ///< data buffer allocated using the STL in heap
+                              /// memory, default size = 16 Mb
+    std::vector<char>
+        m_Metadata; ///< metadata buffer allocated using the STL in
+                    /// heap memory, default size = 100 Kb
+
+    /**
+     * Unique constructor
+     * @param accessMode read, write or append
+     * @param rankMPI MPI rank
+     * @param debugMode true: extra checks, slower
+     */
+    STLVector(const std::string accessMode, const int rankMPI,
+              const bool debugMode = false);
+
+    ~STLVector() = default;
+
+    char *GetData();
+    char *GetMetadata();
+
+    std::size_t GetDataSize() const;
+    std::size_t GetMetadataSize() const;
+
+    void ResizeData(const std::size_t size);
+    void ResizeMetadata(const std::size_t size);
 };
 
 } // end namespace capsule
diff --git a/include/capsule/shmem/ShmSystemV.h b/include/capsule/shmem/ShmSystemV.h
index 4c7c5cab4ed15eb9420f0274e6a46daa4f452a2d..2e3a14c5b804736b5c2f8d4d5890bc49efde2eba 100644
--- a/include/capsule/shmem/ShmSystemV.h
+++ b/include/capsule/shmem/ShmSystemV.h
@@ -18,42 +18,44 @@ class ShmSystemV : public Capsule
 {
 
 public:
-  /**
-   * Create a Capsule in shared memory using System V shm API
-   * @param accessMode
-   * @param pathName used to create the key as a unique identifier
-   * @param dataSize size of allocated memory segment for data
-   * @param metadataSize size of allocated memory segment for metadata
-   * @param debugMode true: extra checks, slower
-   */
-  ShmSystemV(std::string accessMode, int rankMPI, const std::string &pathName,
-             size_t dataSize, size_t metadataSize, bool debugMode = false);
+    /**
+     * Create a Capsule in shared memory using System V shm API
+     * @param accessMode
+     * @param pathName used to create the key as a unique identifier
+     * @param dataSize size of allocated memory segment for data
+     * @param metadataSize size of allocated memory segment for metadata
+     * @param debugMode true: extra checks, slower
+     */
+    ShmSystemV(std::string accessMode, int rankMPI, const std::string &pathName,
+               size_t dataSize, size_t metadataSize, bool debugMode = false);
 
-  ~ShmSystemV() = default;
+    ~ShmSystemV() = default;
 
-  char *GetData();     ///< return the pointer to the raw data buffer
-  char *GetMetadata(); ///< return the pointer to the raw metadata buffer
+    char *GetData();     ///< return the pointer to the raw data buffer
+    char *GetMetadata(); ///< return the pointer to the raw metadata buffer
 
-  size_t GetDataSize() const;     ///< get current data buffer size
-  size_t GetMetadataSize() const; ///< get current metadata buffer size
+    size_t GetDataSize() const;     ///< get current data buffer size
+    size_t GetMetadataSize() const; ///< get current metadata buffer size
 
 private:
-  char *m_Data =
-      nullptr; ///< reference to a shared memory data buffer created with shmget
-  const size_t m_DataSize; ///< size of the allocated shared memory segment
-  key_t m_DataKey; ///< key associated with the data buffer, created with ftok
-  int m_DataShmID; ///< data shared memory buffer id
-
-  char *m_Metadata = nullptr;  ///< reference to a shared memory metadata buffer
-                               /// created with shmget
-  const size_t m_MetadataSize; ///< size of the allocated shared memory segment
-  key_t m_MetadataKey; ///< key associated with the metadata buffer, created
-                       /// with ftok
-  int m_MetadataShmID; ///< metadata shared memory buffer id
-
-  void CheckShm() const; ///< checks if all shared memory allocations are
-                         /// correct, throws std::bad_alloc, called from
-  /// constructor if debug mode is true
+    char *m_Data = nullptr;  ///< reference to a shared memory data buffer
+                             /// created with shmget
+    const size_t m_DataSize; ///< size of the allocated shared memory segment
+    key_t m_DataKey; ///< key associated with the data buffer, created with ftok
+    int m_DataShmID; ///< data shared memory buffer id
+
+    char *m_Metadata =
+        nullptr; ///< reference to a shared memory metadata buffer
+                 /// created with shmget
+    const size_t
+        m_MetadataSize;  ///< size of the allocated shared memory segment
+    key_t m_MetadataKey; ///< key associated with the metadata buffer, created
+                         /// with ftok
+    int m_MetadataShmID; ///< metadata shared memory buffer id
+
+    void CheckShm() const; ///< checks if all shared memory allocations are
+                           /// correct, throws std::bad_alloc, called from
+                           /// constructor if debug mode is true
 };
 
 } // end namespace adios
diff --git a/include/core/Attribute.h b/include/core/Attribute.h
index dae2644b77d155d16c52c64aff5cf90f6c301f7f..d1384d228ff5019a9ad6fcadf7ee76ff736e3595 100644
--- a/include/core/Attribute.h
+++ b/include/core/Attribute.h
@@ -23,8 +23,8 @@ namespace adios
  */
 struct Attribute
 {
-  const char TypeID;       ///< '0': string, '1': numeric
-  const std::string Value; ///< information about the attribute
+    const char TypeID;       ///< '0': string, '1': numeric
+    const std::string Value; ///< information about the attribute
 };
 
 } // end namespace
diff --git a/include/core/Capsule.h b/include/core/Capsule.h
index 715cdc1cbc9279b6188d77d074d46d9614de49d3..609aab8471b21ca8178d91f0e6c64127f9f024d3 100644
--- a/include/core/Capsule.h
+++ b/include/core/Capsule.h
@@ -27,40 +27,40 @@ class Capsule
 {
 
 public:
-  const std::string m_Type;       ///< buffer type
-  const std::string m_AccessMode; ///< 'w': write, 'r': read, 'a': append
+    const std::string m_Type;       ///< buffer type
+    const std::string m_AccessMode; ///< 'w': write, 'r': read, 'a': append
 
-  std::size_t m_DataPosition = 0; ///< position in current data buffer (not
-                                  /// included data flushed to transports)
-  std::size_t m_DataAbsolutePosition = 0; ///< include bytes flushed
+    std::size_t m_DataPosition = 0; ///< position in current data buffer (not
+                                    /// included data flushed to transports)
+    std::size_t m_DataAbsolutePosition = 0; ///< include bytes flushed
 
-  std::size_t m_MetadataPosition = 0; ///< position in metadata buffer
+    std::size_t m_MetadataPosition = 0; ///< position in metadata buffer
 
-  /**
-   * Base class constructor providing type from derived class and accessMode
-   * @param type derived class type
-   * @param accessMode 'w':write, 'r':read, 'a':append
-   * @param rankMPI current MPI rank
-   * @param debugMode
-   */
-  Capsule(const std::string type, const std::string accessMode,
-          const int rankMPI, const bool debugMode);
+    /**
+     * Base class constructor providing type from derived class and accessMode
+     * @param type derived class type
+     * @param accessMode 'w':write, 'r':read, 'a':append
+     * @param rankMPI current MPI rank
+     * @param debugMode
+     */
+    Capsule(const std::string type, const std::string accessMode,
+            const int rankMPI, const bool debugMode);
 
-  virtual ~Capsule() = default;
+    virtual ~Capsule() = default;
 
-  virtual char *GetData() = 0; ///< return the pointer to the raw data buffer
-  virtual char *
-  GetMetadata() = 0; ///< return the pointer to the raw metadata buffer
+    virtual char *GetData() = 0; ///< return the pointer to the raw data buffer
+    virtual char *
+    GetMetadata() = 0; ///< return the pointer to the raw metadata buffer
 
-  virtual std::size_t GetDataSize() const = 0;     ///< data buffer size
-  virtual std::size_t GetMetadataSize() const = 0; ///< metadata buffer size
+    virtual std::size_t GetDataSize() const = 0;     ///< data buffer size
+    virtual std::size_t GetMetadataSize() const = 0; ///< metadata buffer size
 
-  virtual void ResizeData(std::size_t size);     ///< resize data buffer
-  virtual void ResizeMetadata(std::size_t size); ///< resize metadata buffer
+    virtual void ResizeData(std::size_t size);     ///< resize data buffer
+    virtual void ResizeMetadata(std::size_t size); ///< resize metadata buffer
 
 protected:
-  const int m_RankMPI = 0;        ///< current MPI rank
-  const bool m_DebugMode = false; ///< true: extra checks
+    const int m_RankMPI = 0;        ///< current MPI rank
+    const bool m_DebugMode = false; ///< true: extra checks
 };
 
 } // end namespace
diff --git a/include/core/Engine.h b/include/core/Engine.h
index f6c714aebab39ef520693f1c24f8b2bc7202b3fe..6f73fde1c0782838d36e0b5bdc922f52caee00e0 100644
--- a/include/core/Engine.h
+++ b/include/core/Engine.h
@@ -37,10 +37,10 @@ namespace adios
 typedef enum { NONBLOCKINGREAD = 0, BLOCKINGREAD = 1 } PerformReadMode;
 
 typedef enum {
-  APPEND = 0,
-  UPDATE = 1, // writer advance modes
-  NEXT_AVAILABLE = 2,
-  LATEST_AVAILABLE = 3, // reader advance modes
+    APPEND = 0,
+    UPDATE = 1, // writer advance modes
+    NEXT_AVAILABLE = 2,
+    LATEST_AVAILABLE = 3, // reader advance modes
 } AdvanceMode;
 
 /**
@@ -51,445 +51,489 @@ class Engine
 {
 
 public:
-  MPI_Comm m_MPIComm = MPI_COMM_SELF;
-
-  const std::string m_EngineType; ///< from derived class
-  const std::string m_Name;       ///< name used for this engine
-  const std::string m_AccessMode; ///< "w", "r", "a"
-  const Method &m_Method; ///< associated method containing engine metadata
-
-  int m_RankMPI = 0; ///< current MPI rank process
-  int m_SizeMPI = 1; ///< current MPI processes size
-
-  const std::string m_HostLanguage = "C++"; ///< default host language
-
-  /**
-   * Unique constructor
-   * @param adios
-   * @param engineType
-   * @param name
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param endMessage
-   */
-  Engine(ADIOS &adios, const std::string engineType, const std::string name,
-         const std::string accessMode, MPI_Comm mpiComm, const Method &method,
-         const std::string endMessage);
-
-  virtual ~Engine() = default;
-
-  /** @brief Let ADIOS allocate memory for a variable, which can be used by the
-   * user.
-   *
-   * To decrease the cost of copying memory, a user may let ADIOS allocate the
-   * memory for a user-variable,
-   * according to the definition of an ADIOS-variable. The memory will be part
-   * of the ADIOS buffer used
-   * by the engine and it lives until the engine (file, stream) is closed.
-   * A variable that has been allocated this way (cannot have its local
-   * dimensions changed, and AdvanceAsync() should be
-   * used instead of Advance() and the user-variable must not be modified by the
-   * application until the notification arrives.
-   * This is required so that any reader can access the written data before the
-   * application overwrites it.
-   * @param var Variable with defined local dimensions and offsets in global
-   * space
-   * @param fillValue Fill the allocated array with this value
-   * @return A constant pointer to the non-constant allocated array. User should
-   * not deallocate this pointer.
-   */
-  template <class T>
-  inline T *const AllocateVariable(Variable<T> &var, T fillValue = 0)
-  {
-    throw std::invalid_argument("ERROR: type not supported for variable " +
-                                var->name + " in call to GetVariable\n");
-  }
-
-  /**
-   * Needed for DataMan Engine
-   * @param callback function passed from the user
-   */
-  virtual void SetCallBack(std::function<void(const void *, std::string,
-                                              std::string, std::string, Dims)>
-                               callback);
-
-  /**
-   * Write function that adds static checking on the variable to be passed by
-   * values
-   * It then calls its corresponding derived class virtual function
-   * This version uses m_Group to look for the variableName.
-   * @param variable name of variable to the written
-   * @param values pointer passed from the application
-   */
-  template <class T> void Write(Variable<T> &variable, const T *values)
-  {
-    Write(variable, values);
-  }
-
-  /**
-   * String version
-   * @param variableName
-   * @param values
-   */
-  template <class T> void Write(const std::string variableName, const T *values)
-  {
-    Write(variableName, values);
-  }
-
-  /**
-   * Single value version
-   * @param variable
-   * @param values
-   */
-  template <class T> void Write(Variable<T> &variable, const T values)
-  {
-    const T val = values;
-    Write(variable, &val);
-  }
-
-  /**
-   * Single value version using string as variable handlers, allows rvalues to
-   * be passed
-   * @param variableName
-   * @param values
-   */
-  template <class T> void Write(const std::string variableName, const T values)
-  {
-    const T val = values;
-    Write(variableName, &val);
-  }
-
-  virtual void Write(Variable<char> &variable, const char *values);
-  virtual void Write(Variable<unsigned char> &variable,
-                     const unsigned char *values);
-  virtual void Write(Variable<short> &variable, const short *values);
-  virtual void Write(Variable<unsigned short> &variable,
-                     const unsigned short *values);
-  virtual void Write(Variable<int> &variable, const int *values);
-  virtual void Write(Variable<unsigned int> &variable,
-                     const unsigned int *values);
-  virtual void Write(Variable<long int> &variable, const long int *values);
-  virtual void Write(Variable<unsigned long int> &variable,
-                     const unsigned long int *values);
-  virtual void Write(Variable<long long int> &variable,
-                     const long long int *values);
-  virtual void Write(Variable<unsigned long long int> &variable,
-                     const unsigned long long int *values);
-  virtual void Write(Variable<float> &variable, const float *values);
-  virtual void Write(Variable<double> &variable, const double *values);
-  virtual void Write(Variable<long double> &variable,
-                     const long double *values);
-  virtual void Write(Variable<std::complex<float>> &variable,
-                     const std::complex<float> *values);
-  virtual void Write(Variable<std::complex<double>> &variable,
-                     const std::complex<double> *values);
-  virtual void Write(Variable<std::complex<long double>> &variable,
-                     const std::complex<long double> *values);
-  virtual void Write(VariableCompound &variable, const void *values);
-
-  /**
-   * @brief Write functions can be overridden by derived classes. Base class
-   * behavior is to:
-   * 1) Write to Variable values (m_Values) using the pointer to default group
-   * *m_Group set with SetDefaultGroup function
-   * 2) Transform the data
-   * 3) Write to all capsules -> data and metadata
-   * @param variableName
-   * @param values coming from user app
-   */
-  virtual void Write(const std::string variableName, const char *values);
-  virtual void Write(const std::string variableName,
-                     const unsigned char *values);
-  virtual void Write(const std::string variableName, const short *values);
-  virtual void Write(const std::string variableName,
-                     const unsigned short *values);
-  virtual void Write(const std::string variableName, const int *values);
-  virtual void Write(const std::string variableName,
-                     const unsigned int *values);
-  virtual void Write(const std::string variableName, const long int *values);
-  virtual void Write(const std::string variableName,
-                     const unsigned long int *values);
-  virtual void Write(const std::string variableName,
-                     const long long int *values);
-  virtual void Write(const std::string variableName,
-                     const unsigned long long int *values);
-  virtual void Write(const std::string variableName, const float *values);
-  virtual void Write(const std::string variableName, const double *values);
-  virtual void Write(const std::string variableName, const long double *values);
-  virtual void Write(const std::string variableName,
-                     const std::complex<float> *values);
-  virtual void Write(const std::string variableName,
-                     const std::complex<double> *values);
-  virtual void Write(const std::string variableName,
-                     const std::complex<long double> *values);
-  virtual void Write(const std::string variableName, const void *values);
-
-  /**
-   * Read function that adds static checking on the variable to be passed by
-   * values
-   * It then calls its corresponding derived class virtual function
-   * This version uses m_Group to look for the variableName.
-   * @param variable name of variable to the written
-   * @param values pointer passed from the application, nullptr not allowed,
-   * must use Read(variable) instead intentionally
-   */
-  template <class T> void Read(Variable<T> &variable, const T *values)
-  {
-    Read(variable, values);
-  }
-
-  /**
-   * String version
-   * @param variableName
-   * @param values
-   */
-  template <class T> void Read(const std::string variableName, const T *values)
-  {
-    Read(variableName, values);
-  }
-
-  /**
-   * Single value version
-   * @param variable
-   * @param values
-   */
-  template <class T> void Read(Variable<T> &variable, const T &values)
-  {
-    Read(variable, &values);
-  }
-
-  /**
-   * Single value version using string as variable handlers
-   * @param variableName
-   * @param values
-   */
-  template <class T> void Read(const std::string variableName, const T &values)
-  {
-    Read(variableName, &values);
-  }
-
-  /**
-   * Unallocated version, ADIOS will allocate space for incoming data
-   * @param variable
-   */
-  template <class T> void Read(Variable<T> &variable)
-  {
-    Read(variable, nullptr);
-  }
-
-  /**
-   * Unallocated version, ADIOS will allocate space for incoming data
-   * @param variableName
-   */
-  template <class T> void Read(const std::string variableName)
-  {
-    Read(variableName, nullptr);
-  }
-
-  virtual void Read(Variable<double> &variable, const double *values);
-
-  /**
-   * Read function that adds static checking on the variable to be passed by
-   * values
-   * It then calls its corresponding derived class virtual function
-   * This version uses m_Group to look for the variableName.
-   * @param variable name of variable to the written
-   * @param values pointer passed from the application
-   */
-  template <class T> void ScheduleRead(Variable<T> &variable, const T *values)
-  {
-    ScheduleRead(variable, values);
-  }
-
-  /**
-   * String version
-   * @param variableName
-   * @param values
-   */
-  template <class T>
-  void ScheduleRead(const std::string variableName, const T *values)
-  {
-    ScheduleRead(variableName, values);
-  }
-
-  /**
-   * Single value version
-   * @param variable
-   * @param values
-   */
-  template <class T> void ScheduleRead(Variable<T> &variable, const T &values)
-  {
-    ScheduleRead(variable, &values);
-  }
-
-  /**
-   * Single value version using string as variable handlers
-   * @param variableName
-   * @param values
-   */
-  template <class T>
-  void ScheduleRead(const std::string variableName, const T &values)
-  {
-    ScheduleRead(variableName, &values);
-  }
-
-  /**
-   * Unallocated version, ADIOS will allocate space for incoming data
-   * @param variableName
-   */
-  void ScheduleRead(const std::string variableName)
-  {
-    ScheduleRead(variableName, nullptr);
-  }
-
-  /**
-   * Unallocated unspecified version, ADIOS will receive any variable and will
-   * allocate space for incoming data
-   */
-  void ScheduleRead() { ScheduleRead(nullptr, nullptr); }
-
-  virtual void ScheduleRead(Variable<double> &variable, const double *values);
-
-  /**
-   * Perform all scheduled reads, either blocking until all reads completed, or
-   * return immediately.
-   * @param mode Blocking or non-blocking modes
-   */
-  void PerformReads(PerformReadMode mode);
-
-  /**
-   * Reader application indicates that no more data will be read from the
-   * current stream before advancing.
-   * This is necessary to allow writers to advance as soon as possible.
-   */
-  virtual void Release();
-
-  /**
-   * Indicates that a new step is going to be written as new variables come in.
-   */
-  virtual void Advance(float timeout_sec = 0.0);
-
-  /**
-   * Indicates that a new step is going to be written as new variables come in.
-   * @param mode Advance mode, there are different options for writers and
-   * readers
-   */
-  virtual void Advance(AdvanceMode mode, float timeout_sec = 0.0);
-
-  /** @brief Advance asynchronously and get a callback when readers release
-   * access to the buffered step.
-   *
-   * User variables that were allocated through AllocateVariable()
-   * must not be modified until advance is completed.
-   * @param mode Advance mode, there are different options for writers and
-   * readers
-   * @param callback Will be called when advance is completed.
-   */
-  virtual void
-  AdvanceAsync(AdvanceMode mode,
-               std::function<void(std::shared_ptr<adios::Engine>)> callback);
-
-  // Read API
-  /**
-   * Inquires and (optionally) allocates and copies the contents of a variable
-   * If success: it returns a pointer to the internal stored variable object in
-   * ADIOS class.
-   * If failure: it returns nullptr
-   * @param name variable name to look for
-   * @param readIn if true: reads the full variable and payload, allocating
-   * values in memory, if false: internal payload is nullptr
-   * @return success: it returns a pointer to the internal stored variable
-   * object in ADIOS class, failure: nullptr
-   */
-  virtual Variable<void> *InquireVariable(const std::string name,
-                                          const bool readIn = true);
-  virtual Variable<char> *InquireVariableChar(const std::string name,
-                                              const bool readIn = true);
-  virtual Variable<unsigned char> *
-  InquireVariableUChar(const std::string name, const bool readIn = true);
-  virtual Variable<short> *InquireVariableShort(const std::string name,
-                                                const bool readIn = true);
-  virtual Variable<unsigned short> *
-  InquireVariableUShort(const std::string name, const bool readIn = true);
-  virtual Variable<int> *InquireVariableInt(const std::string name,
+    MPI_Comm m_MPIComm = MPI_COMM_SELF;
+
+    const std::string m_EngineType; ///< from derived class
+    const std::string m_Name;       ///< name used for this engine
+    const std::string
+        m_AccessMode;       ///< accessMode for buffers used by this engine
+    const Method &m_Method; ///< associated method containing engine metadata
+
+    int m_RankMPI = 0; ///< current MPI rank process
+    int m_SizeMPI = 1; ///< current MPI processes size
+
+    const std::string m_HostLanguage = "C++"; ///< default host language
+
+    /**
+     * Unique constructor
+     * @param adios
+     * @param engineType
+     * @param name
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param endMessage
+     */
+    Engine(ADIOS &adios, const std::string engineType, const std::string &name,
+           const std::string accessMode, MPI_Comm mpiComm, const Method &method,
+           const std::string endMessage);
+
+    virtual ~Engine() = default;
+
+    /** @brief Let ADIOS allocate memory for a variable, which can be used by
+     * the user.
+     * To decrease the cost of copying memory, a user may let ADIOS allocate the
+     * memory for a user-variable,
+     * according to the definition of an ADIOS-variable. The memory will be part
+     * of the ADIOS buffer used
+     * by the engine and it lives until the engine (file, stream) is closed.
+     * A variable that has been allocated this way (cannot have its local
+     * dimensions changed, and AdvanceAsync() should be
+     * used instead of Advance() and the user-variable must not be modified by
+     * the application until the notification arrives.
+     * This is required so that any reader can access the written data before
+     * the application overwrites it.
+     * @param var Variable with defined local dimensions and offsets in global
+     * space
+     * @param fillValue Fill the allocated array with this value
+     * @return A constant pointer to the non-constant allocated array. User
+     * should
+     * not deallocate this pointer.
+     */
+    template <class T>
+    inline T *const AllocateVariable(Variable<T> &var, T fillValue = 0)
+    {
+        throw std::invalid_argument("ERROR: type not supported for variable " +
+                                    var->name + " in call to GetVariable\n");
+    }
+
+    /**
+     * Needed for DataMan Engine
+     * @param callback function passed from the user
+     */
+    virtual void SetCallBack(std::function<void(const void *, std::string,
+                                                std::string, std::string, Dims)>
+                                 callback);
+
+    /**
+     * Write function that adds static checking on the variable to be passed by
+     * values
+     * It then calls its corresponding derived class virtual function
+     * This version uses m_Group to look for the variableName.
+     * @param variable name of variable to the written
+     * @param values pointer passed from the application
+     */
+    template <class T>
+    void Write(Variable<T> &variable, const T *values)
+    {
+        Write(variable, values);
+    }
+
+    /**
+     * String version
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void Write(const std::string &variableName, const T *values)
+    {
+        Write(variableName, values);
+    }
+
+    /**
+     * Single value version
+     * @param variable
+     * @param values
+     */
+    template <class T>
+    void Write(Variable<T> &variable, const T values)
+    {
+        const T val = values;
+        Write(variable, &val);
+    }
+
+    /**
+     * Single value version using string as variable handlers, allows rvalues to
+     * be passed
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void Write(const std::string &variableName, const T values)
+    {
+        const T val = values;
+        Write(variableName, &val);
+    }
+
+    virtual void Write(Variable<char> &variable, const char *values);
+    virtual void Write(Variable<unsigned char> &variable,
+                       const unsigned char *values);
+    virtual void Write(Variable<short> &variable, const short *values);
+    virtual void Write(Variable<unsigned short> &variable,
+                       const unsigned short *values);
+    virtual void Write(Variable<int> &variable, const int *values);
+    virtual void Write(Variable<unsigned int> &variable,
+                       const unsigned int *values);
+    virtual void Write(Variable<long int> &variable, const long int *values);
+    virtual void Write(Variable<unsigned long int> &variable,
+                       const unsigned long int *values);
+    virtual void Write(Variable<long long int> &variable,
+                       const long long int *values);
+    virtual void Write(Variable<unsigned long long int> &variable,
+                       const unsigned long long int *values);
+    virtual void Write(Variable<float> &variable, const float *values);
+    virtual void Write(Variable<double> &variable, const double *values);
+    virtual void Write(Variable<long double> &variable,
+                       const long double *values);
+    virtual void Write(Variable<std::complex<float>> &variable,
+                       const std::complex<float> *values);
+    virtual void Write(Variable<std::complex<double>> &variable,
+                       const std::complex<double> *values);
+    virtual void Write(Variable<std::complex<long double>> &variable,
+                       const std::complex<long double> *values);
+    virtual void Write(VariableCompound &variable, const void *values);
+
+    /**
+     * @brief Write functions can be overridden by derived classes. Base class
+     * behavior is to:
+     * 1) Write to Variable values (m_Values) using the pointer to default group
+     * *m_Group set with SetDefaultGroup function
+     * 2) Transform the data
+     * 3) Write to all capsules -> data and metadata
+     * @param variableName
+     * @param values coming from user app
+     */
+    virtual void Write(const std::string &variableName, const char *values);
+    virtual void Write(const std::string &variableName,
+                       const unsigned char *values);
+    virtual void Write(const std::string &variableName, const short *values);
+    virtual void Write(const std::string &variableName,
+                       const unsigned short *values);
+    virtual void Write(const std::string &variableName, const int *values);
+    virtual void Write(const std::string &variableName,
+                       const unsigned int *values);
+    virtual void Write(const std::string &variableName, const long int *values);
+    virtual void Write(const std::string &variableName,
+                       const unsigned long int *values);
+    virtual void Write(const std::string &variableName,
+                       const long long int *values);
+    virtual void Write(const std::string &variableName,
+                       const unsigned long long int *values);
+    virtual void Write(const std::string &variableName, const float *values);
+    virtual void Write(const std::string &variableName, const double *values);
+    virtual void Write(const std::string &variableName,
+                       const long double *values);
+    virtual void Write(const std::string &variableName,
+                       const std::complex<float> *values);
+    virtual void Write(const std::string &variableName,
+                       const std::complex<double> *values);
+    virtual void Write(const std::string &variableName,
+                       const std::complex<long double> *values);
+    virtual void Write(const std::string &variableName, const void *values);
+
+    /**
+     * Read function that adds static checking on the variable to be passed by
+     * values
+     * It then calls its corresponding derived class virtual function
+     * This version uses m_Group to look for the variableName.
+     * @param variable name of variable to the written
+     * @param values pointer passed from the application, nullptr not allowed,
+     * must use Read(variable) instead intentionally
+     */
+    template <class T>
+    void Read(Variable<T> &variable, const T *values)
+    {
+        Read(variable, values);
+    }
+
+    /**
+     * String version
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void Read(const std::string variableName, const T *values)
+    {
+        Read(variableName, values);
+    }
+
+    /**
+     * Single value version
+     * @param variable
+     * @param values
+     */
+    template <class T>
+    void Read(Variable<T> &variable, const T &values)
+    {
+        Read(variable, &values);
+    }
+
+    /**
+     * Single value version using string as variable handlers
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void Read(const std::string variableName, const T &values)
+    {
+        Read(variableName, &values);
+    }
+
+    /**
+     * Unallocated version, ADIOS will allocate space for incoming data
+     * @param variable
+     */
+    template <class T>
+    void Read(Variable<T> &variable)
+    {
+        Read(variable, nullptr);
+    }
+
+    /**
+     * Unallocated version, ADIOS will allocate space for incoming data
+     * @param variableName
+     */
+    template <class T>
+    void Read(const std::string variableName)
+    {
+        Read(variableName, nullptr);
+    }
+
+    virtual void Read(Variable<double> &variable, const double *values);
+
+    /**
+     * Read function that adds static checking on the variable to be passed by
+     * values
+     * It then calls its corresponding derived class virtual function
+     * This version uses m_Group to look for the variableName.
+     * @param variable name of variable to the written
+     * @param values pointer passed from the application
+     */
+    template <class T>
+    void ScheduleRead(Variable<T> &variable, const T *values)
+    {
+        ScheduleRead(variable, values);
+    }
+
+    /**
+     * String version
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void ScheduleRead(const std::string variableName, const T *values)
+    {
+        ScheduleRead(variableName, values);
+    }
+
+    /**
+     * Single value version
+     * @param variable
+     * @param values
+     */
+    template <class T>
+    void ScheduleRead(Variable<T> &variable, const T &values)
+    {
+        ScheduleRead(variable, &values);
+    }
+
+    /**
+     * Single value version using string as variable handlers
+     * @param variableName
+     * @param values
+     */
+    template <class T>
+    void ScheduleRead(const std::string variableName, const T &values)
+    {
+        ScheduleRead(variableName, &values);
+    }
+
+    /**
+     * Unallocated version, ADIOS will allocate space for incoming data
+     * @param variableName
+     */
+    void ScheduleRead(const std::string variableName)
+    {
+        ScheduleRead(variableName, nullptr);
+    }
+
+    /**
+     * Unallocated unspecified version, ADIOS will receive any variable and will
+     * allocate space for incoming data
+     */
+    void ScheduleRead() { ScheduleRead(nullptr, nullptr); }
+
+    virtual void ScheduleRead(Variable<double> &variable, const double *values);
+
+    /**
+     * Perform all scheduled reads, either blocking until all reads completed,
+     * or
+     * return immediately.
+     * @param mode Blocking or non-blocking modes
+     */
+    void PerformReads(PerformReadMode mode);
+
+    /**
+     * Reader application indicates that no more data will be read from the
+     * current stream before advancing.
+     * This is necessary to allow writers to advance as soon as possible.
+     */
+    virtual void Release();
+
+    /**
+     * Indicates that a new step is going to be written as new variables come
+     * in.
+     */
+    virtual void Advance(float timeout_sec = 0.0);
+
+    /**
+     * Indicates that a new step is going to be written as new variables come
+     * in.
+     * @param mode Advance mode, there are different options for writers and
+     * readers
+     */
+    virtual void Advance(AdvanceMode mode, float timeout_sec = 0.0);
+
+    /** @brief Advance asynchronously and get a callback when readers release
+     * access to the buffered step.
+     *
+     * User variables that were allocated through AllocateVariable()
+     * must not be modified until advance is completed.
+     * @param mode Advance mode, there are different options for writers and
+     * readers
+     * @param callback Will be called when advance is completed.
+     */
+    virtual void
+    AdvanceAsync(AdvanceMode mode,
+                 std::function<void(std::shared_ptr<adios::Engine>)> callback);
+
+    // Read API
+    /**
+     * Inquires and (optionally) allocates and copies the contents of a variable
+     * If success: it returns a pointer to the internal stored variable object
+     * in
+     * ADIOS class.
+     * If failure: it returns nullptr
+     * @param name variable name to look for
+     * @param readIn if true: reads the full variable and payload, allocating
+     * values in memory, if false: internal payload is nullptr
+     * @return success: it returns a pointer to the internal stored variable
+     * object in ADIOS class, failure: nullptr
+     */
+    virtual Variable<void> *InquireVariable(const std::string &variableName,
                                             const bool readIn = true);
-  virtual Variable<unsigned int> *InquireVariableUInt(const std::string name,
-                                                      const bool readIn = true);
-  virtual Variable<long int> *InquireVariableLInt(const std::string name,
-                                                  const bool readIn = true);
-  virtual Variable<unsigned long int> *
-  InquireVariableULInt(const std::string name, const bool readIn = true);
-  virtual Variable<long long int> *
-  InquireVariableLLInt(const std::string name, const bool readIn = true);
-  virtual Variable<unsigned long long int> *
-  InquireVariableULLInt(const std::string name, const bool readIn = true);
-  virtual Variable<float> *InquireVariableFloat(const std::string name,
+    virtual Variable<char> *InquireVariableChar(const std::string &variableName,
                                                 const bool readIn = true);
-  virtual Variable<double> *InquireVariableDouble(const std::string name,
-                                                  const bool readIn = true);
-  virtual Variable<long double> *
-  InquireVariableLDouble(const std::string name, const bool readIn = true);
-  virtual Variable<std::complex<float>> *
-  InquireVariableCFloat(const std::string name, const bool readIn = true);
-  virtual Variable<std::complex<double>> *
-  InquireVariableCDouble(const std::string name, const bool readIn = true);
-  virtual Variable<std::complex<long double>> *
-  InquireVariableCLDouble(const std::string name, const bool readIn = true);
-  virtual VariableCompound *InquireVariableCompound(const std::string name,
-                                                    const bool readIn = true);
-
-  /** Return the names of all variables present in a stream/file opened for
-   * reading
-   *
-   * @return a vector of strings
-   */
-  std::vector<std::string> VariableNames();
-
-  /**
-   * Closes a particular transport, or all if -1
-   * @param transportIndex order from Method AddTransport
-   */
-  virtual void Close(const int transportIndex = -1) = 0;
+    virtual Variable<unsigned char> *
+    InquireVariableUChar(const std::string &variableName,
+                         const bool readIn = true);
+    virtual Variable<short> *
+    InquireVariableShort(const std::string &variableName,
+                         const bool readIn = true);
+
+    virtual Variable<unsigned short> *
+    InquireVariableUShort(const std::string &variableName,
+                          const bool readIn = true);
+
+    virtual Variable<int> *InquireVariableInt(const std::string &variableName,
+                                              const bool readIn = true);
+    virtual Variable<unsigned int> *
+    InquireVariableUInt(const std::string &variableName,
+                        const bool readIn = true);
+
+    virtual Variable<long int> *
+    InquireVariableLInt(const std::string &variableName,
+                        const bool readIn = true);
+
+    virtual Variable<unsigned long int> *
+    InquireVariableULInt(const std::string &variableName,
+                         const bool readIn = true);
+
+    virtual Variable<long long int> *
+    InquireVariableLLInt(const std::string &variableName,
+                         const bool readIn = true);
+
+    virtual Variable<unsigned long long int> *
+    InquireVariableULLInt(const std::string &variableName,
+                          const bool readIn = true);
+
+    virtual Variable<float> *
+    InquireVariableFloat(const std::string &variableName,
+                         const bool readIn = true);
+
+    virtual Variable<double> *
+    InquireVariableDouble(const std::string &variableName,
+                          const bool readIn = true);
+
+    virtual Variable<long double> *
+    InquireVariableLDouble(const std::string &variableName,
+                           const bool readIn = true);
+
+    virtual Variable<std::complex<float>> *
+    InquireVariableCFloat(const std::string &variableName,
+                          const bool readIn = true);
+
+    virtual Variable<std::complex<double>> *
+    InquireVariableCDouble(const std::string &variableName,
+                           const bool readIn = true);
+
+    virtual Variable<std::complex<long double>> *
+    InquireVariableCLDouble(const std::string &variableName,
+                            const bool readIn = true);
+
+    virtual VariableCompound *
+    InquireVariableCompound(const std::string &variableName,
+                            const bool readIn = true);
+
+    /** Return the names of all variables present in a stream/file opened for
+     * reading
+     *
+     * @return a vector of strings
+     */
+    std::vector<std::string> VariableNames();
+
+    /**
+     * Closes a particular transport, or all if -1
+     * @param transportIndex order from Method AddTransport
+     */
+    virtual void Close(const int transportIndex = -1) = 0;
 
 protected:
-  ADIOS &m_ADIOS; ///< creates Engine at Open
-  std::vector<std::shared_ptr<Transport>> m_Transports; ///< transports managed
-  const bool m_DebugMode = false; ///< true: additional exceptions checks
-  unsigned int m_nThreads = 0;    ///< from Method nthreads
-  const std::string m_EndMessage; ///< added to exceptions to improve debugging
-  std::set<std::string> m_WrittenVariables; ///< contains the names of the
-                                            /// variables that are being written
-
-  virtual void
-  Init(); ///< Initialize m_Capsules and m_Transports, called from constructor
-  virtual void InitParameters(); ///< Initialize parameters from Method, called
-                                 /// from Initi in constructor
-  virtual void InitTransports(); ///< Initialize transports from Method, called
-                                 /// from Init in constructor
-
-  /**
-   * Used to verify parameters in m_Method containers
-   * @param itParam iterator to a certain parameter
-   * @param parameters map of parameters, from m_Method
-   * @param parameterName used if exception is thrown to provide debugging
-   * information
-   * @param hint used if exception is thrown to provide debugging information
-   */
-  void CheckParameter(
-      const std::map<std::string, std::string>::const_iterator itParam,
-      const std::map<std::string, std::string> &parameters,
-      const std::string parameterName, const std::string hint) const;
-
-  bool TransportNamesUniqueness() const; ///< checks if transport names are
-                                         /// unique among the same types (file
-                                         /// I/O)
-
-  /**
-   * Throws an exception in debug mode if transport index is out of range.
-   * @param transportIndex must be in the range [ -1 , m_Transports.size()-1 ]
-   */
-  void CheckTransportIndex(const int transportIndex);
+    ADIOS &m_ADIOS; ///< creates Engine at Open
+    std::vector<std::shared_ptr<Transport>>
+        m_Transports;               ///< transports managed
+    const bool m_DebugMode = false; ///< true: additional exceptions checks
+    unsigned int m_nThreads = 0;    ///< from Method nthreads
+    const std::string
+        m_EndMessage; ///< added to exceptions to improve debugging
+    std::set<std::string> m_WrittenVariables;
+
+    virtual void Init();           ///< Initialize m_Capsules and m_Transports
+    virtual void InitParameters(); ///< Initialize parameters from Method
+    virtual void InitTransports(); ///< Initialize transports from Method
+
+    /**
+     * Used to verify parameters in m_Method containers
+     * @param itParameter iterator to a certain parameter
+     * @param parameters map of parameters, from m_Method
+     * @param parameterName used if exception is thrown to provide debugging
+     * information
+     * @param hint used if exception is thrown to provide debugging information
+     */
+    void CheckParameter(
+        const std::map<std::string, std::string>::const_iterator itParameter,
+        const std::map<std::string, std::string> &parameters,
+        const std::string parameterName, const std::string hint) const;
+
+    bool TransportNamesUniqueness() const; ///< checks if transport names are
+                                           /// unique among the same types (file
+                                           /// I/O)
+
+    /**
+     * Throws an exception in debug mode if transport index is out of range.
+     * @param transportIndex must be in the range [ -1 , m_Transports.size()-1 ]
+     */
+    void CheckTransportIndex(const int transportIndex);
 };
 
 } // end namespace
diff --git a/include/core/Method.h b/include/core/Method.h
index 96f2862bb7e7a6df35542a902d06fdb6d0390f98..dc40806126f6da99aac4cc03be2479c62f00eecc 100644
--- a/include/core/Method.h
+++ b/include/core/Method.h
@@ -24,15 +24,15 @@ namespace adios
 {
 
 typedef enum {
-  GLOBAL_READERS = 2,
-  ROUNDROBIN_READERS = 3,
-  FIFO_READERS = 4,
-  OPEN_ALL_STEPS = 5
+    GLOBAL_READERS = 2,
+    ROUNDROBIN_READERS = 3,
+    FIFO_READERS = 4,
+    OPEN_ALL_STEPS = 5
 } ReadMultiplexPattern;
 
 typedef enum {
-  NOWAITFORSTREAM = 0,
-  WAITFORSTREAM = 1
+    NOWAITFORSTREAM = 0,
+    WAITFORSTREAM = 1
 } StreamOpenMode; // default: wait for stream
 
 /**
@@ -42,99 +42,102 @@ class Method
 {
 
 public:
-  const std::string m_Name;       ///< Method name (as defined in XML)
-  const bool m_DebugMode = false; ///< true: on, throws exceptions and do
-                                  /// additional checks, false: off, faster
-  /// unsafe
-  std::string m_Type; ///< Method's engine type
-  unsigned int m_nThreads = 1;
-  adios::IOMode m_IOMode = adios::IOMode::INDEPENDENT;
-
-  std::map<std::string, std::string> m_Parameters; ///< method parameters
-  std::vector<std::map<std::string, std::string>>
-      m_TransportParameters; ///< each is a separate Transport containing their
-                             /// own parameters
-
-  /**
-   * Constructor
-   * @param name is a label that can be used in the config file to set up the
-   * method at runtime
-   */
-  Method(const std::string name, const bool debugMode = false);
-
-  ~Method() = default;
-
-  /** Check if the method was defined by the user in the config file.
-   * @return true if the method was user-defined, false otherwise when method is
-   * set with default parameters
-   */
-  bool IsUserDefined();
-
-  /**
-   * Define the engine type
-   * @param type must be a valid engine type
-   */
-  void SetEngine(const std::string type);
-
-  /**
-   * Set how many threads the engine can use for its operations (e.g. file io,
-   * compression, staging).
-   * If 1 is allowed, no extra threads will be created during the ADIOS calls
-   * for asynchronous operations.
-   * Note that some transports may require and use extra thread(s). See their
-   * documentation for their
-   * requirements. E.g. some staging transports always create an extra thread
-   * for communication.
-   * Set this parameter like you set it for OpenMP, i.e. count one thread for
-   * the main process that calls
-   * ADIOS functions.
-   * @param nThreads, minimum 1 is required
-   */
-  void AllowThreads(const unsigned int nThreads);
-
-  /**
-   * Sets parameters for the method in "parameter=value" format
-   * @param args list of parameters with format "parameter1=value1", ...,
-   * "parameterN=valueN"
-   */
-  template <class... Args> void SetParameters(Args... args)
-  {
-    std::vector<std::string> parameters = {args...};
-    m_Parameters = BuildParametersMap(parameters, m_DebugMode);
-  }
-
-  /**
-   * Adds a transport and its parameters for the method
-   * @param type must be a supported transport type under /include/transport
-   * @param args list of parameters for a transport with format
-   * "parameter1=value1", ..., "parameterN=valueN"
-   */
-  template <class... Args>
-  void AddTransport(const std::string type, Args... args)
-  {
-    std::vector<std::string> parameters = {args...};
-    AddTransportParameters(type, parameters);
-  }
-
-  void SetReadMultiplexPattern(
-      const ReadMultiplexPattern
-          pattern); // How to split stream content among readers
-  void SetStreamOpenMode(const StreamOpenMode mode); // In Read mode, should
-                                                     // Open() wait for the
-                                                     // first step appear
-                                                     // (default)
-
-  void SetVerbose(const Verbose verbose = Verbose::WARN)
-  {
-    m_Verbose = verbose;
-  };
-  Verbose GetVerbose() { return m_Verbose; };
+    const std::string m_Name;       ///< Method name (as defined in XML)
+    const bool m_DebugMode = false; ///< true: on, throws exceptions and do
+                                    /// additional checks, false: off, faster
+    /// unsafe
+    std::string m_Type; ///< Method's engine type
+    unsigned int m_nThreads = 1;
+    adios::IOMode m_IOMode = adios::IOMode::INDEPENDENT;
+
+    std::map<std::string, std::string> m_Parameters; ///< method parameters
+    std::vector<std::map<std::string, std::string>>
+        m_TransportParameters; ///< each is a separate Transport containing
+                               /// their
+                               /// own parameters
+
+    /**
+     * Constructor
+     * @param name is a label that can be used in the config file to set up the
+     * method at runtime
+     */
+    Method(const std::string name, const bool debugMode = false);
+
+    ~Method();
+
+    /** Check if the method was defined by the user in the config file.
+     * @return true if the method was user-defined, false otherwise when method
+     * is
+     * set with default parameters
+     */
+    bool IsUserDefined();
+
+    /**
+     * Define the engine type
+     * @param type must be a valid engine type
+     */
+    void SetEngine(const std::string type);
+
+    /**
+     * Set how many threads the engine can use for its operations (e.g. file io,
+     * compression, staging).
+     * If 1 is allowed, no extra threads will be created during the ADIOS calls
+     * for asynchronous operations.
+     * Note that some transports may require and use extra thread(s). See their
+     * documentation for their
+     * requirements. E.g. some staging transports always create an extra thread
+     * for communication.
+     * Set this parameter like you set it for OpenMP, i.e. count one thread for
+     * the main process that calls
+     * ADIOS functions.
+     * @param nThreads, minimum 1 is required
+     */
+    void AllowThreads(const unsigned int nThreads);
+
+    /**
+     * Sets parameters for the method in "parameter=value" format
+     * @param args list of parameters with format "parameter1=value1", ...,
+     * "parameterN=valueN"
+     */
+    template <class... Args>
+    void SetParameters(Args... args)
+    {
+        std::vector<std::string> parameters = {args...};
+        m_Parameters = BuildParametersMap(parameters, m_DebugMode);
+    }
+
+    /**
+     * Adds a transport and its parameters for the method
+     * @param type must be a supported transport type under /include/transport
+     * @param args list of parameters for a transport with format
+     * "parameter1=value1", ..., "parameterN=valueN"
+     */
+    template <class... Args>
+    void AddTransport(const std::string type, Args... args)
+    {
+        std::vector<std::string> parameters = {args...};
+        AddTransportParameters(type, parameters);
+    }
+
+    void SetReadMultiplexPattern(
+        const ReadMultiplexPattern
+            pattern); // How to split stream content among readers
+    void SetStreamOpenMode(const StreamOpenMode mode); // In Read mode, should
+                                                       // Open() wait for the
+                                                       // first step appear
+                                                       // (default)
+
+    void SetVerbose(const Verbose verbose = Verbose::WARN)
+    {
+        m_Verbose = verbose;
+    };
+    Verbose GetVerbose() { return m_Verbose; };
 
 private:
-  Verbose m_Verbose = Verbose::WARN;
+    Verbose m_Verbose = Verbose::WARN;
 
-  void AddTransportParameters(const std::string type,
-                              const std::vector<std::string> &parameters);
+    void AddTransportParameters(const std::string type,
+                                const std::vector<std::string> &parameters);
 };
 
 } // end namespace adios
diff --git a/include/core/Support.h b/include/core/Support.h
index bb9b451e842f07afbe38d9d3b36da864594e0c65..a36476660fb7bf34603aab6d907957ebdf606e32 100644
--- a/include/core/Support.h
+++ b/include/core/Support.h
@@ -23,32 +23,34 @@ namespace adios
 
 struct Support
 {
-  static const std::string Version; ///< current ADIOS version
-  static const std::set<std::string>
-      HostLanguages; ///< supported languages: C, C++, Fortran, Python, Java
-  static const std::set<std::string> Numbers;
-  static const std::set<std::string>
-      Transports; ///< supported transport methods
-  static const std::set<std::string>
-      Transforms; ///< supported data transform methods
-  static const std::map<std::string, std::set<std::string>>
-      Datatypes; ///< supported data types, key: host language, value: all
-                 /// supported types
-  static const std::map<std::string, std::set<std::string>>
-      DatatypesAliases; ///< all supported int aliases, key: C++ type (e.g.
-                        /// int), value: aliases to type in key (e.g. int,
-  /// integer)
-
-  static const std::set<std::string> FileTransports; ///< file I/O transports
-
-  enum class Resolutions
-  {
-    mus,
-    ms,
-    s,
-    m,
-    h
-  };
+    static const std::string Version;                 ///< current ADIOS version
+    static const std::set<std::string> HostLanguages; ///< supported languages:
+                                                      /// C, C++, Fortran,
+    /// Python, Java
+    static const std::set<std::string> Numbers;
+    static const std::set<std::string>
+        Transports; ///< supported transport methods
+    static const std::set<std::string>
+        Transforms; ///< supported data transform methods
+    static const std::map<std::string, std::set<std::string>>
+        Datatypes; ///< supported data types, key: host language, value: all
+                   /// supported types
+    static const std::map<std::string, std::set<std::string>>
+        DatatypesAliases; ///< all supported int aliases, key: C++ type
+                          ///(e.g.
+                          /// int), value: aliases to type in key (e.g. int,
+    /// integer)
+
+    static const std::set<std::string> FileTransports; ///< file I/O transports
+
+    enum class Resolutions
+    {
+        mus,
+        ms,
+        s,
+        m,
+        h
+    };
 };
 
 } // end namespace adios
diff --git a/include/core/Transform.h b/include/core/Transform.h
index a6a6dc75ab80f232f8f08e724837d6b83655b7e2..c133c146d7a9fc6be8fc944f38270bd66c9b393b 100644
--- a/include/core/Transform.h
+++ b/include/core/Transform.h
@@ -27,21 +27,21 @@ class Transform
 {
 
 public:
-  const std::string m_Method;
+    const std::string m_Method;
 
-  /**
-   * Initialize parent method
-   * @param method zlib, bzip2, szip
-   */
-  Transform(std::string method);
+    /**
+     * Initialize parent method
+     * @param method zlib, bzip2, szip
+     */
+    Transform(std::string method);
 
-  virtual ~Transform() = default;
+    virtual ~Transform() = default;
 
-  virtual void Compress(const std::vector<char> &bufferIn,
-                        std::vector<char> &bufferOut);
-
-  virtual void Decompress(const std::vector<char> &bufferIn,
+    virtual void Compress(const std::vector<char> &bufferIn,
                           std::vector<char> &bufferOut);
+
+    virtual void Decompress(const std::vector<char> &bufferIn,
+                            std::vector<char> &bufferOut);
 };
 
 } // end namespace adios
diff --git a/include/core/Transport.h b/include/core/Transport.h
index 738bb65c3ec802b94e6d5df1f7e9485cc5386398..aa4c67b29ac4f4380d06e68e95ce9c96c7b86caf 100644
--- a/include/core/Transport.h
+++ b/include/core/Transport.h
@@ -14,9 +14,9 @@
 /// \cond EXCLUDE_FROM_DOXYGEN
 #include <string>
 #include <vector>
+/// \endcond
 
 #include "utilities/profiling/iochrono/IOChrono.h"
-/// \endcond
 
 #include "ADIOS_MPI.h"
 
@@ -27,64 +27,66 @@ class Transport
 {
 
 public:
-  const std::string m_Type; ///< transport type from derived class
-  std::string m_Name;       ///< from Open
-  std::string m_AccessMode; ///< from Open
-  bool m_IsOpen = false;
-
-  MPI_Comm m_MPIComm = MPI_COMM_SELF;
-
-  int m_RankMPI = 0;              ///< current MPI rank process
-  int m_SizeMPI = 1;              ///< current MPI processes size
-  profiling::IOChrono m_Profiler; ///< profiles Open, Write/Read, Close
-
-  /**
-   * Base constructor that all derived classes pass
-   * @param
-   * @param mpiComm passed to m_MPIComm
-   * @param debugMode passed to m_DebugMode
-   */
-  Transport(const std::string type, MPI_Comm mpiComm, const bool debugMode);
-
-  virtual ~Transport() = default;
-
-  /**
-   * Open Output file accesing a mode
-   * @param name name of stream or file
-   * @param accessMode r or read, w or write, a or append
-   */
-  virtual void Open(const std::string name, const std::string accessMode) = 0;
-
-  /**
-   * Set buffer and size for a particular transport
-   * @param buffer raw data buffer
-   * @param size raw data buffer size
-   */
-  virtual void SetBuffer(char *buffer, std::size_t size);
-
-  /**
-   * Write function for a transport
-   * @param buffer pointer to buffer to be written
-   * @param size size of buffer to be written
-   */
-  virtual void Write(const char *buffer, std::size_t size) = 0;
-
-  virtual void Flush(); ///< flushes current contents to physical medium without
-                        /// closing the transport
-
-  virtual void Close(); ///< closes current transport and flushes everything,
-                        /// transport becomes unreachable
-
-  /**
-   * Inits the profiler
-   * @param accessMode
-   * @param resolution
-   */
-  virtual void InitProfiler(const std::string accessMode,
-                            const Support::Resolutions resolution);
+    const std::string m_Type; ///< transport type from derived class
+    std::string m_Name;       ///< from Open
+    std::string m_AccessMode; ///< from Open
+    bool m_IsOpen = false;
+
+    MPI_Comm m_MPIComm = MPI_COMM_SELF;
+
+    int m_RankMPI = 0;              ///< current MPI rank process
+    int m_SizeMPI = 1;              ///< current MPI processes size
+    profiling::IOChrono m_Profiler; ///< profiles Open, Write/Read, Close
+
+    /**
+     * Base constructor that all derived classes pass
+     * @param
+     * @param mpiComm passed to m_MPIComm
+     * @param debugMode passed to m_DebugMode
+     */
+    Transport(const std::string type, MPI_Comm mpiComm, const bool debugMode);
+
+    virtual ~Transport() = default;
+
+    /**
+     * Open Output file accesing a mode
+     * @param name name of stream or file
+     * @param accessMode r or read, w or write, a or append
+     */
+    virtual void Open(const std::string &name,
+                      const std::string accessMode) = 0;
+
+    /**
+     * Set buffer and size for a particular transport
+     * @param buffer raw data buffer
+     * @param size raw data buffer size
+     */
+    virtual void SetBuffer(char *buffer, std::size_t size);
+
+    /**
+     * Write function for a transport
+     * @param buffer pointer to buffer to be written
+     * @param size size of buffer to be written
+     */
+    virtual void Write(const char *buffer, std::size_t size) = 0;
+
+    virtual void
+    Flush(); ///< flushes current contents to physical medium without
+             /// closing the transport
+
+    virtual void Close(); ///< closes current transport and flushes everything,
+                          /// transport becomes unreachable
+
+    /**
+     * Inits the profiler
+     * @param accessMode
+     * @param resolution
+     */
+    virtual void InitProfiler(const std::string accessMode,
+                              const Support::Resolutions resolution);
 
 protected:
-  const bool m_DebugMode = false; ///< if true: additional checks and exceptions
+    const bool m_DebugMode = false; ///< true: turn on exceptions
 };
 
 } // end namespace adios
diff --git a/include/core/Variable.h b/include/core/Variable.h
index 110ae7064cad92d899913204f9677e2781b9afee..cc932a484eebbe35c7c4e911b37587f548ecf120 100644
--- a/include/core/Variable.h
+++ b/include/core/Variable.h
@@ -26,91 +26,94 @@ namespace adios
 
 struct TransformData
 {
-  Transform &Operation; ///< pointer to transform object
-  std::map<std::string, std::string> Parameters; ///< transforms parameters
-  std::vector<std::size_t>
-      Size; ///< vector that carries the sizes after a transformation is applied
+    Transform &Operation; ///< pointer to transform object
+    std::map<std::string, std::string> Parameters; ///< transforms parameters
+    std::vector<std::size_t> Size; ///< vector that carries the sizes after a
+                                   /// transformation is applied
 };
 
 /**
  * @param Base (parent) class for template derived (child) class CVariable.
  * Required to put CVariable objects in STL containers.
  */
-template <class T> class Variable : public VariableBase
+template <class T>
+class Variable : public VariableBase
 {
 
 public:
-  const T *m_AppValues = nullptr; ///< pointer to values passed from user in
-                                  /// ADIOS Write, it might change in ADIOS Read
-
-  std::vector<TransformData> m_Transforms; ///< associated transforms, sequence
-  /// determines application order, e.g.
-  /// first Transforms[0] then
-  /// Transforms[1]. Pointer used as
-  /// reference (no memory management).
-
-  Variable<T>(const std::string name, const Dims dimensions,
-              const Dims globalDimensions, const Dims globalOffsets,
-              const bool debugMode)
-  : VariableBase(name, GetType<T>(), sizeof(T), dimensions, globalDimensions,
-                 globalOffsets, debugMode)
-  {
-    if (m_Dimensions == Dims{1})
-      m_IsScalar = true;
-  }
-
-  template <class... Args> void AddTransform(Transform &transform, Args... args)
-  {
-    std::vector<std::string> parameters = {args...};
-    m_Transforms.emplace_back(
-        transform,
-        BuildParametersMap(parameters, m_DebugMode)); // need to check
-  }
-
-  /** Return the global dimensions of the variable
-   *  @return vector of std::size_t values
-   */
-  std::vector<std::size_t> GetGlobalDimensions();
-
-  /** Return the number of steps available for the variable
-   *  @return Number of steps
-   */
-  int GetSteps();
-
-  void Monitor(std::ostream &logInfo) const noexcept
-  {
-    logInfo << "Variable: " << m_Name << "\n";
-    logInfo << "Type: " << m_Type << "\n";
-    logInfo << "Size: " << TotalSize() << " elements\n";
-    logInfo << "Payload: " << PayLoadSize() << " bytes\n";
-
-    if (m_AppValues != nullptr)
+    const T *m_AppValues = nullptr; ///< pointer to values passed from user in
+    /// ADIOS Write, it might change in ADIOS Read
+
+    std::vector<TransformData>
+        m_Transforms; ///< associated transforms, sequence
+    /// determines application order, e.g.
+    /// first Transforms[0] then
+    /// Transforms[1]. Pointer used as
+    /// reference (no memory management).
+
+    Variable<T>(const std::string name, const Dims dimensions,
+                const Dims globalDimensions, const Dims globalOffsets,
+                const bool debugMode)
+    : VariableBase(name, GetType<T>(), sizeof(T), dimensions, globalDimensions,
+                   globalOffsets, debugMode)
     {
-      logInfo << "Values (first 10 or max_size): \n";
-      std::size_t size = TotalSize();
-      if (size > 10)
-        size = 10;
-
-      if (m_Type.find("complex") != m_Type.npos) // it's complex
-      {
-        for (unsigned int i = 0; i < size; ++i)
-        {
-          logInfo << "( " << std::real(m_AppValues[i]) << " , "
-                  << std::imag(m_AppValues[i]) << " )  ";
-        }
-      }
-      else
-      {
-        for (unsigned int i = 0; i < size; ++i)
+        if (m_Dimensions == Dims{1})
+            m_IsScalar = true;
+    }
+
+    template <class... Args>
+    void AddTransform(Transform &transform, Args... args)
+    {
+        std::vector<std::string> parameters = {args...};
+        m_Transforms.emplace_back(
+            transform,
+            BuildParametersMap(parameters, m_DebugMode)); // need to check
+    }
+
+    /** Return the global dimensions of the variable
+     *  @return vector of std::size_t values
+     */
+    std::vector<std::size_t> GetGlobalDimensions();
+
+    /** Return the number of steps available for the variable
+     *  @return Number of steps
+     */
+    int GetSteps();
+
+    void Monitor(std::ostream &logInfo) const noexcept
+    {
+        logInfo << "Variable: " << m_Name << "\n";
+        logInfo << "Type: " << m_Type << "\n";
+        logInfo << "Size: " << TotalSize() << " elements\n";
+        logInfo << "Payload: " << PayLoadSize() << " bytes\n";
+
+        if (m_AppValues != nullptr)
         {
-          logInfo << m_AppValues[i] << " ";
+            logInfo << "Values (first 10 or max_size): \n";
+            std::size_t size = TotalSize();
+            if (size > 10)
+                size = 10;
+
+            if (m_Type.find("complex") != m_Type.npos) // it's complex
+            {
+                for (unsigned int i = 0; i < size; ++i)
+                {
+                    logInfo << "( " << std::real(m_AppValues[i]) << " , "
+                            << std::imag(m_AppValues[i]) << " )  ";
+                }
+            }
+            else
+            {
+                for (unsigned int i = 0; i < size; ++i)
+                {
+                    logInfo << m_AppValues[i] << " ";
+                }
+            }
+
+            logInfo << " ...";
         }
-      }
-
-      logInfo << " ...";
+        logInfo << "\n";
     }
-    logInfo << "\n";
-  }
 };
 
 } // end namespace
diff --git a/include/core/VariableBase.h b/include/core/VariableBase.h
index cc8c8f79a4806186e47dec2c4d5c5f691ea1039b..eea1d261c67e63b84e1db385117dfcb01781a9ce 100644
--- a/include/core/VariableBase.h
+++ b/include/core/VariableBase.h
@@ -30,71 +30,75 @@ class VariableBase
 {
 
 public:
-  const std::string m_Name;        ///< variable name
-  const std::string m_Type;        ///< variable type
-  const std::size_t m_ElementSize; ///< Variable -> sizeof(T), VariableCompound
-                                   ///-> from constructor
-
-  bool m_IsScalar = false;
-  const bool m_IsDimension = false;
-
-  VariableBase(const std::string name, const std::string type,
-               const std::size_t elementSize, const Dims dimensions,
-               const Dims globalDimensions, const Dims globalOffsets,
-               const bool debugMode)
-  : m_Name{name}, m_Type{type}, m_ElementSize{elementSize},
-    m_Dimensions{dimensions}, m_GlobalDimensions{globalDimensions},
-    m_GlobalOffsets{globalOffsets}, m_DebugMode{debugMode}
-  {
-  }
-
-  virtual ~VariableBase() {}
-
-  std::size_t DimensionsSize() const noexcept { return m_Dimensions.size(); }
-
-  /**
-   * Returns the payload size in bytes
-   * @return TotalSize * sizeof(T)
-   */
-  std::size_t PayLoadSize() const noexcept
-  {
-    return GetTotalSize(m_Dimensions) * m_ElementSize;
-  }
-
-  /**
-   * Returns the total size
-   * @return number of elements
-   */
-  std::size_t TotalSize() const noexcept { return GetTotalSize(m_Dimensions); }
-
-  // protected: off for now
-
-  Dims m_Dimensions;       ///< array of local dimensions
-  Dims m_GlobalDimensions; ///< array of global dimensions
-  Dims m_GlobalOffsets;    ///< array of global offsets
-  const bool m_DebugMode = false;
-
-  std::string GetDimensionAsString() { return dimsToString(m_Dimensions); }
-  std::string GetGlobalDimensionAsString()
-  {
-    return dimsToString(m_GlobalDimensions);
-  }
-  std::string GetOffsetsAsString() { return dimsToString(m_GlobalOffsets); }
+    const std::string m_Name; ///< variable name
+    const std::string m_Type; ///< variable type
+    const std::size_t
+        m_ElementSize; ///< Variable -> sizeof(T), VariableCompound
+                       ///-> from constructor
+
+    bool m_IsScalar = false;
+    const bool m_IsDimension = false;
+
+    VariableBase(const std::string name, const std::string type,
+                 const std::size_t elementSize, const Dims dimensions,
+                 const Dims globalDimensions, const Dims globalOffsets,
+                 const bool debugMode)
+    : m_Name{name}, m_Type{type}, m_ElementSize{elementSize},
+      m_Dimensions{dimensions}, m_GlobalDimensions{globalDimensions},
+      m_GlobalOffsets{globalOffsets}, m_DebugMode{debugMode}
+    {
+    }
+
+    virtual ~VariableBase() {}
+
+    std::size_t DimensionsSize() const noexcept { return m_Dimensions.size(); }
+
+    /**
+     * Returns the payload size in bytes
+     * @return TotalSize * sizeof(T)
+     */
+    std::size_t PayLoadSize() const noexcept
+    {
+        return GetTotalSize(m_Dimensions) * m_ElementSize;
+    }
+
+    /**
+     * Returns the total size
+     * @return number of elements
+     */
+    std::size_t TotalSize() const noexcept
+    {
+        return GetTotalSize(m_Dimensions);
+    }
+
+    // protected: off for now
+
+    Dims m_Dimensions;       ///< array of local dimensions
+    Dims m_GlobalDimensions; ///< array of global dimensions
+    Dims m_GlobalOffsets;    ///< array of global offsets
+    const bool m_DebugMode = false;
+
+    std::string GetDimensionAsString() { return dimsToString(m_Dimensions); }
+    std::string GetGlobalDimensionAsString()
+    {
+        return dimsToString(m_GlobalDimensions);
+    }
+    std::string GetOffsetsAsString() { return dimsToString(m_GlobalOffsets); }
 
 private:
-  std::string dimsToString(Dims dims)
-  {
-    std::ostringstream oss;
-    if (!dims.empty())
+    std::string dimsToString(Dims dims)
     {
-      // Convert all but the last element to avoid a trailing ","
-      std::copy(dims.begin(), dims.end() - 1,
-                std::ostream_iterator<std::size_t>(oss, ","));
-      // Now add the last element with no delimiter
-      oss << dims.back();
+        std::ostringstream oss;
+        if (!dims.empty())
+        {
+            // Convert all but the last element to avoid a trailing ","
+            std::copy(dims.begin(), dims.end() - 1,
+                      std::ostream_iterator<std::size_t>(oss, ","));
+            // Now add the last element with no delimiter
+            oss << dims.back();
+        }
+        return oss.str();
     }
-    return oss.str();
-  }
 };
 }
 
diff --git a/include/core/VariableCompound.h b/include/core/VariableCompound.h
index c3bacfccaae20331e45876361388eb035812cd58..322dccd4f08adc8ddc9ffd6cb18a1b2e1b159f9c 100644
--- a/include/core/VariableCompound.h
+++ b/include/core/VariableCompound.h
@@ -18,9 +18,9 @@ namespace adios
 
 struct CompoundElement
 {
-  const std::string m_Name;
-  const std::size_t m_Offset;
-  const std::string m_Type;
+    const std::string m_Name;
+    const std::size_t m_Offset;
+    const std::string m_Type;
 };
 
 /**
@@ -31,32 +31,32 @@ class VariableCompound : public VariableBase
 {
 
 public:
-  const void *m_AppValue = nullptr;
+    const void *m_AppValue = nullptr;
 
-  VariableCompound(const std::string name, const std::size_t sizeOfStruct,
-                   const Dims dimensions, const Dims globalDimensions,
-                   const Dims globalOffsets, const bool debugMode)
-  : VariableBase(name, "compound", sizeOfStruct, dimensions, globalDimensions,
-                 globalOffsets, debugMode)
-  {
-  }
+    VariableCompound(const std::string name, const std::size_t sizeOfStruct,
+                     const Dims dimensions, const Dims globalDimensions,
+                     const Dims globalOffsets, const bool debugMode)
+    : VariableBase(name, "compound", sizeOfStruct, dimensions, globalDimensions,
+                   globalOffsets, debugMode)
+    {
+    }
 
-  template <class U>
-  void InsertMember(const std::string name, const std::size_t offset)
-  {
-    m_Elements.push_back(CompoundElement{name, offset, GetType<U>()});
-  }
+    template <class U>
+    void InsertMember(const std::string name, const std::size_t offset)
+    {
+        m_Elements.push_back(CompoundElement{name, offset, GetType<U>()});
+    }
 
-  void Monitor(std::ostream &logInfo) const noexcept
-  {
-    logInfo << "Variable Compound: " << m_Name << "\n";
-    logInfo << "Type: " << m_Type << "\n";
-    logInfo << "Size: " << TotalSize() << " elements\n";
-    logInfo << "Payload: " << PayLoadSize() << " bytes\n";
-  }
+    void Monitor(std::ostream &logInfo) const noexcept
+    {
+        logInfo << "Variable Compound: " << m_Name << "\n";
+        logInfo << "Type: " << m_Type << "\n";
+        logInfo << "Size: " << TotalSize() << " elements\n";
+        logInfo << "Payload: " << PayLoadSize() << " bytes\n";
+    }
 
 private:
-  std::vector<CompoundElement> m_Elements; ///< vector of element types
+    std::vector<CompoundElement> m_Elements; ///< vector of element types
 };
 
 } // end namespace
diff --git a/include/engine/adios1/ADIOS1Reader.h b/include/engine/adios1/ADIOS1Reader.h
index 70b89700aadabcbd4f2479d48dee4cacba480efc..22e2984765bac022d57ba63ba1b6c4b30906bd56 100644
--- a/include/engine/adios1/ADIOS1Reader.h
+++ b/include/engine/adios1/ADIOS1Reader.h
@@ -27,96 +27,100 @@ class BPFileReader : public Engine
 {
 
 public:
-  /**
-   * Constructor for single BP capsule engine, writes in BP format into a single
-   * heap capsule
-   * @param name unique name given to the engine
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   * @param hostLanguage
-   */
-  BPFileReader(ADIOS &adios, const std::string name,
-               const std::string accessMode, MPI_Comm mpiComm,
-               const Method &method, const IOMode iomode,
-               const float timeout_sec, const bool debugMode = false,
-               const unsigned int nthreads = 1);
-
-  ~BPFileReader();
-
-  Variable<void> *InquireVariable(const std::string name,
-                                  const bool readIn = true);
-  Variable<char> *InquireVariableChar(const std::string name,
-                                      const bool readIn = true);
-  Variable<unsigned char> *InquireVariableUChar(const std::string name,
-                                                const bool readIn = true);
-  Variable<short> *InquireVariableShort(const std::string name,
+    /**
+     * Constructor for single BP capsule engine, writes in BP format into a
+     * single
+     * heap capsule
+     * @param name unique name given to the engine
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     * @param hostLanguage
+     */
+    BPFileReader(ADIOS &adios, const std::string name,
+                 const std::string accessMode, MPI_Comm mpiComm,
+                 const Method &method, const IOMode iomode,
+                 const float timeout_sec, const bool debugMode = false,
+                 const unsigned int nthreads = 1);
+
+    ~BPFileReader();
+
+    Variable<void> *InquireVariable(const std::string name,
+                                    const bool readIn = true);
+    Variable<char> *InquireVariableChar(const std::string name,
                                         const bool readIn = true);
-  Variable<unsigned short> *InquireVariableUShort(const std::string name,
+    Variable<unsigned char> *InquireVariableUChar(const std::string name,
                                                   const bool readIn = true);
-  Variable<int> *InquireVariableInt(const std::string name,
-                                    const bool readIn = true);
-  Variable<unsigned int> *InquireVariableUInt(const std::string name,
-                                              const bool readIn = true);
-  Variable<long int> *InquireVariableLInt(const std::string name,
+    Variable<short> *InquireVariableShort(const std::string name,
                                           const bool readIn = true);
-  Variable<unsigned long int> *InquireVariableULInt(const std::string name,
+    Variable<unsigned short> *InquireVariableUShort(const std::string name,
                                                     const bool readIn = true);
-  Variable<long long int> *InquireVariableLLInt(const std::string name,
+    Variable<int> *InquireVariableInt(const std::string name,
+                                      const bool readIn = true);
+    Variable<unsigned int> *InquireVariableUInt(const std::string name,
                                                 const bool readIn = true);
-  Variable<unsigned long long int> *
-  InquireVariableULLInt(const std::string name, const bool readIn = true);
-  Variable<float> *InquireVariableFloat(const std::string name,
-                                        const bool readIn = true);
-  Variable<double> *InquireVariableDouble(const std::string name,
+    Variable<long int> *InquireVariableLInt(const std::string name,
+                                            const bool readIn = true);
+    Variable<unsigned long int> *InquireVariableULInt(const std::string name,
+                                                      const bool readIn = true);
+    Variable<long long int> *InquireVariableLLInt(const std::string name,
+                                                  const bool readIn = true);
+    Variable<unsigned long long int> *
+    InquireVariableULLInt(const std::string name, const bool readIn = true);
+    Variable<float> *InquireVariableFloat(const std::string name,
                                           const bool readIn = true);
-  Variable<long double> *InquireVariableLDouble(const std::string name,
-                                                const bool readIn = true);
-  Variable<std::complex<float>> *
-  InquireVariableCFloat(const std::string name, const bool readIn = true);
-  Variable<std::complex<double>> *
-  InquireVariableCDouble(const std::string name, const bool readIn = true);
-  Variable<std::complex<long double>> *
-  InquireVariableCLDouble(const std::string name, const bool readIn = true);
-
-  /**
-   * Not implemented
-   * @param name
-   * @param readIn
-   * @return
-   */
-  VariableCompound *InquireVariableCompound(const std::string name,
+    Variable<double> *InquireVariableDouble(const std::string name,
                                             const bool readIn = true);
+    Variable<long double> *InquireVariableLDouble(const std::string name,
+                                                  const bool readIn = true);
+    Variable<std::complex<float>> *
+    InquireVariableCFloat(const std::string name, const bool readIn = true);
+    Variable<std::complex<double>> *
+    InquireVariableCDouble(const std::string name, const bool readIn = true);
+    Variable<std::complex<long double>> *
+    InquireVariableCLDouble(const std::string name, const bool readIn = true);
+
+    /**
+     * Not implemented
+     * @param name
+     * @param readIn
+     * @return
+     */
+    VariableCompound *InquireVariableCompound(const std::string name,
+                                              const bool readIn = true);
 
-  void Close(const int transportIndex = -1);
+    void Close(const int transportIndex = -1);
 
 private:
-  capsule::STLVector
-      m_Buffer; ///< heap capsule, contains data and metadata buffers
-  // format::BP1Writer m_BP1Writer; ///< format object will provide the required
-  // BP functionality to be applied on m_Buffer and m_Transports
-
-  void Init(); ///< calls InitCapsules and InitTransports based on Method,
-               /// called from constructor
-  void InitCapsules();
-  void InitTransports(); ///< from Transports
-
-  std::string
-  GetMdtmParameter(const std::string parameter,
-                   const std::map<std::string, std::string> &mdtmParameters);
-
-  template <class T>
-  Variable<T> *InquireVariableCommon(const std::string name, const bool readIn)
-  {
-    std::cout << "Hello BPReaderCommon\n";
-
-    // here read variable metadata (dimensions, type, etc.)...then create a
-    // Variable like below:
-    // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" + name, )
-    // return &variable; //return address if success
-    return nullptr; // on failure
-  }
+    capsule::STLVector
+        m_Buffer; ///< heap capsule, contains data and metadata buffers
+    // format::BP1Writer m_BP1Writer; ///< format object will provide the
+    // required
+    // BP functionality to be applied on m_Buffer and m_Transports
+
+    void Init(); ///< calls InitCapsules and InitTransports based on Method,
+                 /// called from constructor
+    void InitCapsules();
+    void InitTransports(); ///< from Transports
+
+    std::string
+    GetMdtmParameter(const std::string parameter,
+                     const std::map<std::string, std::string> &mdtmParameters);
+
+    template <class T>
+    Variable<T> *InquireVariableCommon(const std::string name,
+                                       const bool readIn)
+    {
+        std::cout << "Hello BPReaderCommon\n";
+
+        // here read variable metadata (dimensions, type, etc.)...then create a
+        // Variable like below:
+        // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" +
+        // name, )
+        // return &variable; //return address if success
+        return nullptr; // on failure
+    }
 };
 
 } // end namespace adios
diff --git a/include/engine/adios1/ADIOS1Writer.h b/include/engine/adios1/ADIOS1Writer.h
index 054e7063a05b0f3456575c7e7fcd3bcb54a0a0a7..8f41ed432d566e370110775b13e90c051f51a531 100644
--- a/include/engine/adios1/ADIOS1Writer.h
+++ b/include/engine/adios1/ADIOS1Writer.h
@@ -27,103 +27,107 @@ class ADIOS1Writer : public Engine
 {
 
 public:
-  /**
-   * Constructor for Writer writes in ADIOS 1.x BP format
-   * @param name unique name given to the engine
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   */
-  ADIOS1Writer(ADIOS &adios, const std::string name,
-               const std::string accessMode, MPI_Comm mpiComm,
-               const Method &method, const IOMode iomode,
-               const float timeout_sec, const bool debugMode = false,
-               const unsigned int nthreads = 1);
-
-  ~ADIOS1Writer();
-
-  void Write(Variable<char> &variable, const char *values);
-  void Write(Variable<unsigned char> &variable, const unsigned char *values);
-  void Write(Variable<short> &variable, const short *values);
-  void Write(Variable<unsigned short> &variable, const unsigned short *values);
-  void Write(Variable<int> &variable, const int *values);
-  void Write(Variable<unsigned int> &variable, const unsigned int *values);
-  void Write(Variable<long int> &variable, const long int *values);
-  void Write(Variable<unsigned long int> &variable,
-             const unsigned long int *values);
-  void Write(Variable<long long int> &variable, const long long int *values);
-  void Write(Variable<unsigned long long int> &variable,
-             const unsigned long long int *values);
-  void Write(Variable<float> &variable, const float *values);
-  void Write(Variable<double> &variable, const double *values);
-  void Write(Variable<long double> &variable, const long double *values);
-  void Write(Variable<std::complex<float>> &variable,
-             const std::complex<float> *values);
-  void Write(Variable<std::complex<double>> &variable,
-             const std::complex<double> *values);
-  void Write(Variable<std::complex<long double>> &variable,
-             const std::complex<long double> *values);
-  void Write(VariableCompound &variable, const void *values);
-
-  void Write(const std::string variableName, const char *values);
-  void Write(const std::string variableName, const unsigned char *values);
-  void Write(const std::string variableName, const short *values);
-  void Write(const std::string variableName, const unsigned short *values);
-  void Write(const std::string variableName, const int *values);
-  void Write(const std::string variableName, const unsigned int *values);
-  void Write(const std::string variableName, const long int *values);
-  void Write(const std::string variableName, const unsigned long int *values);
-  void Write(const std::string variableName, const long long int *values);
-  void Write(const std::string variableName,
-             const unsigned long long int *values);
-  void Write(const std::string variableName, const float *values);
-  void Write(const std::string variableName, const double *values);
-  void Write(const std::string variableName, const long double *values);
-  void Write(const std::string variableName, const std::complex<float> *values);
-  void Write(const std::string variableName,
-             const std::complex<double> *values);
-  void Write(const std::string variableName,
-             const std::complex<long double> *values);
-  void Write(const std::string variableName, const void *values);
-
-  void Advance();
-
-  /**
-   * Closes a single transport or all transports
-   * @param transportIndex, if -1 (default) closes all transports, otherwise it
-   * closes a transport in m_Transport[transportIndex]. In debug mode the latter
-   * is bounds-checked.
-   */
-  void Close(const int transportIndex = -1);
+    /**
+     * Constructor for Writer writes in ADIOS 1.x BP format
+     * @param name unique name given to the engine
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     */
+    ADIOS1Writer(ADIOS &adios, const std::string name,
+                 const std::string accessMode, MPI_Comm mpiComm,
+                 const Method &method, const IOMode iomode,
+                 const float timeout_sec, const bool debugMode = false,
+                 const unsigned int nthreads = 1);
+
+    ~ADIOS1Writer();
+
+    void Write(Variable<char> &variable, const char *values);
+    void Write(Variable<unsigned char> &variable, const unsigned char *values);
+    void Write(Variable<short> &variable, const short *values);
+    void Write(Variable<unsigned short> &variable,
+               const unsigned short *values);
+    void Write(Variable<int> &variable, const int *values);
+    void Write(Variable<unsigned int> &variable, const unsigned int *values);
+    void Write(Variable<long int> &variable, const long int *values);
+    void Write(Variable<unsigned long int> &variable,
+               const unsigned long int *values);
+    void Write(Variable<long long int> &variable, const long long int *values);
+    void Write(Variable<unsigned long long int> &variable,
+               const unsigned long long int *values);
+    void Write(Variable<float> &variable, const float *values);
+    void Write(Variable<double> &variable, const double *values);
+    void Write(Variable<long double> &variable, const long double *values);
+    void Write(Variable<std::complex<float>> &variable,
+               const std::complex<float> *values);
+    void Write(Variable<std::complex<double>> &variable,
+               const std::complex<double> *values);
+    void Write(Variable<std::complex<long double>> &variable,
+               const std::complex<long double> *values);
+    void Write(VariableCompound &variable, const void *values);
+
+    void Write(const std::string variableName, const char *values);
+    void Write(const std::string variableName, const unsigned char *values);
+    void Write(const std::string variableName, const short *values);
+    void Write(const std::string variableName, const unsigned short *values);
+    void Write(const std::string variableName, const int *values);
+    void Write(const std::string variableName, const unsigned int *values);
+    void Write(const std::string variableName, const long int *values);
+    void Write(const std::string variableName, const unsigned long int *values);
+    void Write(const std::string variableName, const long long int *values);
+    void Write(const std::string variableName,
+               const unsigned long long int *values);
+    void Write(const std::string variableName, const float *values);
+    void Write(const std::string variableName, const double *values);
+    void Write(const std::string variableName, const long double *values);
+    void Write(const std::string variableName,
+               const std::complex<float> *values);
+    void Write(const std::string variableName,
+               const std::complex<double> *values);
+    void Write(const std::string variableName,
+               const std::complex<long double> *values);
+    void Write(const std::string variableName, const void *values);
+
+    void Advance();
+
+    /**
+     * Closes a single transport or all transports
+     * @param transportIndex, if -1 (default) closes all transports, otherwise
+     * it
+     * closes a transport in m_Transport[transportIndex]. In debug mode the
+     * latter
+     * is bounds-checked.
+     */
+    void Close(const int transportIndex = -1);
 
 private:
-  const char *m_groupname; ///< ADIOS1 group name created from the method's
-                           /// name. Must be a unique group name.
-  const char *m_filename;  ///< Save file name from constructor for Advance()
-                           /// when we re-open in ADIOS1
-  MPI_Comm m_comm; ///< Save MPI communicator from constructor for Advance()
-                   /// when we re-open in ADIOS1
-
-  bool m_initialized = false; ///< set to true after calling adios_init()
-  int64_t m_adios_file = 0;   ///< ADIOS1 file handler returned by adios_open()
-  int64_t m_adios_group =
-      0; ///< ADIOS1 group pointer that holds the ADIOS1 variable definitions
-  bool m_IsFileOpen = false;
-
-  void Init();
-  // these are unused yet, keeping here to see if we need them
-  void InitParameters();
-  void InitTransports();
-  void InitProcessGroup();
-
-  bool ReOpenAsNeeded(); // return true if file is open or reopened
-  void DefineVariable(std::string name, bool isScalar,
-                      enum ADIOS_DATATYPES vartype, std::string ldims,
-                      std::string gdims, std::string offs);
-  void WriteVariable(std::string name, bool isScalar,
-                     enum ADIOS_DATATYPES vartype, std::string ldims,
-                     std::string gdims, std::string offs, const void *values);
+    const char *m_groupname; ///< ADIOS1 group name created from the method's
+                             /// name. Must be a unique group name.
+    const char *m_filename;  ///< Save file name from constructor for Advance()
+                             /// when we re-open in ADIOS1
+    MPI_Comm m_comm; ///< Save MPI communicator from constructor for Advance()
+                     /// when we re-open in ADIOS1
+
+    bool m_initialized = false; ///< set to true after calling adios_init()
+    int64_t m_adios_file = 0;  ///< ADIOS1 file handler returned by adios_open()
+    int64_t m_adios_group = 0; ///< ADIOS1 group pointer that holds the ADIOS1
+                               /// variable definitions
+    bool m_IsFileOpen = false;
+
+    void Init();
+    // these are unused yet, keeping here to see if we need them
+    void InitParameters();
+    void InitTransports();
+    void InitProcessGroup();
+
+    bool ReOpenAsNeeded(); // return true if file is open or reopened
+    void DefineVariable(std::string name, bool isScalar,
+                        enum ADIOS_DATATYPES vartype, std::string ldims,
+                        std::string gdims, std::string offs);
+    void WriteVariable(std::string name, bool isScalar,
+                       enum ADIOS_DATATYPES vartype, std::string ldims,
+                       std::string gdims, std::string offs, const void *values);
 };
 
 } // end namespace adios
diff --git a/include/engine/bp/BPFileReader.h b/include/engine/bp/BPFileReader.h
index 0d975e859c2fa58cd5c0a9197a551ca6168c2dbc..a38a9b66e4a637604935cd2c403f5728048ad045 100644
--- a/include/engine/bp/BPFileReader.h
+++ b/include/engine/bp/BPFileReader.h
@@ -24,94 +24,122 @@ class BPFileReader : public Engine
 {
 
 public:
-  /**
-   * Constructor for single BP capsule engine, writes in BP format into a single
-   * heap capsule
-   * @param name unique name given to the engine
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   * @param hostLanguage
-   */
-  BPFileReader(ADIOS &adios, const std::string name,
-               const std::string accessMode, MPI_Comm mpiComm,
-               const Method &method);
-
-  virtual ~BPFileReader() = default;
-
-  Variable<void> *InquireVariable(const std::string name,
-                                  const bool readIn = true);
-  Variable<char> *InquireVariableChar(const std::string name,
-                                      const bool readIn = true);
-  Variable<unsigned char> *InquireVariableUChar(const std::string name,
-                                                const bool readIn = true);
-  Variable<short> *InquireVariableShort(const std::string name,
-                                        const bool readIn = true);
-  Variable<unsigned short> *InquireVariableUShort(const std::string name,
-                                                  const bool readIn = true);
-  Variable<int> *InquireVariableInt(const std::string name,
+    /**
+     * Constructor for single BP capsule engine, writes in BP format into a
+     * single
+     * heap capsule
+     * @param name unique name given to the engine
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     * @param hostLanguage
+     */
+    BPFileReader(ADIOS &adios, const std::string name,
+                 const std::string accessMode, MPI_Comm mpiComm,
+                 const Method &method);
+
+    virtual ~BPFileReader() = default;
+
+    Variable<void> *InquireVariable(const std::string &variableName,
                                     const bool readIn = true);
-  Variable<unsigned int> *InquireVariableUInt(const std::string name,
-                                              const bool readIn = true);
-  Variable<long int> *InquireVariableLInt(const std::string name,
-                                          const bool readIn = true);
-  Variable<unsigned long int> *InquireVariableULInt(const std::string name,
-                                                    const bool readIn = true);
-  Variable<long long int> *InquireVariableLLInt(const std::string name,
-                                                const bool readIn = true);
-  Variable<unsigned long long int> *
-  InquireVariableULLInt(const std::string name, const bool readIn = true);
-  Variable<float> *InquireVariableFloat(const std::string name,
+
+    Variable<char> *InquireVariableChar(const std::string &variableName,
                                         const bool readIn = true);
-  Variable<double> *InquireVariableDouble(const std::string name,
+
+    Variable<unsigned char> *
+    InquireVariableUChar(const std::string &variableName,
+                         const bool readIn = true);
+
+    Variable<short> *InquireVariableShort(const std::string &variableName,
                                           const bool readIn = true);
-  Variable<long double> *InquireVariableLDouble(const std::string name,
+
+    Variable<unsigned short> *
+    InquireVariableUShort(const std::string &variableName,
+                          const bool readIn = true);
+
+    Variable<int> *InquireVariableInt(const std::string &variableName,
+                                      const bool readIn = true);
+
+    Variable<unsigned int> *InquireVariableUInt(const std::string &variableName,
                                                 const bool readIn = true);
-  Variable<std::complex<float>> *
-  InquireVariableCFloat(const std::string name, const bool readIn = true);
-  Variable<std::complex<double>> *
-  InquireVariableCDouble(const std::string name, const bool readIn = true);
-  Variable<std::complex<long double>> *
-  InquireVariableCLDouble(const std::string name, const bool readIn = true);
-
-  /**
-   * Not implemented
-   * @param name
-   * @param readIn
-   * @return
-   */
-  VariableCompound *InquireVariableCompound(const std::string name,
+
+    Variable<long int> *InquireVariableLInt(const std::string &variableName,
                                             const bool readIn = true);
 
-  void Close(const int transportIndex = -1);
+    Variable<unsigned long int> *
+    InquireVariableULInt(const std::string &variableName,
+                         const bool readIn = true);
+
+    Variable<long long int> *
+    InquireVariableLLInt(const std::string &variableName,
+                         const bool readIn = true);
+
+    Variable<unsigned long long int> *
+    InquireVariableULLInt(const std::string &variableName,
+                          const bool readIn = true);
+
+    Variable<float> *InquireVariableFloat(const std::string &variableName,
+                                          const bool readIn = true);
+
+    Variable<double> *InquireVariableDouble(const std::string &variableName,
+                                            const bool readIn = true);
+    Variable<long double> *
+    InquireVariableLDouble(const std::string &variableName,
+                           const bool readIn = true);
+
+    Variable<std::complex<float>> *
+    InquireVariableCFloat(const std::string &variableName,
+                          const bool readIn = true);
+
+    Variable<std::complex<double>> *
+    InquireVariableCDouble(const std::string &variableName,
+                           const bool readIn = true);
+
+    Variable<std::complex<long double>> *
+    InquireVariableCLDouble(const std::string &variableName,
+                            const bool readIn = true);
+
+    /**
+     * Not implemented
+     * @param name
+     * @param readIn
+     * @return
+     */
+    VariableCompound *InquireVariableCompound(const std::string &name,
+                                              const bool readIn = true);
+
+    void Close(const int transportIndex = -1);
 
 private:
-  capsule::STLVector
-      m_Buffer; ///< heap capsule, contains data and metadata buffers
-  // format::BP1Writer m_BP1Writer; ///< format object will provide the required
-  // BP functionality to be applied on m_Buffer and m_Transports
-
-  void Init(); ///< calls InitCapsules and InitTransports based on Method,
-               /// called from constructor
-  void InitCapsules();
-  void InitTransports(); ///< from Transports
-
-  std::string
-  GetMdtmParameter(const std::string parameter,
-                   const std::map<std::string, std::string> &mdtmParameters);
-
-  template <class T>
-  Variable<T> *InquireVariableCommon(const std::string name, const bool readIn)
-  {
-    std::cout << "Hello BPReaderCommon\n";
-
-    // here read variable metadata (dimensions, type, etc.)...then create a
-    // Variable like below:
-    // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" + name, )
-    // return &variable; //return address if success
-    return nullptr; // on failure
-  }
+    capsule::STLVector
+        m_Buffer; ///< heap capsule, contains data and metadata buffers
+    // format::BP1Writer m_BP1Writer; ///< format object will provide the
+    // required
+    // BP functionality to be applied on m_Buffer and m_Transports
+
+    void Init(); ///< calls InitCapsules and InitTransports based on Method,
+                 /// called from constructor
+
+    void InitTransports(); ///< from Transports
+
+    std::string
+    GetMdtmParameter(const std::string parameter,
+                     const std::map<std::string, std::string> &mdtmParameters);
+
+    template <class T>
+    Variable<T> *InquireVariableCommon(const std::string &name,
+                                       const bool readIn)
+    {
+        std::cout << "Hello BPReaderCommon\n";
+
+        // here read variable metadata (dimensions, type, etc.)...then create a
+        // Variable like below:
+        // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" +
+        // name, )
+        // return &variable; //return address if success
+        return nullptr; // on failure
+    }
 };
 
 } // end namespace adios
diff --git a/include/engine/bp/BPFileWriter.h b/include/engine/bp/BPFileWriter.h
index b10e2d0ea22877e9286f9b61c3b774d49d4744cd..74ae04ce816096e62825bf047c5659bdd742fce6 100644
--- a/include/engine/bp/BPFileWriter.h
+++ b/include/engine/bp/BPFileWriter.h
@@ -22,155 +22,164 @@ class BPFileWriter : public Engine
 {
 
 public:
-  /**
-   * Constructor for Writer writes in BP format into a single heap capsule,
-   * manages several transports
-   * @param name unique name given to the engine
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   */
-
-  BPFileWriter(ADIOS &adios, const std::string name,
-               const std::string accessMode, MPI_Comm mpiComm,
-               const Method &method);
-  ~BPFileWriter();
-
-  void Write(Variable<char> &variable, const char *values);
-  void Write(Variable<unsigned char> &variable, const unsigned char *values);
-  void Write(Variable<short> &variable, const short *values);
-  void Write(Variable<unsigned short> &variable, const unsigned short *values);
-  void Write(Variable<int> &variable, const int *values);
-  void Write(Variable<unsigned int> &variable, const unsigned int *values);
-  void Write(Variable<long int> &variable, const long int *values);
-  void Write(Variable<unsigned long int> &variable,
-             const unsigned long int *values);
-  void Write(Variable<long long int> &variable, const long long int *values);
-  void Write(Variable<unsigned long long int> &variable,
-             const unsigned long long int *values);
-  void Write(Variable<float> &variable, const float *values);
-  void Write(Variable<double> &variable, const double *values);
-  void Write(Variable<long double> &variable, const long double *values);
-  void Write(Variable<std::complex<float>> &variable,
-             const std::complex<float> *values);
-  void Write(Variable<std::complex<double>> &variable,
-             const std::complex<double> *values);
-  void Write(Variable<std::complex<long double>> &variable,
-             const std::complex<long double> *values);
-  void Write(VariableCompound &variable, const void *values);
-
-  void Write(const std::string variableName, const char *values);
-  void Write(const std::string variableName, const unsigned char *values);
-  void Write(const std::string variableName, const short *values);
-  void Write(const std::string variableName, const unsigned short *values);
-  void Write(const std::string variableName, const int *values);
-  void Write(const std::string variableName, const unsigned int *values);
-  void Write(const std::string variableName, const long int *values);
-  void Write(const std::string variableName, const unsigned long int *values);
-  void Write(const std::string variableName, const long long int *values);
-  void Write(const std::string variableName,
-             const unsigned long long int *values);
-  void Write(const std::string variableName, const float *values);
-  void Write(const std::string variableName, const double *values);
-  void Write(const std::string variableName, const long double *values);
-  void Write(const std::string variableName, const std::complex<float> *values);
-  void Write(const std::string variableName,
-             const std::complex<double> *values);
-  void Write(const std::string variableName,
-             const std::complex<long double> *values);
-  void Write(const std::string variableName, const void *values);
-
-  void Advance(float timeout_sec = 0.0);
-
-  /**
-   * Closes a single transport or all transports
-   * @param transportIndex, if -1 (default) closes all transports, otherwise it
-   * closes a transport in m_Transport[transportIndex]. In debug mode the latter
-   * is bounds-checked.
-   */
-  void Close(const int transportIndex = -1);
+    /**
+     * Constructor for Writer writes in BP format into a single heap capsule,
+     * manages several transports
+     * @param name unique name given to the engine
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     */
+
+    BPFileWriter(ADIOS &adios, const std::string &name,
+                 const std::string accessMode, MPI_Comm mpiComm,
+                 const Method &method);
+    ~BPFileWriter();
+
+    void Write(Variable<char> &variable, const char *values);
+    void Write(Variable<unsigned char> &variable, const unsigned char *values);
+    void Write(Variable<short> &variable, const short *values);
+    void Write(Variable<unsigned short> &variable,
+               const unsigned short *values);
+    void Write(Variable<int> &variable, const int *values);
+    void Write(Variable<unsigned int> &variable, const unsigned int *values);
+    void Write(Variable<long int> &variable, const long int *values);
+    void Write(Variable<unsigned long int> &variable,
+               const unsigned long int *values);
+    void Write(Variable<long long int> &variable, const long long int *values);
+    void Write(Variable<unsigned long long int> &variable,
+               const unsigned long long int *values);
+    void Write(Variable<float> &variable, const float *values);
+    void Write(Variable<double> &variable, const double *values);
+    void Write(Variable<long double> &variable, const long double *values);
+    void Write(Variable<std::complex<float>> &variable,
+               const std::complex<float> *values);
+    void Write(Variable<std::complex<double>> &variable,
+               const std::complex<double> *values);
+    void Write(Variable<std::complex<long double>> &variable,
+               const std::complex<long double> *values);
+    void Write(VariableCompound &variable, const void *values);
+
+    void Write(const std::string &variableName, const char *values);
+    void Write(const std::string &variableName, const unsigned char *values);
+    void Write(const std::string &variableName, const short *values);
+    void Write(const std::string &variableName, const unsigned short *values);
+    void Write(const std::string &variableName, const int *values);
+    void Write(const std::string &variableName, const unsigned int *values);
+    void Write(const std::string &variableName, const long int *values);
+    void Write(const std::string &variableName,
+               const unsigned long int *values);
+    void Write(const std::string &variableName, const long long int *values);
+    void Write(const std::string &variableName,
+               const unsigned long long int *values);
+    void Write(const std::string &variableName, const float *values);
+    void Write(const std::string &variableName, const double *values);
+    void Write(const std::string &variableName, const long double *values);
+    void Write(const std::string &variableName,
+               const std::complex<float> *values);
+    void Write(const std::string &variableName,
+               const std::complex<double> *values);
+    void Write(const std::string &variableName,
+               const std::complex<long double> *values);
+    void Write(const std::string &variableName, const void *values);
+
+    void Advance(float timeout_sec = 0.0);
+
+    /**
+     * Closes a single transport or all transports
+     * @param transportIndex, if -1 (default) closes all transports, otherwise
+     * it
+     * closes a transport in m_Transport[transportIndex]. In debug mode the
+     * latter
+     * is bounds-checked.
+     */
+    void Close(const int transportIndex = -1);
 
 private:
-  capsule::STLVector m_Buffer;   ///< heap capsule using STL std::vector<char>
-  format::BP1Writer m_BP1Writer; ///< format object will provide the required BP
-                                 /// functionality to be applied on m_Buffer and
-  /// m_Transports
-  format::BP1MetadataSet m_MetadataSet; ///< metadata set accompanying the heap
-                                        /// buffer data in bp format. Needed by
-  /// m_BP1Writer
-  format::BP1Aggregator m_BP1Aggregator;
-
-  bool m_IsFirstClose = true; ///< set to false after first Close is reached so
-                              /// metadata doesn't have to be accommodated for a
-  /// subsequent Close
-  std::size_t m_MaxBufferSize; ///< maximum allowed memory to be allocated
-  float m_GrowthFactor = 1.5;  ///< capsule memory growth factor, new_memory =
-                               /// m_GrowthFactor * current_memory
-
-  bool m_TransportFlush = false; ///< true: due to buffer overflow
-
-  bool m_CloseProcessGroup = false; ///< set to true if advance is called, this
-  /// prevents flattening the data and metadata
-  /// in Close
-
-  void Init();
-  void InitParameters();
-  void InitTransports();
-  void InitProcessGroup();
-
-  void WriteProcessGroupIndex();
-
-  /**
-   * Common function for primitive (including std::complex) writes
-   * @param group
-   * @param variableName
-   * @param variable
-   */
-  template <class T>
-  void WriteVariableCommon(Variable<T> &variable, const T *values)
-  {
-    if (m_MetadataSet.Log.IsActive == true)
-      m_MetadataSet.Log.Timers[0].SetInitialTime();
-
-    // set variable
-    variable.m_AppValues = values;
-    m_WrittenVariables.insert(variable.m_Name);
-
-    // if first timestep Write
-    if (m_MetadataSet.DataPGIsOpen == false) // create a new pg index
-      WriteProcessGroupIndex();
-
-    // pre-calculate new metadata and payload sizes
-    //        m_TransportFlush = CheckBufferAllocation(
-    //        m_BP1Writer.GetVariableIndexSize( variable ) +
-    //        variable.PayLoadSize(),
-    //                                                  m_GrowthFactor,
-    //                                                  m_MaxBufferSize,
-    //                                                  m_Buffer.m_Data );
-
-    // WRITE INDEX to data buffer and metadata structure (in memory)//
-    m_BP1Writer.WriteVariableMetadata(variable, m_Buffer, m_MetadataSet);
-
-    if (m_TransportFlush == true) // in batches
+    capsule::STLVector m_Buffer; ///< heap capsule using STL std::vector<char>
+    format::BP1Writer
+        m_BP1Writer; ///< format object will provide the required BP
+                     /// functionality to be applied on m_Buffer and
+    /// m_Transports
+    format::BP1MetadataSet
+        m_MetadataSet; ///< metadata set accompanying the heap
+                       /// buffer data in bp format. Needed by
+    /// m_BP1Writer
+    format::BP1Aggregator m_BP1Aggregator;
+
+    bool m_IsFirstClose =
+        true; ///< set to false after first Close is reached so
+              /// metadata doesn't have to be accommodated for a
+    /// subsequent Close
+    std::size_t m_MaxBufferSize; ///< maximum allowed memory to be allocated
+    float m_GrowthFactor = 1.5;  ///< capsule memory growth factor, new_memory =
+                                 /// m_GrowthFactor * current_memory
+
+    bool m_TransportFlush = false; ///< true: due to buffer overflow
+
+    bool m_CloseProcessGroup =
+        false; ///< set to true if advance is called, this
+    /// prevents flattening the data and metadata
+    /// in Close
+
+    void Init();
+    void InitParameters();
+    void InitTransports();
+    void InitProcessGroup();
+
+    void WriteProcessGroupIndex();
+
+    /**
+     * Common function for primitive (including std::complex) writes
+     * @param group
+     * @param variableName
+     * @param variable
+     */
+    template <class T>
+    void WriteVariableCommon(Variable<T> &variable, const T *values)
     {
-      // write pg index
-
-      // flush to transports
-
-      // reset relative positions to zero, update absolute position
-    }
-    else // Write data to buffer
-    {
-      m_BP1Writer.WriteVariablePayload(variable, m_Buffer, m_nThreads);
+        if (m_MetadataSet.Log.IsActive == true)
+            m_MetadataSet.Log.Timers[0].SetInitialTime();
+
+        // set variable
+        variable.m_AppValues = values;
+        m_WrittenVariables.insert(variable.m_Name);
+
+        // if first timestep Write
+        if (m_MetadataSet.DataPGIsOpen == false) // create a new pg index
+            WriteProcessGroupIndex();
+
+        // pre-calculate new metadata and payload sizes
+        //        m_TransportFlush = CheckBufferAllocation(
+        //        m_BP1Writer.GetVariableIndexSize( variable ) +
+        //        variable.PayLoadSize(),
+        //                                                  m_GrowthFactor,
+        //                                                  m_MaxBufferSize,
+        //                                                  m_Buffer.m_Data );
+
+        // WRITE INDEX to data buffer and metadata structure (in memory)//
+        m_BP1Writer.WriteVariableMetadata(variable, m_Buffer, m_MetadataSet);
+
+        if (m_TransportFlush == true) // in batches
+        {
+            // write pg index
+
+            // flush to transports
+
+            // reset relative positions to zero, update absolute position
+        }
+        else // Write data to buffer
+        {
+            m_BP1Writer.WriteVariablePayload(variable, m_Buffer, m_nThreads);
+        }
+
+        variable.m_AppValues =
+            nullptr; // setting pointer to null as not needed after write
+
+        if (m_MetadataSet.Log.IsActive == true)
+            m_MetadataSet.Log.Timers[0].SetTime();
     }
-
-    variable.m_AppValues =
-        nullptr; // setting pointer to null as not needed after write
-
-    if (m_MetadataSet.Log.IsActive == true)
-      m_MetadataSet.Log.Timers[0].SetTime();
-  }
 };
 
 } // end namespace adios
diff --git a/include/engine/dataman/DataManReader.h b/include/engine/dataman/DataManReader.h
index e82fbfda481fc91ef83417af231515a23b4a1c96..378d1d900b6e78f868ae6d40bdff818bd11fb5ba 100644
--- a/include/engine/dataman/DataManReader.h
+++ b/include/engine/dataman/DataManReader.h
@@ -14,7 +14,7 @@
 #include <iostream> //std::cout << Needs to go
 
 #include "core/Engine.h"
-#include "format/BP1Writer.h"
+#include "utilities/format/bp1/BP1Writer.h"
 
 // supported capsules
 #include "capsule/heap/STLVector.h"
@@ -28,112 +28,116 @@ class DataManReader : public Engine
 {
 
 public:
-  /**
-   * Constructor for dataman engine Reader for WAN communications
-   * @param adios
-   * @param name
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   * @param nthreads
-   */
-  DataManReader(ADIOS &adios, const std::string name,
-                const std::string accessMode, MPI_Comm mpiComm,
-                const Method &method);
-
-  ~DataManReader();
-
-  /**
-   * Set callback function from user application
-   * @param callback function (get) provided by the user to be applied in
-   * DataMan
-   */
-  void SetCallBack(std::function<void(const void *, std::string, std::string,
-                                      std::string, Dims)>
-                       callback);
-
-  Variable<void> *InquireVariable(const std::string name,
-                                  const bool readIn = true);
-  Variable<char> *InquireVariableChar(const std::string name,
-                                      const bool readIn = true);
-  Variable<unsigned char> *InquireVariableUChar(const std::string name,
-                                                const bool readIn = true);
-  Variable<short> *InquireVariableShort(const std::string name,
+    /**
+     * Constructor for dataman engine Reader for WAN communications
+     * @param adios
+     * @param name
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     * @param nthreads
+     */
+    DataManReader(ADIOS &adios, const std::string name,
+                  const std::string accessMode, MPI_Comm mpiComm,
+                  const Method &method);
+
+    ~DataManReader();
+
+    /**
+     * Set callback function from user application
+     * @param callback function (get) provided by the user to be applied in
+     * DataMan
+     */
+    void SetCallBack(std::function<void(const void *, std::string, std::string,
+                                        std::string, Dims)>
+                         callback);
+
+    Variable<void> *InquireVariable(const std::string name,
+                                    const bool readIn = true);
+    Variable<char> *InquireVariableChar(const std::string name,
                                         const bool readIn = true);
-  Variable<unsigned short> *InquireVariableUShort(const std::string name,
+    Variable<unsigned char> *InquireVariableUChar(const std::string name,
                                                   const bool readIn = true);
-  Variable<int> *InquireVariableInt(const std::string name,
-                                    const bool readIn = true);
-  Variable<unsigned int> *InquireVariableUInt(const std::string name,
-                                              const bool readIn = true);
-  Variable<long int> *InquireVariableLInt(const std::string name,
+    Variable<short> *InquireVariableShort(const std::string name,
                                           const bool readIn = true);
-  Variable<unsigned long int> *InquireVariableULInt(const std::string name,
+    Variable<unsigned short> *InquireVariableUShort(const std::string name,
                                                     const bool readIn = true);
-  Variable<long long int> *InquireVariableLLInt(const std::string name,
+    Variable<int> *InquireVariableInt(const std::string name,
+                                      const bool readIn = true);
+    Variable<unsigned int> *InquireVariableUInt(const std::string name,
                                                 const bool readIn = true);
-  Variable<unsigned long long int> *
-  InquireVariableULLInt(const std::string name, const bool readIn = true);
-  Variable<float> *InquireVariableFloat(const std::string name,
-                                        const bool readIn = true);
-  Variable<double> *InquireVariableDouble(const std::string name,
+    Variable<long int> *InquireVariableLInt(const std::string name,
+                                            const bool readIn = true);
+    Variable<unsigned long int> *InquireVariableULInt(const std::string name,
+                                                      const bool readIn = true);
+    Variable<long long int> *InquireVariableLLInt(const std::string name,
+                                                  const bool readIn = true);
+    Variable<unsigned long long int> *
+    InquireVariableULLInt(const std::string name, const bool readIn = true);
+    Variable<float> *InquireVariableFloat(const std::string name,
                                           const bool readIn = true);
-  Variable<long double> *InquireVariableLDouble(const std::string name,
-                                                const bool readIn = true);
-  Variable<std::complex<float>> *
-  InquireVariableCFloat(const std::string name, const bool readIn = true);
-  Variable<std::complex<double>> *
-  InquireVariableCDouble(const std::string name, const bool readIn = true);
-  Variable<std::complex<long double>> *
-  InquireVariableCLDouble(const std::string name, const bool readIn = true);
-
-  /**
-   * Not implemented
-   * @param name
-   * @param readIn
-   * @return
-   */
-  VariableCompound *InquireVariableCompound(const std::string name,
+    Variable<double> *InquireVariableDouble(const std::string name,
                                             const bool readIn = true);
+    Variable<long double> *InquireVariableLDouble(const std::string name,
+                                                  const bool readIn = true);
+    Variable<std::complex<float>> *
+    InquireVariableCFloat(const std::string name, const bool readIn = true);
+    Variable<std::complex<double>> *
+    InquireVariableCDouble(const std::string name, const bool readIn = true);
+    Variable<std::complex<long double>> *
+    InquireVariableCLDouble(const std::string name, const bool readIn = true);
+
+    /**
+     * Not implemented
+     * @param name
+     * @param readIn
+     * @return
+     */
+    VariableCompound *InquireVariableCompound(const std::string name,
+                                              const bool readIn = true);
 
-  void Close(const int transportIndex = -1);
+    void Close(const int transportIndex = -1);
 
 private:
-  capsule::STLVector
-      m_Buffer; ///< heap capsule, contains data and metadata buffers
-  format::BP1Writer m_BP1Writer; ///< format object will provide the required BP
-                                 /// functionality to be applied on m_Buffer and
-  /// m_Transports
-
-  bool m_DoRealTime = false;
-  DataManager m_Man;
-  std::function<void(const void *, std::string, std::string, std::string, Dims)>
-      m_CallBack; ///< call back function
-
-  void Init(); ///< calls InitCapsules and InitTransports based on Method,
-               /// called from constructor
-  void InitCapsules();
-  void InitTransports(); ///< from Transports
-
-  std::string
-  GetMdtmParameter(const std::string parameter,
-                   const std::map<std::string, std::string> &mdtmParameters);
-
-  template <class T>
-  Variable<T> *InquireVariableCommon(const std::string name, const bool readIn)
-  {
-    std::cout << "I am hooked to the DataMan library\n";
-    std::cout << "Hello DatamanReader from rank " << m_RankMPI << "\n";
-    std::cout << "Trying to read variable " << name
-              << " from one of the variables coming from a WAN transport\n";
-
-    // here read variable metadata (dimensions, type, etc.)...then create a
-    // Variable like below:
-    // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" + name, )
-    // return &variable; //return address if success
-    return nullptr; // on failure
-  }
+    capsule::STLVector
+        m_Buffer; ///< heap capsule, contains data and metadata buffers
+    format::BP1Writer
+        m_BP1Writer; ///< format object will provide the required BP
+                     /// functionality to be applied on m_Buffer and
+    /// m_Transports
+
+    bool m_DoRealTime = false;
+    DataManager m_Man;
+    std::function<void(const void *, std::string, std::string, std::string,
+                       Dims)>
+        m_CallBack; ///< call back function
+
+    void Init(); ///< calls InitCapsules and InitTransports based on Method,
+                 /// called from constructor
+    void InitCapsules();
+    void InitTransports(); ///< from Transports
+
+    std::string
+    GetMdtmParameter(const std::string parameter,
+                     const std::map<std::string, std::string> &mdtmParameters);
+
+    template <class T>
+    Variable<T> *InquireVariableCommon(const std::string name,
+                                       const bool readIn)
+    {
+        std::cout << "I am hooked to the DataMan library\n";
+        std::cout << "Hello DatamanReader from rank " << m_RankMPI << "\n";
+        std::cout << "Trying to read variable " << name
+                  << " from one of the variables coming from a WAN transport\n";
+
+        // here read variable metadata (dimensions, type, etc.)...then create a
+        // Variable like below:
+        // Variable<T>& variable = m_ADIOS.DefineVariable<T>( m_Name + "/" +
+        // name, )
+        // return &variable; //return address if success
+        return nullptr; // on failure
+    }
 };
 
 } // end namespace
diff --git a/include/engine/dataman/DataManWriter.h b/include/engine/dataman/DataManWriter.h
index 5eafb3e7ec4247ada6ff60a94691b838ee3c3f17..98aff6b98c04bd0b0633f7af9892862684a1161c 100644
--- a/include/engine/dataman/DataManWriter.h
+++ b/include/engine/dataman/DataManWriter.h
@@ -14,8 +14,10 @@
 #include <iostream> //std::cout must be removed, only used for hello example
 #include <unistd.h> //sleep must be removed
 
-#include "../../utilities/format/bp1/BP1Writer.h"
 #include "core/Engine.h"
+#include "utilities/format/bp1/BP1Writer.h"
+
+// supported capsules
 #include "capsule/heap/STLVector.h"
 
 #include "DataManager.h" //here comes your DataMan header
@@ -27,149 +29,154 @@ class DataManWriter : public Engine
 {
 
 public:
-  /**
-   * Constructor for dataman engine Writer for WAN communications
-   * @param adios
-   * @param name unique name given to the engine
-   * @param accessMode
-   * @param mpiComm
-   * @param method
-   * @param debugMode
-   * @param nthreads
-   */
-  DataManWriter(ADIOS &adios, const std::string name,
-                const std::string accessMode, MPI_Comm mpiComm,
-                const Method &method, const IOMode iomode,
-                const float timeout_sec, const bool debugMode = false,
-                const unsigned int nthreads = 1);
-
-  ~DataManWriter();
-
-  void SetCallBack(std::function<void(const void *, std::string, std::string,
-                                      std::string, Dims)>
-                       callback);
-
-  void Write(Variable<char> &variable, const char *values);
-  void Write(Variable<unsigned char> &variable, const unsigned char *values);
-  void Write(Variable<short> &variable, const short *values);
-  void Write(Variable<unsigned short> &variable, const unsigned short *values);
-  void Write(Variable<int> &variable, const int *values);
-  void Write(Variable<unsigned int> &variable, const unsigned int *values);
-  void Write(Variable<long int> &variable, const long int *values);
-  void Write(Variable<unsigned long int> &variable,
-             const unsigned long int *values);
-  void Write(Variable<long long int> &variable, const long long int *values);
-  void Write(Variable<unsigned long long int> &variable,
-             const unsigned long long int *values);
-  void Write(Variable<float> &variable, const float *values);
-  void Write(Variable<double> &variable, const double *values);
-  void Write(Variable<long double> &variable, const long double *values);
-  void Write(Variable<std::complex<float>> &variable,
-             const std::complex<float> *values);
-  void Write(Variable<std::complex<double>> &variable,
-             const std::complex<double> *values);
-  void Write(Variable<std::complex<long double>> &variable,
-             const std::complex<long double> *values);
-
-  void Write(const std::string variableName, const char *values);
-  void Write(const std::string variableName, const unsigned char *values);
-  void Write(const std::string variableName, const short *values);
-  void Write(const std::string variableName, const unsigned short *values);
-  void Write(const std::string variableName, const int *values);
-  void Write(const std::string variableName, const unsigned int *values);
-  void Write(const std::string variableName, const long int *values);
-  void Write(const std::string variableName, const unsigned long int *values);
-  void Write(const std::string variableName, const long long int *values);
-  void Write(const std::string variableName,
-             const unsigned long long int *values);
-  void Write(const std::string variableName, const float *values);
-  void Write(const std::string variableName, const double *values);
-  void Write(const std::string variableName, const long double *values);
-  void Write(const std::string variableName, const std::complex<float> *values);
-  void Write(const std::string variableName,
-             const std::complex<double> *values);
-  void Write(const std::string variableName,
-             const std::complex<long double> *values);
-
-  void Close(const int transportIndex = -1);
+    /**
+     * Constructor for dataman engine Writer for WAN communications
+     * @param adios
+     * @param name unique name given to the engine
+     * @param accessMode
+     * @param mpiComm
+     * @param method
+     * @param debugMode
+     * @param nthreads
+     */
+    DataManWriter(ADIOS &adios, const std::string name,
+                  const std::string accessMode, MPI_Comm mpiComm,
+                  const Method &method);
+
+    ~DataManWriter();
+
+    void SetCallBack(std::function<void(const void *, std::string, std::string,
+                                        std::string, Dims)>
+                         callback);
+
+    void Write(Variable<char> &variable, const char *values);
+    void Write(Variable<unsigned char> &variable, const unsigned char *values);
+    void Write(Variable<short> &variable, const short *values);
+    void Write(Variable<unsigned short> &variable,
+               const unsigned short *values);
+    void Write(Variable<int> &variable, const int *values);
+    void Write(Variable<unsigned int> &variable, const unsigned int *values);
+    void Write(Variable<long int> &variable, const long int *values);
+    void Write(Variable<unsigned long int> &variable,
+               const unsigned long int *values);
+    void Write(Variable<long long int> &variable, const long long int *values);
+    void Write(Variable<unsigned long long int> &variable,
+               const unsigned long long int *values);
+    void Write(Variable<float> &variable, const float *values);
+    void Write(Variable<double> &variable, const double *values);
+    void Write(Variable<long double> &variable, const long double *values);
+    void Write(Variable<std::complex<float>> &variable,
+               const std::complex<float> *values);
+    void Write(Variable<std::complex<double>> &variable,
+               const std::complex<double> *values);
+    void Write(Variable<std::complex<long double>> &variable,
+               const std::complex<long double> *values);
+
+    void Write(const std::string &variableName, const char *values);
+    void Write(const std::string &variableName, const unsigned char *values);
+    void Write(const std::string &variableName, const short *values);
+    void Write(const std::string &variableName, const unsigned short *values);
+    void Write(const std::string &variableName, const int *values);
+    void Write(const std::string &variableName, const unsigned int *values);
+    void Write(const std::string &variableName, const long int *values);
+    void Write(const std::string &variableName,
+               const unsigned long int *values);
+    void Write(const std::string &variableName, const long long int *values);
+    void Write(const std::string &variableName,
+               const unsigned long long int *values);
+    void Write(const std::string &variableName, const float *values);
+    void Write(const std::string &variableName, const double *values);
+    void Write(const std::string &variableName, const long double *values);
+    void Write(const std::string &variableName,
+               const std::complex<float> *values);
+    void Write(const std::string &variableName,
+               const std::complex<double> *values);
+    void Write(const std::string &variableName,
+               const std::complex<long double> *values);
+
+    void Close(const int transportIndex = -1);
 
 private:
-  capsule::STLVector
-      m_Buffer; ///< heap capsule, contains data and metadata buffers
-  format::BP1Writer m_BP1Writer; ///< format object will provide the required BP
-                                 /// functionality to be applied on m_Buffer and
-  /// m_Transports
-
-  bool m_DoRealTime = false;
-  bool m_DoMonitor = false;
-  DataManager m_Man;
-  std::function<void(const void *, std::string, std::string, std::string, Dims)>
-      m_CallBack; ///< call back function
-
-  void Init(); ///< calls InitCapsules and InitTransports based on Method,
-               /// called from constructor
-  void InitCapsules();
-  void InitTransports(); ///< from Transports
-
-  /**
-   * From transport Mdtm in m_Method
-   * @param parameter must be an accepted parameter
-   * @param mdtmParameters
-   * @return value either returns user-defined from "parameter=value" or a
-   * default
-   */
-  std::string
-  GetMdtmParameter(const std::string parameter,
-                   const std::map<std::string, std::string> &mdtmParameters);
-
-  template <class T>
-  void WriteVariableCommon(Variable<T> &variable, const T *values)
-  {
-    // here comes your magic at Writing now variable.m_UserValues has the data
-    // passed by the user
-    // set variable
-    variable.m_AppValues = values;
-    m_WrittenVariables.insert(variable.m_Name);
-
-    // This part will go away, this is just to monitor variables per rank
-
-    json jmsg;
-    jmsg["doid"] = m_Name;
-    jmsg["var"] = variable.m_Name;
-    jmsg["dtype"] = GetType<T>();
-    jmsg["putshape"] = variable.m_Dimensions;
-    if (variable.m_GlobalDimensions.size() == 0)
-      variable.m_GlobalDimensions = variable.m_Dimensions;
-    jmsg["varshape"] = variable.m_GlobalDimensions;
-    if (variable.m_GlobalOffsets.size() == 0)
-      variable.m_GlobalOffsets.assign(variable.m_Dimensions.size(), 0);
-    jmsg["offset"] = variable.m_GlobalOffsets;
-    jmsg["timestep"] = 0;
-    m_Man.put(values, jmsg);
-
-    if (m_DoMonitor)
+    capsule::STLVector
+        m_Buffer; ///< heap capsule, contains data and metadata buffers
+    format::BP1Writer
+        m_BP1Writer; ///< format object will provide the required BP
+                     /// functionality to be applied on m_Buffer and
+    /// m_Transports
+
+    bool m_DoRealTime = false;
+    bool m_DoMonitor = false;
+    DataManager m_Man;
+    std::function<void(const void *, std::string, std::string, std::string,
+                       Dims)>
+        m_CallBack; ///< call back function
+
+    void Init(); ///< calls InitCapsules and InitTransports based on Method,
+                 /// called from constructor
+    void InitCapsules();
+    void InitTransports(); ///< from Transports
+
+    /**
+     * From transport Mdtm in m_Method
+     * @param parameter must be an accepted parameter
+     * @param mdtmParameters
+     * @return value either returns user-defined from "parameter=value" or a
+     * default
+     */
+    std::string
+    GetMdtmParameter(const std::string parameter,
+                     const std::map<std::string, std::string> &mdtmParameters);
+
+    template <class T>
+    void WriteVariableCommon(Variable<T> &variable, const T *values)
     {
-      MPI_Barrier(m_MPIComm);
-      std::cout << "I am hooked to the DataMan library\n";
-      std::cout << "putshape " << variable.m_Dimensions.size() << "\n";
-      std::cout << "varshape " << variable.m_GlobalDimensions.size() << "\n";
-      std::cout << "offset " << variable.m_GlobalOffsets.size() << "\n";
-      for (int i = 0; i < m_SizeMPI; ++i)
-      {
-        if (i == m_RankMPI)
-        {
-          std::cout << "Rank: " << m_RankMPI << "\n";
-          variable.Monitor(std::cout);
-          std::cout << std::endl;
-        }
-        else
+        // here comes your magic at Writing now variable.m_UserValues has the
+        // data
+        // passed by the user
+        // set variable
+        variable.m_AppValues = values;
+        m_WrittenVariables.insert(variable.m_Name);
+
+        // This part will go away, this is just to monitor variables per rank
+
+        json jmsg;
+        jmsg["doid"] = m_Name;
+        jmsg["var"] = variable.m_Name;
+        jmsg["dtype"] = GetType<T>();
+        jmsg["putshape"] = variable.m_Dimensions;
+        if (variable.m_GlobalDimensions.size() == 0)
+            variable.m_GlobalDimensions = variable.m_Dimensions;
+        jmsg["varshape"] = variable.m_GlobalDimensions;
+        if (variable.m_GlobalOffsets.size() == 0)
+            variable.m_GlobalOffsets.assign(variable.m_Dimensions.size(), 0);
+        jmsg["offset"] = variable.m_GlobalOffsets;
+        jmsg["timestep"] = 0;
+        m_Man.put(values, jmsg);
+
+        if (m_DoMonitor)
         {
-          sleep(1);
+            MPI_Barrier(m_MPIComm);
+            std::cout << "I am hooked to the DataMan library\n";
+            std::cout << "putshape " << variable.m_Dimensions.size() << endl;
+            std::cout << "varshape " << variable.m_GlobalDimensions.size()
+                      << endl;
+            std::cout << "offset " << variable.m_GlobalOffsets.size() << endl;
+            for (int i = 0; i < m_SizeMPI; ++i)
+            {
+                if (i == m_RankMPI)
+                {
+                    std::cout << "Rank: " << m_RankMPI << "\n";
+                    variable.Monitor(std::cout);
+                    std::cout << std::endl;
+                }
+                else
+                {
+                    sleep(1);
+                }
+            }
+            MPI_Barrier(m_MPIComm);
         }
-      }
-      MPI_Barrier(m_MPIComm);
     }
-  }
 };
 
 } // end namespace adios
diff --git a/include/functions/adiosTemplates.h b/include/functions/adiosTemplates.h
index 249bebf32393497319372466611b0347b6b40839..a1a7a2441231f0beca474d4d0f39bfa213beb44c 100644
--- a/include/functions/adiosTemplates.h
+++ b/include/functions/adiosTemplates.h
@@ -27,56 +27,95 @@ namespace adios
  * Get the primitive type in a string from a template
  * @return if T is a char, returns string = "char"
  */
-template <class T> inline std::string GetType() noexcept { return "compound"; }
-template <> inline std::string GetType<void>() noexcept { return "unknown"; }
-template <> inline std::string GetType<char>() noexcept { return "char"; }
-template <> inline std::string GetType<unsigned char>() noexcept
+template <class T>
+inline std::string GetType() noexcept
+{
+    return "compound";
+}
+template <>
+inline std::string GetType<void>() noexcept
+{
+    return "unknown";
+}
+template <>
+inline std::string GetType<char>() noexcept
+{
+    return "char";
+}
+template <>
+inline std::string GetType<unsigned char>() noexcept
+{
+    return "unsigned char";
+}
+template <>
+inline std::string GetType<short>() noexcept
+{
+    return "short";
+}
+template <>
+inline std::string GetType<unsigned short>() noexcept
+{
+    return "unsigned short";
+}
+template <>
+inline std::string GetType<int>() noexcept
 {
-  return "unsigned char";
+    return "int";
 }
-template <> inline std::string GetType<short>() noexcept { return "short"; }
-template <> inline std::string GetType<unsigned short>() noexcept
+template <>
+inline std::string GetType<unsigned int>() noexcept
 {
-  return "unsigned short";
+    return "unsigned int";
 }
-template <> inline std::string GetType<int>() noexcept { return "int"; }
-template <> inline std::string GetType<unsigned int>() noexcept
+template <>
+inline std::string GetType<long int>() noexcept
 {
-  return "unsigned int";
+    return "long int";
 }
-template <> inline std::string GetType<long int>() noexcept
+template <>
+inline std::string GetType<unsigned long int>() noexcept
 {
-  return "long int";
+    return "unsigned long int";
 }
-template <> inline std::string GetType<unsigned long int>() noexcept
+template <>
+inline std::string GetType<long long int>() noexcept
 {
-  return "unsigned long int";
+    return "long long int";
 }
-template <> inline std::string GetType<long long int>() noexcept
+template <>
+inline std::string GetType<unsigned long long int>() noexcept
 {
-  return "long long int";
+    return "unsigned long long int";
 }
-template <> inline std::string GetType<unsigned long long int>() noexcept
+template <>
+inline std::string GetType<float>() noexcept
 {
-  return "unsigned long long int";
+    return "float";
 }
-template <> inline std::string GetType<float>() noexcept { return "float"; }
-template <> inline std::string GetType<double>() noexcept { return "double"; }
-template <> inline std::string GetType<long double>() noexcept
+template <>
+inline std::string GetType<double>() noexcept
 {
-  return "long double";
+    return "double";
 }
-template <> inline std::string GetType<std::complex<float>>() noexcept
+template <>
+inline std::string GetType<long double>() noexcept
 {
-  return "float complex";
+    return "long double";
 }
-template <> inline std::string GetType<std::complex<double>>() noexcept
+template <>
+inline std::string GetType<std::complex<float>>() noexcept
 {
-  return "double complex";
+    return "float complex";
 }
-template <> inline std::string GetType<std::complex<long double>>() noexcept
+template <>
+inline std::string GetType<std::complex<double>>() noexcept
 {
-  return "long double complex";
+    return "double complex";
+}
+template <>
+inline std::string GetType<std::complex<long double>>() noexcept
+{
+    return "long double complex";
 }
 
 /**
@@ -92,15 +131,15 @@ bool IsTypeAlias(
     const std::string type,
     const std::map<std::string, std::set<std::string>> &aliases) noexcept
 {
-  if (type == GetType<T>()) // most of the time we will pass the same type,
-                            // which is a key in aliases
-    return true;
+    if (type == GetType<T>()) // most of the time we will pass the same type,
+                              // which is a key in aliases
+        return true;
 
-  bool isAlias = false;
-  if (aliases.at(GetType<T>()).count(type) == 1)
-    isAlias = true;
+    bool isAlias = false;
+    if (aliases.at(GetType<T>()).count(type) == 1)
+        isAlias = true;
 
-  return isAlias;
+    return isAlias;
 }
 
 /**
@@ -115,20 +154,20 @@ template <class T>
 inline void GetMinMax(const T *values, const std::size_t size, T &min, T &max,
                       const unsigned int nthreads = 1) noexcept
 {
-  min = values[0];
-  max = min;
+    min = values[0];
+    max = min;
 
-  for (std::size_t i = 1; i < size; ++i)
-  {
-    if (values[i] < min)
+    for (std::size_t i = 1; i < size; ++i)
     {
-      min = values[i];
-      continue;
-    }
+        if (values[i] < min)
+        {
+            min = values[i];
+            continue;
+        }
 
-    if (values[i] > max)
-      max = values[i];
-  }
+        if (values[i] > max)
+            max = values[i];
+    }
 }
 
 /**
@@ -145,27 +184,27 @@ inline void GetMinMax(const std::complex<T> *values, const std::size_t size,
                       T &min, T &max, const unsigned int nthreads = 1) noexcept
 {
 
-  min = std::norm(values[0]);
-  max = min;
-
-  for (std::size_t i = 1; i < size; ++i)
-  {
-    T norm = std::norm(values[i]);
+    min = std::norm(values[0]);
+    max = min;
 
-    if (norm < min)
+    for (std::size_t i = 1; i < size; ++i)
     {
-      min = norm;
-      continue;
-    }
+        T norm = std::norm(values[i]);
 
-    if (norm > max)
-    {
-      max = norm;
+        if (norm < min)
+        {
+            min = norm;
+            continue;
+        }
+
+        if (norm > max)
+        {
+            max = norm;
+        }
     }
-  }
 
-  min = std::sqrt(min);
-  max = std::sqrt(max);
+    min = std::sqrt(min);
+    max = std::sqrt(max);
 }
 
 /**
@@ -179,49 +218,49 @@ template <class T, class U>
 void MemcpyThreads(T *destination, const U *source, std::size_t count,
                    const unsigned int nthreads = 1)
 {
-  // do not decompose tasks to less than 4MB pieces
-  const std::size_t minBlockSize = 4194304;
-  const std::size_t maxNThreads =
-      std::max((std::size_t)nthreads, count / minBlockSize);
+    // do not decompose tasks to less than 4MB pieces
+    const std::size_t minBlockSize = 4194304;
+    const std::size_t maxNThreads =
+        std::max((std::size_t)nthreads, count / minBlockSize);
 
-  if (maxNThreads == 1)
-  {
-    std::memcpy(destination, source, count);
-    return;
-  }
+    if (maxNThreads == 1)
+    {
+        std::memcpy(destination, source, count);
+        return;
+    }
 
-  const std::size_t stride = count / maxNThreads;
-  const std::size_t remainder = count % maxNThreads;
-  const std::size_t last = stride + remainder;
+    const std::size_t stride = count / maxNThreads;
+    const std::size_t remainder = count % maxNThreads;
+    const std::size_t last = stride + remainder;
 
-  std::vector<std::thread> memcpyThreads;
-  memcpyThreads.reserve(maxNThreads);
+    std::vector<std::thread> memcpyThreads;
+    memcpyThreads.reserve(maxNThreads);
 
-  for (unsigned int t = 0; t < maxNThreads; ++t)
-  {
-    const size_t initialDestination = stride * t / sizeof(T);
-    const size_t initialSource = stride * t / sizeof(U);
+    for (unsigned int t = 0; t < maxNThreads; ++t)
+    {
+        const size_t initialDestination = stride * t / sizeof(T);
+        const size_t initialSource = stride * t / sizeof(U);
 
-    if (t == maxNThreads - 1)
-      memcpyThreads.push_back(std::thread(std::memcpy,
-                                          &destination[initialDestination],
-                                          &source[initialSource], last));
-    else
-      memcpyThreads.push_back(std::thread(std::memcpy,
-                                          &destination[initialDestination],
-                                          &source[initialSource], stride));
-  }
-  // Now join the threads (is this really needed?)
-  for (auto &thread : memcpyThreads)
-    thread.join();
+        if (t == maxNThreads - 1)
+            memcpyThreads.push_back(
+                std::thread(std::memcpy, &destination[initialDestination],
+                            &source[initialSource], last));
+        else
+            memcpyThreads.push_back(
+                std::thread(std::memcpy, &destination[initialDestination],
+                            &source[initialSource], stride));
+    }
+    // Now join the threads (is this really needed?)
+    for (auto &thread : memcpyThreads)
+        thread.join();
 }
 
 template <class T>
 void MemcpyToBuffer(std::vector<char> &raw, std::size_t &position,
                     const T *source, std::size_t size) noexcept
 {
-  std::memcpy(&raw[position], source, size);
-  position += size;
+    std::memcpy(&raw[position], source, size);
+    position += size;
 }
 
 /**
@@ -235,8 +274,8 @@ template <class T>
 void CopyToBuffer(std::vector<char> &buffer, const T *source,
                   const std::size_t elements = 1) noexcept
 {
-  const char *src = reinterpret_cast<const char *>(source);
-  buffer.insert(buffer.end(), src, src + elements * sizeof(T));
+    const char *src = reinterpret_cast<const char *>(source);
+    buffer.insert(buffer.end(), src, src + elements * sizeof(T));
 }
 
 /**
@@ -251,8 +290,8 @@ template <class T>
 void CopyToBuffer(std::vector<char> &buffer, const std::size_t position,
                   const T *source, const std::size_t elements = 1) noexcept
 {
-  const char *src = reinterpret_cast<const char *>(source);
-  std::copy(src, src + elements * sizeof(T), buffer.begin() + position);
+    const char *src = reinterpret_cast<const char *>(source);
+    std::copy(src, src + elements * sizeof(T), buffer.begin() + position);
 }
 
 template <class T>
@@ -260,24 +299,24 @@ void CopyFromBuffer(T *destination, std::size_t elements,
                     const std::vector<char> &raw,
                     std::size_t &position) noexcept
 {
-  std::copy(raw.begin() + position,
-            raw.begin() + position + sizeof(T) * elements,
-            reinterpret_cast<char *>(destination));
-  position += elements * sizeof(T);
+    std::copy(raw.begin() + position,
+              raw.begin() + position + sizeof(T) * elements,
+              reinterpret_cast<char *>(destination));
+    position += elements * sizeof(T);
 }
 
 template <class T>
 void PrintValues(const std::string name, const char *buffer,
                  const std::size_t position, const std::size_t elements)
 {
-  std::vector<T> values(elements);
-  std::memcpy(values.data(), &buffer[position], elements * sizeof(T));
+    std::vector<T> values(elements);
+    std::memcpy(values.data(), &buffer[position], elements * sizeof(T));
 
-  std::cout << "Read " << name << "\n";
-  for (const auto value : values)
-    std::cout << value << " ";
+    std::cout << "Read " << name << "\n";
+    for (const auto value : values)
+        std::cout << value << " ";
 
-  std::cout << "\n";
+    std::cout << "\n";
 }
 
 } // end namespace
diff --git a/include/transform/BZip2.h b/include/transform/BZip2.h
index 755b6453c2631db0fb5207ce06e3abbd0b3dd477..0735ae2c711eec9d6774da0066192108567728e4 100644
--- a/include/transform/BZip2.h
+++ b/include/transform/BZip2.h
@@ -22,20 +22,20 @@ class BZIP2 : public Transform
 {
 
 public:
-  /**
-   * Initialize parent method
-   * @param compressionLevel
-   * @param variable
-   */
-  BZIP2();
+    /**
+     * Initialize parent method
+     * @param compressionLevel
+     * @param variable
+     */
+    BZIP2();
 
-  ~BZIP2();
+    ~BZIP2();
 
-  void Compress(const std::vector<char> &bufferIn,
-                std::vector<char> &bufferOut);
-
-  void Decompress(const std::vector<char> &bufferIn,
+    void Compress(const std::vector<char> &bufferIn,
                   std::vector<char> &bufferOut);
+
+    void Decompress(const std::vector<char> &bufferIn,
+                    std::vector<char> &bufferOut);
 };
 
 } // end namespace transform
diff --git a/include/transport/file/FStream.h b/include/transport/file/FStream.h
index 8553c35981ebdb87048631033f293404f3774f88..7a54d040b7fd46b61bcdb890ef281e0bb749e39d 100644
--- a/include/transport/file/FStream.h
+++ b/include/transport/file/FStream.h
@@ -29,22 +29,22 @@ class FStream : public Transport
 {
 
 public:
-  FStream(MPI_Comm mpiComm, const bool debugMode);
+    FStream(MPI_Comm mpiComm, const bool debugMode);
 
-  virtual ~FStream() = default;
+    virtual ~FStream() = default;
 
-  void Open(const std::string name, const std::string accessMode);
+    void Open(const std::string name, const std::string accessMode);
 
-  void SetBuffer(char *buffer, std::size_t size);
+    void SetBuffer(char *buffer, std::size_t size);
 
-  void Write(const char *buffer, std::size_t size);
+    void Write(const char *buffer, std::size_t size);
 
-  void Flush();
+    void Flush();
 
-  void Close();
+    void Close();
 
 private:
-  std::fstream m_FStream; ///< file stream under name.bp.dir/name.bp.rank
+    std::fstream m_FStream; ///< file stream under name.bp.dir/name.bp.rank
 };
 
 } // end namespace transport
diff --git a/include/transport/file/FileDescriptor.h b/include/transport/file/FileDescriptor.h
index 98d17dfb86d77303588b398a4363fe3c68e2d2ab..812bdcadb6e8591665c4c4f0505121db715e58db 100644
--- a/include/transport/file/FileDescriptor.h
+++ b/include/transport/file/FileDescriptor.h
@@ -25,18 +25,18 @@ class FileDescriptor : public Transport
 {
 
 public:
-  FileDescriptor(MPI_Comm mpiComm, const bool debugMode);
+    FileDescriptor(MPI_Comm mpiComm, const bool debugMode);
 
-  ~FileDescriptor();
+    ~FileDescriptor();
 
-  void Open(const std::string name, const std::string accessMode);
+    void Open(const std::string &name, const std::string accessMode);
 
-  void Write(const char *buffer, std::size_t size);
+    void Write(const char *buffer, std::size_t size);
 
-  void Close();
+    void Close();
 
 private:
-  int m_FileDescriptor = -1; ///< file descriptor returned by POSIX open
+    int m_FileDescriptor = -1; ///< file descriptor returned by POSIX open
 };
 
 } // end namespace transport
diff --git a/include/transport/file/FilePointer.h b/include/transport/file/FilePointer.h
index 439bffebebf6ce3bcfb520b05bb4603c2759ee6e..c1de95056ff85e0886d7d7aa0ed7e9f1707e42d7 100644
--- a/include/transport/file/FilePointer.h
+++ b/include/transport/file/FilePointer.h
@@ -30,22 +30,22 @@ class FilePointer : public Transport
 {
 
 public:
-  FilePointer(MPI_Comm mpiComm, const bool debugMode);
+    FilePointer(MPI_Comm mpiComm, const bool debugMode);
 
-  ~FilePointer();
+    ~FilePointer();
 
-  void Open(const std::string name, const std::string accessMode);
+    void Open(const std::string name, const std::string accessMode);
 
-  void SetBuffer(char *buffer, std::size_t size);
+    void SetBuffer(char *buffer, std::size_t size);
 
-  void Write(const char *buffer, std::size_t size);
+    void Write(const char *buffer, std::size_t size);
 
-  void Flush();
+    void Flush();
 
-  void Close();
+    void Close();
 
 private:
-  FILE *m_File = NULL; ///< C file pointer
+    FILE *m_File = NULL; ///< C file pointer
 };
 
 } // end namespace transport
diff --git a/include/transport/file/MPI_File.h b/include/transport/file/MPI_File.h
index 5966cc531da35b6e991cd6fe47189a569fb6e5ec..10685e8cea3d2f9a90f12b9ee1d020a384511725 100644
--- a/include/transport/file/MPI_File.h
+++ b/include/transport/file/MPI_File.h
@@ -27,22 +27,22 @@ class MPI_File : public Transport
 {
 
 public:
-  MPI_File(MPI_Comm mpiComm, const bool debugMode);
+    MPI_File(MPI_Comm mpiComm, const bool debugMode);
 
-  ~MPI_File();
+    ~MPI_File();
 
-  void Open(const std::string streamName, const std::string accessMode);
+    void Open(const std::string streamName, const std::string accessMode);
 
-  void SetBuffer(char *buffer, std::size_t size);
+    void SetBuffer(char *buffer, std::size_t size);
 
-  void Write(const char *buffer, std::size_t size);
+    void Write(const char *buffer, std::size_t size);
 
-  void Flush();
+    void Flush();
 
-  void Close();
+    void Close();
 
 private:
-  MPI_File m_MPIFile; ///< MPI File
+    MPI_File m_MPIFile; ///< MPI File
 };
 
 } // end namespace transport
diff --git a/include/transport/wan/MdtmMan.h b/include/transport/wan/MdtmMan.h
index 84a71156e560909da7b31b7c087337de2bdf1bce..7ddd162acc11beb73abedab6f43aad5c9dd0b7ae 100644
--- a/include/transport/wan/MdtmMan.h
+++ b/include/transport/wan/MdtmMan.h
@@ -25,112 +25,113 @@ class MdtmMan : public Transport
 {
 
 public:
-  /**
-   *
-   * @param localIP
-   * @param remoteIP
-   * @param mode
-   * @param prefix
-   * @param numberOfPipes
-   * @param tolerances
-   * @param priorities
-   * @param mpiComm
-   * @param debugMode
-   */
-  MdtmMan(const std::string localIP, const std::string remoteIP,
-          const std::string mode, const std::string prefix,
-          const int numberOfPipes, const std::vector<int> tolerances,
-          const std::vector<int> priorities, MPI_Comm mpiComm,
-          const bool debugMode);
-
-  ~MdtmMan();
-
-  void Open(const std::string name, const std::string accessMode);
-
-  void SetBuffer(char *buffer, std::size_t size);
-
-  /**
-   * We can always overload this function in the base class and accept other
-   * types of data pointers, e.g. Write( json* );
-   * I'm sticking with char* as it's more general (only C++ libraries, e.g.
-   * boost understand std::std::vector, MPI, POSIX, Infiniband use pointer*)
-   * @param buffer
-   * @param size
-   */
-  void Write(const char *buffer, std::size_t size);
-
-  void Flush(); ///< not sure if this one is needed...
-
-  void Close();
+    /**
+     *
+     * @param localIP
+     * @param remoteIP
+     * @param mode
+     * @param prefix
+     * @param numberOfPipes
+     * @param tolerances
+     * @param priorities
+     * @param mpiComm
+     * @param debugMode
+     */
+    MdtmMan(const std::string localIP, const std::string remoteIP,
+            const std::string mode, const std::string prefix,
+            const int numberOfPipes, const std::vector<int> tolerances,
+            const std::vector<int> priorities, MPI_Comm mpiComm,
+            const bool debugMode);
+
+    ~MdtmMan();
+
+    void Open(const std::string name, const std::string accessMode);
+
+    void SetBuffer(char *buffer, std::size_t size);
+
+    /**
+     * We can always overload this function in the base class and accept other
+     * types of data pointers, e.g. Write( json* );
+     * I'm sticking with char* as it's more general (only C++ libraries, e.g.
+     * boost understand std::std::vector, MPI, POSIX, Infiniband use pointer*)
+     * @param buffer
+     * @param size
+     */
+    void Write(const char *buffer, std::size_t size);
+
+    void Flush(); ///< not sure if this one is needed...
+
+    void Close();
 
 private:
-  std::string m_LocalIP;    ///< local ip address, can change over time
-  std::string m_RemoteIP;   ///<  remote ip address, can change over time
-  std::string m_Mode;       ///< send/write, receive/read
-  std::string m_Prefix;     ///< prefix given to message
-  int m_NumberOfPipes = -1; ///< should it be unsigned int?
-  std::vector<int> m_Tolerances;
-  std::vector<int> m_Priorities;
-
-  /**
-   * Should we change data to char* ?
-   * @param data
-   * @param doid
-   * @param variable
-   * @param dType
-   * @param putShape
-   * @param varShape
-   * @param offset
-   * @param timestep
-   * @param tolerance
-   * @param priority
-   * @return
-   */
-  int Put(const void *data, const std::string doid, const std::string variable,
-          const std::string dType, const std::vector<std::uint64_t> &putShape,
-          const std::vector<uint64_t> &varShape,
-          const std::vector<uint64_t> &offset, const std::uint64_t timestep,
-          const int tolerance, const int priority);
-
-  /**
-   *
-   * @param data
-   * @param doid
-   * @param variable
-   * @param dType
-   * @param putShape
-   * @param varShape
-   * @param offset
-   * @param timestep
-   * @param tolerance
-   * @param priority
-   * @return
-   */
-  int Get(void *data, const std::string doid, const std::string variable,
-          const std::string dType, const std::vector<std::uint64_t> &putShape,
-          const std::vector<uint64_t> &varShape,
-          const std::vector<uint64_t> &offset, const std::uint64_t timestep,
-          const int tolerance, const int priority);
-
-  /**
-   *
-   * @param data
-   * @param doid
-   * @param variable
-   * @param dType
-   * @param varShape
-   * @param timestep
-   * @return
-   */
-  int Get(void *data, const std::string doid, const std::string variable,
-          const std::string dType, std::vector<std::uint64_t> &varShape,
-          const std::uint64_t timestep);
-
-  /**
-   *
-   * @param jData
-   */
-  void OnReceive(nlohmann::json &jData);
+    std::string m_LocalIP;    ///< local ip address, can change over time
+    std::string m_RemoteIP;   ///<  remote ip address, can change over time
+    std::string m_Mode;       ///< send/write, receive/read
+    std::string m_Prefix;     ///< prefix given to message
+    int m_NumberOfPipes = -1; ///< should it be unsigned int?
+    std::vector<int> m_Tolerances;
+    std::vector<int> m_Priorities;
+
+    /**
+     * Should we change data to char* ?
+     * @param data
+     * @param doid
+     * @param variable
+     * @param dType
+     * @param putShape
+     * @param varShape
+     * @param offset
+     * @param timestep
+     * @param tolerance
+     * @param priority
+     * @return
+     */
+    int Put(const void *data, const std::string doid,
+            const std::string variable, const std::string dType,
+            const std::vector<std::uint64_t> &putShape,
+            const std::vector<uint64_t> &varShape,
+            const std::vector<uint64_t> &offset, const std::uint64_t timestep,
+            const int tolerance, const int priority);
+
+    /**
+     *
+     * @param data
+     * @param doid
+     * @param variable
+     * @param dType
+     * @param putShape
+     * @param varShape
+     * @param offset
+     * @param timestep
+     * @param tolerance
+     * @param priority
+     * @return
+     */
+    int Get(void *data, const std::string doid, const std::string variable,
+            const std::string dType, const std::vector<std::uint64_t> &putShape,
+            const std::vector<uint64_t> &varShape,
+            const std::vector<uint64_t> &offset, const std::uint64_t timestep,
+            const int tolerance, const int priority);
+
+    /**
+     *
+     * @param data
+     * @param doid
+     * @param variable
+     * @param dType
+     * @param varShape
+     * @param timestep
+     * @return
+     */
+    int Get(void *data, const std::string doid, const std::string variable,
+            const std::string dType, std::vector<std::uint64_t> &varShape,
+            const std::uint64_t timestep);
+
+    /**
+     *
+     * @param jData
+     */
+    void OnReceive(nlohmann::json &jData);
 };
 
 } // end namespace transport
diff --git a/include/utilities/profiling/iochrono/IOChrono.h b/include/utilities/profiling/iochrono/IOChrono.h
index fed27a79a6cb3ee0486ebff2cf2169765634e80d..20796d332bffdc0873e9409aa5f439dce1db5c2b 100644
--- a/include/utilities/profiling/iochrono/IOChrono.h
+++ b/include/utilities/profiling/iochrono/IOChrono.h
@@ -15,7 +15,7 @@
 #include <vector>
 /// \endcond
 
-#include "profiling/iochrono/Timer.h"
+#include "utilities/profiling/iochrono/Timer.h"
 
 namespace adios
 {
@@ -27,11 +27,11 @@ namespace profiling
  */
 struct IOChrono
 {
-  std::vector<Timer>
-      Timers; ///< one timer for each process (open, write, buffering, etc.)
-  std::vector<unsigned long long int>
-      TotalBytes;        ///< tracks bytes for buffering
-  bool IsActive = false; ///< flag to determine if profiling is used
+    std::vector<Timer>
+        Timers; ///< one timer for each process (open, write, buffering, etc.)
+    std::vector<unsigned long long int>
+        TotalBytes;        ///< tracks bytes for buffering
+    bool IsActive = false; ///< flag to determine if profiling is used
 };
 
 } // end namespace
diff --git a/source/ADIOS.cpp b/source/ADIOS.cpp
index 5fd0fbf366ae0ae74958ad7ea65c3d78f1dc9e5d..45a786f7792c67df6383fe451865918e7d23b05b 100644
--- a/source/ADIOS.cpp
+++ b/source/ADIOS.cpp
@@ -37,336 +37,345 @@
 namespace adios
 {
 
-ADIOS::ADIOS(const Verbose /*verbose*/, const bool debugMode)
+ADIOS::ADIOS(const Verbose verbose, const bool debugMode)
 : m_DebugMode{debugMode}
 {
-  InitMPI();
+    InitMPI();
 }
 
-ADIOS::ADIOS(const std::string config, const Verbose /*verbose*/,
+ADIOS::ADIOS(const std::string config, const Verbose verbose,
              const bool debugMode)
-: m_ConfigFile{config}, m_DebugMode{debugMode}
+: m_ConfigFile(config), m_DebugMode(debugMode)
 {
-  InitMPI();
-  // InitXML( m_ConfigFile, m_MPIComm, m_DebugMode, m_Transforms );
+    InitMPI();
+    // InitXML( m_ConfigFile, m_MPIComm, m_DebugMode, m_Transforms );
 }
 
-ADIOS::ADIOS(const std::string config, MPI_Comm mpiComm,
-             const Verbose /*verbose*/, const bool debugMode)
-: m_MPIComm{mpiComm}, m_ConfigFile{config}, m_DebugMode{debugMode}
+ADIOS::ADIOS(const std::string configFile, MPI_Comm mpiComm,
+             const Verbose verbose, const bool debugMode)
+: m_MPIComm(mpiComm), m_ConfigFile(configFile), m_DebugMode(debugMode)
 {
-  InitMPI();
-  // InitXML( m_XMLConfigFile, m_MPIComm, m_DebugMode, m_HostLanguage,
-  // m_Transforms, m_Groups );
+    InitMPI();
+    // InitXML( m_XMLConfigFile, m_MPIComm, m_DebugMode, m_HostLanguage,
+    // m_Transforms, m_Groups );
 }
 
-ADIOS::ADIOS(MPI_Comm mpiComm, const Verbose /*verbose*/, const bool debugMode)
-: m_MPIComm{mpiComm}, m_DebugMode{debugMode}
+ADIOS::ADIOS(MPI_Comm mpiComm, const Verbose verbose, const bool debugMode)
+: m_MPIComm(mpiComm), m_DebugMode(debugMode)
 {
-  InitMPI();
+    InitMPI();
 }
 
 // ADIOS::~ADIOS() {}
 
 void ADIOS::InitMPI()
 {
-  if (m_DebugMode == true)
-  {
-    if (m_MPIComm == MPI_COMM_NULL)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure(
-          "ERROR: engine communicator is MPI_COMM_NULL,"
-          " in call to ADIOS Open or Constructor\n");
+        if (m_MPIComm == MPI_COMM_NULL)
+        {
+            throw std::ios_base::failure(
+                "ERROR: engine communicator is MPI_COMM_NULL,"
+                " in call to ADIOS Open or Constructor\n");
+        }
     }
-  }
 
-  MPI_Comm_rank(m_MPIComm, &m_RankMPI);
-  MPI_Comm_size(m_MPIComm, &m_SizeMPI);
+    MPI_Comm_rank(m_MPIComm, &m_RankMPI);
+    MPI_Comm_size(m_MPIComm, &m_SizeMPI);
 }
 
 Method &ADIOS::DeclareMethod(const std::string methodName)
 {
-  if (m_DebugMode == true)
-  {
-    if (m_Methods.count(methodName) == 1)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument("ERROR: method " + methodName +
-                                  " already declared, from DeclareMethod\n");
+        if (m_Methods.count(methodName) == 1)
+        {
+            throw std::invalid_argument(
+                "ERROR: method " + methodName +
+                " already declared, from DeclareMethod\n");
+        }
     }
-  }
-  m_Methods.emplace(methodName, Method(methodName, m_DebugMode));
-  return m_Methods.at(methodName);
+    m_Methods.emplace(methodName, Method(methodName, m_DebugMode));
+    return m_Methods.at(methodName);
 }
 
-std::shared_ptr<Engine> ADIOS::Open(const std::string name,
+std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                     const std::string accessMode,
                                     MPI_Comm mpiComm, const Method &method)
 {
-  if (m_DebugMode == true)
-  {
-    if (m_EngineNames.count(name) == 1) // Check if Engine already exists
+    if (m_DebugMode == true)
+    {
+        if (m_EngineNames.count(name) == 1) // Check if Engine already exists
+        {
+            throw std::invalid_argument(
+                "ERROR: engine name " + name +
+                " already created by Open, in call from Open.\n");
+        }
+    }
+
+    m_EngineNames.insert(name);
+
+    const std::string type(method.m_Type);
+
+    const bool isDefaultWriter =
+        (accessMode == "w" || accessMode == "write" || accessMode == "a" ||
+         accessMode == "append") &&
+                type.empty()
+            ? true
+            : false;
+
+    const bool isDefaultReader =
+        (accessMode == "r" || accessMode == "read") && type.empty() ? true
+                                                                    : false;
+
+    if (isDefaultWriter || type == "BPFileWriter" || type == "bpfilewriter")
+    {
+        return std::make_shared<BPFileWriter>(*this, name, accessMode, mpiComm,
+                                              method);
+    }
+    else if (isDefaultReader || type == "BPReader" || type == "bpreader")
+    {
+        return std::make_shared<BPFileReader>(*this, name, accessMode, mpiComm,
+                                              method);
+    }
+    else if (type == "SIRIUS" || type == "sirius" || type == "Sirius")
     {
-      throw std::invalid_argument(
-          "ERROR: engine name " + name +
-          " already created by Open, in call from Open.\n");
+        // not yet supported
+        // return std::make_shared<engine::DataMan>( *this, name, accessMode,
+        // mpiComm, method, iomode, timeout_sec, m_DebugMode, method.m_nThreads
+        // );
     }
-  }
-
-  m_EngineNames.insert(name);
-
-  const std::string type(method.m_Type);
-
-  const bool isDefaultWriter = (accessMode == "w" || accessMode == "write" ||
-                                accessMode == "a" || accessMode == "append") &&
-                                       type.empty()
-                                   ? true
-                                   : false;
-
-  const bool isDefaultReader =
-      (accessMode == "r" || accessMode == "read") && type.empty() ? true
-                                                                  : false;
-
-  if (isDefaultWriter || type == "BPFileWriter" || type == "bpfilewriter")
-  {
-    return std::make_shared<BPFileWriter>(*this, name, accessMode, mpiComm,
-                                          method);
-  }
-  else if (isDefaultReader || type == "BPReader" || type == "bpreader")
-  {
-    return std::make_shared<BPFileReader>(*this, name, accessMode, mpiComm,
-                                          method);
-  }
-  else if (type == "SIRIUS" || type == "sirius" || type == "Sirius")
-  {
-    // not yet supported
-    // return std::make_shared<engine::DataMan>( *this, name, accessMode,
-    // mpiComm, method, iomode, timeout_sec, m_DebugMode, method.m_nThreads );
-  }
-  else if (type == "DataManWriter")
-  {
+    else if (type == "DataManWriter")
+    {
 #ifdef HAVE_DATAMAN
-    return std::make_shared<DataManWriter>(*this, name, accessMode, mpiComm,
-                                           method);
+        return std::make_shared<DataManWriter>(*this, name, accessMode, mpiComm,
+                                               method);
 #else
-    throw std::invalid_argument("ERROR: this version didn't compile with "
-                                "Dataman library, can't Open DataManWriter\n");
+        throw std::invalid_argument(
+            "ERROR: this version didn't compile with "
+            "Dataman library, can't Open DataManWriter\n");
 #endif
-  }
-  else if (type == "DataManReader")
-  {
+    }
+    else if (type == "DataManReader")
+    {
 #ifdef HAVE_DATAMAN
-    return std::make_shared<DataManReader>(*this, name, accessMode, mpiComm,
-                                           method);
+        return std::make_shared<DataManReader>(*this, name, accessMode, mpiComm,
+                                               method);
 #else
-    throw std::invalid_argument("ERROR: this version didn't compile with "
-                                "Dataman library, can't Open DataManReader\n");
+        throw std::invalid_argument(
+            "ERROR: this version didn't compile with "
+            "Dataman library, can't Open DataManReader\n");
 #endif
-  }
-  else if (type == "ADIOS1Writer")
-  {
+    }
+    else if (type == "ADIOS1Writer")
+    {
 #ifdef HAVE_ADIOS1
-    return std::make_shared<ADIOS1Writer>(*this, name, accessMode, mpiComm,
-                                          method);
+        return std::make_shared<ADIOS1Writer>(*this, name, accessMode, mpiComm,
+                                              method);
 #else
-    throw std::invalid_argument("ERROR: this version didn't compile with ADIOS "
-                                "1.x library, can't Open ADIOS1Writer\n");
+        throw std::invalid_argument(
+            "ERROR: this version didn't compile with ADIOS "
+            "1.x library, can't Open ADIOS1Writer\n");
 #endif
-  }
-  else if (type == "Vis")
-  {
-    // return std::make_shared<Vis>( *this, name, accessMode, mpiComm, method,
-    // iomode, timeout_sec, m_DebugMode, method.m_nThreads );
-  }
-  else
-  {
-    if (m_DebugMode == true)
+    }
+    else if (type == "Vis")
+    {
+        // return std::make_shared<Vis>( *this, name, accessMode, mpiComm,
+        // method,
+        // iomode, timeout_sec, m_DebugMode, method.m_nThreads );
+    }
+    else
     {
-      throw std::invalid_argument("ERROR: method type " + type +
-                                  " not supported for " + name +
-                                  ", in call to Open\n");
+        if (m_DebugMode == true)
+        {
+            throw std::invalid_argument("ERROR: method type " + type +
+                                        " not supported for " + name +
+                                        ", in call to Open\n");
+        }
     }
-  }
 
-  return nullptr; // if debug mode is off
+    return nullptr; // if debug mode is off
 }
 
-std::shared_ptr<Engine> ADIOS::Open(const std::string name,
+std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                     const std::string accessMode,
                                     const Method &method)
 {
-  return Open(name, accessMode, m_MPIComm, method);
+    return Open(name, accessMode, m_MPIComm, method);
 }
 
-std::shared_ptr<Engine> ADIOS::Open(const std::string name,
+std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                     const std::string accessMode,
                                     MPI_Comm mpiComm,
                                     const std::string methodName)
 {
-  auto itMethod = m_Methods.find(methodName);
+    auto itMethod = m_Methods.find(methodName);
 
-  if (m_DebugMode == true)
-  {
-    CheckMethod(itMethod, methodName, " in call to Open\n");
-  }
+    if (m_DebugMode == true)
+    {
+        CheckMethod(itMethod, methodName, " in call to Open\n");
+    }
 
-  return Open(name, accessMode, mpiComm, itMethod->second);
+    return Open(name, accessMode, mpiComm, itMethod->second);
 }
 
-std::shared_ptr<Engine> ADIOS::Open(const std::string name,
+std::shared_ptr<Engine> ADIOS::Open(const std::string &name,
                                     const std::string accessMode,
                                     const std::string methodName)
 {
-  return Open(name, accessMode, m_MPIComm, methodName);
+    return Open(name, accessMode, m_MPIComm, methodName);
 }
 
-std::shared_ptr<Engine> ADIOS::OpenFileReader(const std::string name,
+std::shared_ptr<Engine> ADIOS::OpenFileReader(const std::string &fileName,
                                               MPI_Comm mpiComm,
                                               const Method &method)
+
 {
-  return Open(name, "r", mpiComm, method);
+    return Open(fileName, "r", mpiComm, method);
 }
 
-std::shared_ptr<Engine> ADIOS::OpenFileReader(const std::string name,
+std::shared_ptr<Engine> ADIOS::OpenFileReader(const std::string &name,
                                               MPI_Comm mpiComm,
                                               const std::string methodName)
+
 {
-  auto itMethod = m_Methods.find(methodName);
+    auto itMethod = m_Methods.find(methodName);
 
-  if (m_DebugMode == true)
-  {
-    CheckMethod(itMethod, methodName, " in call to Open\n");
-  }
+    if (m_DebugMode == true)
+    {
+        CheckMethod(itMethod, methodName, " in call to Open\n");
+    }
 
-  return Open(name, "r", m_MPIComm, itMethod->second);
+    return Open(name, "r", m_MPIComm, itMethod->second);
 }
 
-VariableCompound &ADIOS::GetVariableCompound(const std::string name)
+VariableCompound &ADIOS::GetVariableCompound(const std::string &name)
 {
-  return m_Compound.at(GetVariableIndex<void>(name));
+    return m_Compound.at(GetVariableIndex<void>(name));
 }
 
 void ADIOS::MonitorVariables(std::ostream &logStream)
 {
-  logStream << "\tVariable \t Type\n";
+    logStream << "\tVariable \t Type\n";
 
-  for (auto &variablePair : m_Variables)
-  {
-    const std::string name(variablePair.first);
-    const std::string type(variablePair.second.first);
-
-    if (type == GetType<char>())
-    {
-      GetVariable<char>(name).Monitor(logStream);
-    }
-    else if (type == GetType<unsigned char>())
+    for (auto &variablePair : m_Variables)
     {
-      GetVariable<unsigned char>(name).Monitor(logStream);
+        const std::string name(variablePair.first);
+        const std::string type(variablePair.second.first);
+
+        if (type == GetType<char>())
+        {
+            GetVariable<char>(name).Monitor(logStream);
+        }
+        else if (type == GetType<unsigned char>())
+        {
+            GetVariable<unsigned char>(name).Monitor(logStream);
+        }
+        else if (type == GetType<short>())
+        {
+            GetVariable<short>(name).Monitor(logStream);
+        }
+        else if (type == GetType<unsigned short>())
+        {
+            GetVariable<unsigned short>(name).Monitor(logStream);
+        }
+        else if (type == GetType<int>())
+        {
+            GetVariable<int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<unsigned int>())
+        {
+            GetVariable<unsigned int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<long int>())
+        {
+            GetVariable<long int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<unsigned long int>())
+        {
+            GetVariable<unsigned long int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<long long int>())
+        {
+            GetVariable<long long int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<unsigned long long int>())
+        {
+            GetVariable<unsigned long long int>(name).Monitor(logStream);
+        }
+        else if (type == GetType<float>())
+        {
+            GetVariable<float>(name).Monitor(logStream);
+        }
+        else if (type == GetType<double>())
+        {
+            GetVariable<double>(name).Monitor(logStream);
+        }
+        else if (type == GetType<long double>())
+        {
+            GetVariable<long double>(name).Monitor(logStream);
+        }
+        else if (type == GetType<std::complex<float>>())
+        {
+            GetVariable<std::complex<float>>(name).Monitor(logStream);
+        }
+        else if (type == GetType<std::complex<double>>())
+        {
+            GetVariable<std::complex<double>>(name).Monitor(logStream);
+        }
+        else if (type == GetType<std::complex<long double>>())
+        {
+            GetVariable<std::complex<long double>>(name).Monitor(logStream);
+        }
     }
-    else if (type == GetType<short>())
-    {
-      GetVariable<short>(name).Monitor(logStream);
-    }
-    else if (type == GetType<unsigned short>())
-    {
-      GetVariable<unsigned short>(name).Monitor(logStream);
-    }
-    else if (type == GetType<int>())
-    {
-      GetVariable<int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<unsigned int>())
-    {
-      GetVariable<unsigned int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<long int>())
-    {
-      GetVariable<long int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<unsigned long int>())
-    {
-      GetVariable<unsigned long int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<long long int>())
-    {
-      GetVariable<long long int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<unsigned long long int>())
-    {
-      GetVariable<unsigned long long int>(name).Monitor(logStream);
-    }
-    else if (type == GetType<float>())
-    {
-      GetVariable<float>(name).Monitor(logStream);
-    }
-    else if (type == GetType<double>())
-    {
-      GetVariable<double>(name).Monitor(logStream);
-    }
-    else if (type == GetType<long double>())
-    {
-      GetVariable<long double>(name).Monitor(logStream);
-    }
-    else if (type == GetType<std::complex<float>>())
-    {
-      GetVariable<std::complex<float>>(name).Monitor(logStream);
-    }
-    else if (type == GetType<std::complex<double>>())
-    {
-      GetVariable<std::complex<double>>(name).Monitor(logStream);
-    }
-    else if (type == GetType<std::complex<long double>>())
-    {
-      GetVariable<std::complex<long double>>(name).Monitor(logStream);
-    }
-  }
 }
 
 // PRIVATE FUNCTIONS BELOW
-void ADIOS::CheckVariableInput(const std::string name,
+void ADIOS::CheckVariableInput(const std::string &name,
                                const Dims &dimensions) const
 {
-  if (m_DebugMode == true)
-  {
-    if (m_Variables.count(name) == 1)
-    {
-      throw std::invalid_argument(
-          "ERROR: variable " + name +
-          " already exists, in call to DefineVariable\n");
-    }
-
-    if (dimensions.empty() == true)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: variable " + name +
-          " dimensions can't be empty, in call to DefineVariable\n");
+        if (m_Variables.count(name) == 1)
+        {
+            throw std::invalid_argument(
+                "ERROR: variable " + name +
+                " already exists, in call to DefineVariable\n");
+        }
+
+        if (dimensions.empty() == true)
+        {
+            throw std::invalid_argument(
+                "ERROR: variable " + name +
+                " dimensions can't be empty, in call to DefineVariable\n");
+        }
     }
-  }
 }
 
 void ADIOS::CheckVariableName(
     std::map<std::string, std::pair<std::string, unsigned int>>::const_iterator
         itVariable,
-    const std::string name, const std::string hint) const
+    const std::string &name, const std::string hint) const
 {
-  if (m_DebugMode == true)
-  {
-    if (itVariable == m_Variables.end())
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument("ERROR: variable " + name +
-                                  " does not exist " + hint + "\n");
+        if (itVariable == m_Variables.end())
+        {
+            throw std::invalid_argument("ERROR: variable " + name +
+                                        " does not exist " + hint + "\n");
+        }
     }
-  }
 }
 
 void ADIOS::CheckMethod(std::map<std::string, Method>::const_iterator itMethod,
                         const std::string methodName,
                         const std::string hint) const
 {
-  if (itMethod == m_Methods.end())
-  {
-    throw std::invalid_argument("ERROR: method " + methodName + " not found " +
-                                hint + "\n");
-  }
+    if (itMethod == m_Methods.end())
+    {
+        throw std::invalid_argument("ERROR: method " + methodName +
+                                    " not found " + hint + "\n");
+    }
 }
 
 } // end namespace adios
diff --git a/source/ADIOS_C.cpp b/source/ADIOS_C.cpp
index d6f30da48a55cf7fae051d584852fb289c0abbd2..a3306931e5ad22e80525160466606e0013f453bb 100644
--- a/source/ADIOS_C.cpp
+++ b/source/ADIOS_C.cpp
@@ -25,227 +25,227 @@ extern "C" {
 void adios_init(const char *xmlConfigFile, const MPI_Comm mpiComm)
 {
 
-  int rank;
-  MPI_Comm_rank(mpiComm, &rank);
-
-  try
-  {
-    adios = new adios::ADIOS(std::string(xmlConfigFile), mpiComm);
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
-
-  //    return ( ADIOS* ) ( adios );
+    int rank;
+    MPI_Comm_rank(mpiComm, &rank);
+
+    try
+    {
+        adios = new adios::ADIOS(std::string(xmlConfigFile), mpiComm);
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
+
+    //    return ( ADIOS* ) ( adios );
 }
 
 ADIOS *adios_init_debug(const char *xmlConfigFile, const MPI_Comm mpiComm)
 {
-  adios::ADIOS *adios;
-  int rank;
-  MPI_Comm_rank(mpiComm, &rank);
-
-  try
-  {
-    adios = new adios::ADIOS(std::string(xmlConfigFile), mpiComm, true);
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
-
-  return (ADIOS *)(adios);
+    adios::ADIOS *adios;
+    int rank;
+    MPI_Comm_rank(mpiComm, &rank);
+
+    try
+    {
+        adios = new adios::ADIOS(std::string(xmlConfigFile), mpiComm, true);
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
+
+    return (ADIOS *)(adios);
 }
 
 void adios_open(const ADIOS *adiosC, const char *groupName,
                 const char *fileName, const char *accessMode)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  int rank;
-  MPI_Comm_rank(adios->m_MPIComm, &rank);
-
-  try
-  {
     adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-    adios->Open(std::string(groupName), std::string(fileName),
-                std::string(accessMode));
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
+    int rank;
+    MPI_Comm_rank(adios->m_MPIComm, &rank);
+
+    try
+    {
+        adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+        adios->Open(std::string(groupName), std::string(fileName),
+                    std::string(accessMode));
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
 }
 
 void adios_write(const ADIOS *adiosC, const char *groupName,
                  const char *variableName, const void *values)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  int rank;
-  MPI_Comm_rank(adios->m_MPIComm, &rank);
-
-  try
-  {
-    adios->Write(const std::string(groupName), const std::string(variableName),
-                 values);
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
+    adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+    int rank;
+    MPI_Comm_rank(adios->m_MPIComm, &rank);
+
+    try
+    {
+        adios->Write(const std::string(groupName),
+                     const std::string(variableName), values);
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
 }
 
 void adios_close(const ADIOS *adiosC, const char *groupName)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  int rank;
-  MPI_Comm_rank(adios->m_MPIComm, &rank);
-
-  try
-  {
-    adios->Close(std::string(groupName));
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
+    adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+    int rank;
+    MPI_Comm_rank(adios->m_MPIComm, &rank);
+
+    try
+    {
+        adios->Close(std::string(groupName));
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
 }
 
 void adios_free(const ADIOS *adiosC)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  delete adios;
+    adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+    delete adios;
 }
 
 void adios_monitor_groups(const ADIOS *adiosC)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  int rank;
-  MPI_Comm_rank(adios->m_MPIComm, &rank);
-
-  try
-  {
-    adios->MonitorGroups(std::cout);
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
+    adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+    int rank;
+    MPI_Comm_rank(adios->m_MPIComm, &rank);
+
+    try
+    {
+        adios->MonitorGroups(std::cout);
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
 }
 
 void adios_monitor_groups_file(const ADIOS *adiosC, const char *fileName,
                                const char *mode)
 {
-  adios::ADIOS *adios = (adios::ADIOS *)adiosC;
-  int rank;
-  MPI_Comm_rank(adios->m_MPIComm, &rank);
-
-  try
-  {
-    std::ofstream fileStream;
-
-    if (strcmp(mode, "a") == 0 || strcmp(mode, "append") == 0)
-      fileStream.open(fileName, std::ostream::app);
-    else if (strcmp(mode, "w") == 0 || strcmp(mode, "write") == 0)
-      fileStream.open(fileName);
-
-    adios->MonitorGroups(fileStream);
-  }
-  catch (std::bad_alloc &e)
-  {
-    if (rank == 0)
-      std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::invalid_argument &e)
-  {
-    if (rank == 0)
-      std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
-                << e.what() << "\n";
-  }
-  catch (std::exception &e)
-  {
-    if (rank == 0)
-      std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
-  }
+    adios::ADIOS *adios = (adios::ADIOS *)adiosC;
+    int rank;
+    MPI_Comm_rank(adios->m_MPIComm, &rank);
+
+    try
+    {
+        std::ofstream fileStream;
+
+        if (strcmp(mode, "a") == 0 || strcmp(mode, "append") == 0)
+            fileStream.open(fileName, std::ostream::app);
+        else if (strcmp(mode, "w") == 0 || strcmp(mode, "write") == 0)
+            fileStream.open(fileName);
+
+        adios->MonitorGroups(fileStream);
+    }
+    catch (std::bad_alloc &e)
+    {
+        if (rank == 0)
+            std::cout << "Bad allocation exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::invalid_argument &e)
+    {
+        if (rank == 0)
+            std::cout << "Invalid argument exception, STOPPING PROGRAM\n"
+                      << e.what() << "\n";
+    }
+    catch (std::exception &e)
+    {
+        if (rank == 0)
+            std::cout << "Exception, STOPPING PROGRAM\n" << e.what() << "\n";
+    }
 }
 
 #ifdef __cplusplus
diff --git a/source/capsule/heap/STLVector.cpp b/source/capsule/heap/STLVector.cpp
index 03564095e71fbbcbe560ef293d89d8038c86e699..99d9971e873dd2dedc614525b69b352e9b03101c 100644
--- a/source/capsule/heap/STLVector.cpp
+++ b/source/capsule/heap/STLVector.cpp
@@ -23,7 +23,7 @@ namespace capsule
 STLVector::STLVector(std::string accessMode, int rankMPI, bool debugMode)
 : Capsule{"Heap", std::move(accessMode), rankMPI, debugMode}
 {
-  m_Data.reserve(16777216);
+    m_Data.reserve(16777216);
 }
 
 char *STLVector::GetData() { return m_Data.data(); }
@@ -36,44 +36,44 @@ std::size_t STLVector::GetMetadataSize() const { return m_Metadata.size(); }
 
 void STLVector::ResizeData(const std::size_t size)
 {
-  if (m_DebugMode == true)
-  {
-    try
+    if (m_DebugMode == true)
     {
-      m_Data.resize(size);
+        try
+        {
+            m_Data.resize(size);
+        }
+        catch (std::bad_alloc &e)
+        {
+            throw std::runtime_error("ERROR: bad_alloc detected when resizing "
+                                     "data buffer with size " +
+                                     std::to_string(size) + "\n");
+        }
     }
-    catch (std::bad_alloc &e)
+    else
     {
-      throw std::runtime_error(
-          "ERROR: bad_alloc detected when resizing data buffer with size " +
-          std::to_string(size) + "\n");
+        m_Data.resize(size);
     }
-  }
-  else
-  {
-    m_Data.resize(size);
-  }
 }
 
 void STLVector::ResizeMetadata(const std::size_t size)
 {
-  if (m_DebugMode == true)
-  {
-    try
+    if (m_DebugMode == true)
     {
-      m_Metadata.resize(size);
+        try
+        {
+            m_Metadata.resize(size);
+        }
+        catch (std::bad_alloc &e)
+        {
+            throw std::runtime_error("ERROR: bad_alloc detected when resizing "
+                                     "metadata buffer with size " +
+                                     std::to_string(size) + "\n");
+        }
     }
-    catch (std::bad_alloc &e)
+    else
     {
-      throw std::runtime_error(
-          "ERROR: bad_alloc detected when resizing metadata buffer with size " +
-          std::to_string(size) + "\n");
+        m_Metadata.resize(size);
     }
-  }
-  else
-  {
-    m_Metadata.resize(size);
-  }
 }
 
 } // end namespace capsule
diff --git a/source/capsule/shmem/ShmSystemV.cpp b/source/capsule/shmem/ShmSystemV.cpp
index 8c3e14dd10ef1481d2f160a93c9d984672e37374..b26868c46640c317c9ca77f0b7479379267b0bd9 100644
--- a/source/capsule/shmem/ShmSystemV.cpp
+++ b/source/capsule/shmem/ShmSystemV.cpp
@@ -25,26 +25,26 @@ ShmSystemV::ShmSystemV(std::string accessMode, int rankMPI,
 : Capsule{"ShmSystemV", std::move(accessMode), rankMPI, debugMode},
   m_DataSize{dataSize}, m_MetadataSize{metadataSize}
 {
-  // Data Shared memory sector
-  const std::string dataPath(pathName + "/adios.shm.data." +
-                             std::to_string(m_RankMPI));
-  m_DataKey = ftok(dataPath.c_str(), m_RankMPI + 1);
-  m_DataShmID = shmget(m_DataKey, m_DataSize, IPC_CREAT | 0666);
-  m_Data = static_cast<char *>(shmat(m_DataShmID, nullptr, 0));
+    // Data Shared memory sector
+    const std::string dataPath(pathName + "/adios.shm.data." +
+                               std::to_string(m_RankMPI));
+    m_DataKey = ftok(dataPath.c_str(), m_RankMPI + 1);
+    m_DataShmID = shmget(m_DataKey, m_DataSize, IPC_CREAT | 0666);
+    m_Data = static_cast<char *>(shmat(m_DataShmID, nullptr, 0));
 
-  // Metadata Shared memory sector
-  const std::string metadataPath(pathName + "/adios.shm.metadata." +
-                                 std::to_string(m_RankMPI));
-  m_MetadataKey =
-      ftok(metadataPath.c_str(),
-           m_RankMPI + 1); // 2nd field must be greater than zero and unique
-  m_MetadataShmID = shmget(m_MetadataKey, m_MetadataSize, IPC_CREAT | 0666);
-  m_Metadata = static_cast<char *>(shmat(m_MetadataShmID, nullptr, 0));
+    // Metadata Shared memory sector
+    const std::string metadataPath(pathName + "/adios.shm.metadata." +
+                                   std::to_string(m_RankMPI));
+    m_MetadataKey =
+        ftok(metadataPath.c_str(),
+             m_RankMPI + 1); // 2nd field must be greater than zero and unique
+    m_MetadataShmID = shmget(m_MetadataKey, m_MetadataSize, IPC_CREAT | 0666);
+    m_Metadata = static_cast<char *>(shmat(m_MetadataShmID, nullptr, 0));
 
-  if (m_DebugMode == true)
-  {
-    CheckShm();
-  }
+    if (m_DebugMode == true)
+    {
+        CheckShm();
+    }
 }
 
 char *ShmSystemV::GetData() { return m_Data; }
@@ -57,37 +57,39 @@ size_t ShmSystemV::GetMetadataSize() const { return m_MetadataSize; }
 
 void ShmSystemV::CheckShm() const
 {
-  if (m_DataShmID < 0)
-  {
-    throw std::ios_base::failure(
-        "ERROR: Failed to create data shm segment of size " +
-        std::to_string(m_DataSize) + " from call to ShmSystemV constructor\n");
-  }
+    if (m_DataShmID < 0)
+    {
+        throw std::ios_base::failure(
+            "ERROR: Failed to create data shm segment of size " +
+            std::to_string(m_DataSize) +
+            " from call to ShmSystemV constructor\n");
+    }
 
-  if (m_Data == nullptr)
-  {
-    throw std::ios_base::failure(
-        "ERROR: Failed to attach to data shm segment of size " +
-        std::to_string(m_DataSize) + " and id " + std::to_string(m_DataShmID) +
-        ", from call to ShmSystemV constructor\n");
-  }
+    if (m_Data == nullptr)
+    {
+        throw std::ios_base::failure(
+            "ERROR: Failed to attach to data shm segment of size " +
+            std::to_string(m_DataSize) + " and id " +
+            std::to_string(m_DataShmID) +
+            ", from call to ShmSystemV constructor\n");
+    }
 
-  if (m_DataShmID < 0)
-  {
-    throw std::ios_base::failure(
-        "ERROR: Failed to create metadata shm segment of size " +
-        std::to_string(m_MetadataSize) +
-        " from call to ShmSystemV constructor\n");
-  }
+    if (m_DataShmID < 0)
+    {
+        throw std::ios_base::failure(
+            "ERROR: Failed to create metadata shm segment of size " +
+            std::to_string(m_MetadataSize) +
+            " from call to ShmSystemV constructor\n");
+    }
 
-  if (m_Metadata == nullptr)
-  {
-    throw std::ios_base::failure(
-        "ERROR: Failed to attach to metadata shm segment of size " +
-        std::to_string(m_MetadataSize) + " and id " +
-        std::to_string(m_MetadataShmID) +
-        " from call to ShmSystemV constructor\n");
-  }
+    if (m_Metadata == nullptr)
+    {
+        throw std::ios_base::failure(
+            "ERROR: Failed to attach to metadata shm segment of size " +
+            std::to_string(m_MetadataSize) + " and id " +
+            std::to_string(m_MetadataShmID) +
+            " from call to ShmSystemV constructor\n");
+    }
 }
 
 } // end namespace adios
diff --git a/source/core/Engine.cpp b/source/core/Engine.cpp
index 0ea379f8716c8b59a042294cb87295e865d7a198..101b5ef676e112a9594267e1f10e18297a4dbaff 100644
--- a/source/core/Engine.cpp
+++ b/source/core/Engine.cpp
@@ -18,26 +18,25 @@ namespace adios
 {
 
 Engine::Engine(ADIOS &adios, const std::string engineType,
-               const std::string name, const std::string accessMode,
+               const std::string &name, const std::string accessMode,
                MPI_Comm mpiComm, const Method &method,
                const std::string endMessage)
 : m_MPIComm(mpiComm), m_EngineType(engineType), m_Name(name),
   m_AccessMode(accessMode), m_Method(method), m_ADIOS(adios),
-  m_EndMessage(endMessage), m_DebugMode(m_Method.m_DebugMode),
-  m_nThreads(m_Method.m_nThreads)
+  m_DebugMode(m_Method.m_DebugMode), m_EndMessage(endMessage)
 {
-  if (m_DebugMode == true)
-  {
-    if (m_MPIComm == MPI_COMM_NULL)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure(
-          "ERROR: engine communicator is MPI_COMM_NULL,"
-          " in call to ADIOS Open or Constructor\n");
+        if (m_MPIComm == MPI_COMM_NULL)
+        {
+            throw std::ios_base::failure(
+                "ERROR: engine communicator is MPI_COMM_NULL,"
+                " in call to ADIOS Open or Constructor\n");
+        }
     }
-  }
 
-  MPI_Comm_rank(m_MPIComm, &m_RankMPI);
-  MPI_Comm_size(m_MPIComm, &m_SizeMPI);
+    MPI_Comm_rank(m_MPIComm, &m_RankMPI);
+    MPI_Comm_size(m_MPIComm, &m_SizeMPI);
 }
 
 void Engine::SetCallBack(std::function<void(const void *, std::string,
@@ -47,202 +46,243 @@ void Engine::SetCallBack(std::function<void(const void *, std::string,
 }
 
 // should these functions throw an exception?
-
-void Engine::Write(Variable<char> &variable, const char *values) {}
-void Engine::Write(Variable<unsigned char> &variable,
-                   const unsigned char *values)
+void Engine::Write(Variable<char> & /*variable*/, const char * /*values*/) {}
+void Engine::Write(Variable<unsigned char> & /*variable*/,
+                   const unsigned char * /*values*/)
 {
 }
-void Engine::Write(Variable<short> &variable, const short *values) {}
-void Engine::Write(Variable<unsigned short> &variable,
-                   const unsigned short *values)
+void Engine::Write(Variable<short> & /*variable*/, const short * /*values*/) {}
+void Engine::Write(Variable<unsigned short> & /*variable*/,
+                   const unsigned short * /*values*/)
 {
 }
-void Engine::Write(Variable<int> &variable, const int *values) {}
-void Engine::Write(Variable<unsigned int> &variable, const unsigned int *values)
+void Engine::Write(Variable<int> & /*variable*/, const int * /*values*/) {}
+void Engine::Write(Variable<unsigned int> & /*variable*/,
+                   const unsigned int * /*values*/)
 {
 }
-void Engine::Write(Variable<long int> &variable, const long int *values) {}
-void Engine::Write(Variable<unsigned long int> &variable,
-                   const unsigned long int *values)
+void Engine::Write(Variable<long int> & /*variable*/,
+                   const long int * /*values*/)
 {
 }
-void Engine::Write(Variable<long long int> &variable,
-                   const long long int *values)
+void Engine::Write(Variable<unsigned long int> & /*variable*/,
+                   const unsigned long int * /*values*/)
 {
 }
-void Engine::Write(Variable<unsigned long long int> &variable,
-                   const unsigned long long int *values)
+void Engine::Write(Variable<long long int> & /*variable*/,
+                   const long long int * /*values*/)
 {
 }
-void Engine::Write(Variable<float> &variable, const float *values) {}
-void Engine::Write(Variable<double> &variable, const double *values) {}
-void Engine::Write(Variable<long double> &variable, const long double *values)
+void Engine::Write(Variable<unsigned long long int> & /*variable*/,
+                   const unsigned long long int * /*values*/)
 {
 }
-void Engine::Write(Variable<std::complex<float>> &variable,
-                   const std::complex<float> *values)
+void Engine::Write(Variable<float> & /*variable*/, const float * /*values*/) {}
+void Engine::Write(Variable<double> & /*variable*/, const double * /*values*/)
 {
 }
-void Engine::Write(Variable<std::complex<double>> &variable,
-                   const std::complex<double> *values)
+void Engine::Write(Variable<long double> & /*variable*/,
+                   const long double * /*values*/)
 {
 }
-void Engine::Write(Variable<std::complex<long double>> &variable,
-                   const std::complex<long double> *values)
+void Engine::Write(Variable<std::complex<float>> & /*variable*/,
+                   const std::complex<float> * /*values*/)
 {
 }
-void Engine::Write(VariableCompound &variable, const void *values) {}
+void Engine::Write(Variable<std::complex<double>> & /*variable*/,
+                   const std::complex<double> * /*values*/)
+{
+}
+void Engine::Write(Variable<std::complex<long double>> & /*variable*/,
+                   const std::complex<long double> * /*values*/)
+{
+}
+void Engine::Write(VariableCompound & /*variable*/, const void * /*values*/) {}
 
-// String version
-void Engine::Write(const std::string variableName, const char *values) {}
-void Engine::Write(const std::string variableName, const unsigned char *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const char * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const unsigned char * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const short * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const short *values) {}
-void Engine::Write(const std::string variableName, const unsigned short *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const unsigned short * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const int *values) {}
-void Engine::Write(const std::string variableName, const unsigned int *values)
+void Engine::Write(const std::string & /*variableName*/, const int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const long int *values) {}
-void Engine::Write(const std::string variableName,
-                   const unsigned long int *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const unsigned int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const long long int *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const long int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName,
-                   const unsigned long long int *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const unsigned long int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const float *values) {}
-void Engine::Write(const std::string variableName, const double *values) {}
-void Engine::Write(const std::string variableName, const long double *values) {}
-void Engine::Write(const std::string variableName,
-                   const std::complex<float> *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const long long int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName,
-                   const std::complex<double> *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const unsigned long long int * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName,
-                   const std::complex<long double> *values)
+void Engine::Write(const std::string & /*variableName*/,
+                   const float * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const double * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const long double * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const std::complex<float> * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const std::complex<double> * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const std::complex<long double> * /*values*/)
+{
+}
+void Engine::Write(const std::string & /*variableName*/,
+                   const void * /*values*/)
 {
 }
-void Engine::Write(const std::string variableName, const void *values) {}
 
-void Engine::Advance(float timeout_sec) {}
-void Engine::Advance(AdvanceMode mode, float timeout_sec) {}
+void Engine::Advance(float /*timeout_sec*/) {}
+void Engine::Advance(AdvanceMode /*mode*/, float /*timeout_sec*/) {}
 void Engine::AdvanceAsync(
-    AdvanceMode mode,
-    std::function<void(std::shared_ptr<adios::Engine>)> callback)
+    AdvanceMode /*mode*/,
+    std::function<void(std::shared_ptr<adios::Engine>)> /*callback*/)
 {
 }
 
+void Engine::Close(const int /*transportIndex*/) {}
+
 // READ
-Variable<void> *Engine::InquireVariable(const std::string name,
-                                        const bool readIn)
+Variable<void> *Engine::InquireVariable(const std::string & /*name*/,
+                                        const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-
-Variable<char> *Engine::InquireVariableChar(const std::string name,
-                                            const bool readIn)
+Variable<char> *Engine::InquireVariableChar(const std::string & /*name*/,
+                                            const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-
-Variable<unsigned char> *Engine::InquireVariableUChar(const std::string name,
-                                                      const bool readIn)
+Variable<unsigned char> *
+Engine::InquireVariableUChar(const std::string & /*name*/,
+                             const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-
-Variable<short> *Engine::InquireVariableShort(const std::string name,
-                                              const bool readIn)
+Variable<short> *Engine::InquireVariableShort(const std::string & /*name*/,
+                                              const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-
-Variable<unsigned short> *Engine::InquireVariableUShort(const std::string name,
-                                                        const bool readIn)
+Variable<unsigned short> *
+Engine::InquireVariableUShort(const std::string & /*name*/,
+                              const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<int> *Engine::InquireVariableInt(const std::string name,
-                                          const bool readIn)
+Variable<int> *Engine::InquireVariableInt(const std::string & /*name*/,
+                                          const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<unsigned int> *Engine::InquireVariableUInt(const std::string name,
-                                                    const bool readIn)
+Variable<unsigned int> *
+Engine::InquireVariableUInt(const std::string & /*name*/, const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<long int> *Engine::InquireVariableLInt(const std::string name,
-                                                const bool readIn)
+Variable<long int> *Engine::InquireVariableLInt(const std::string & /*name*/,
+                                                const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 Variable<unsigned long int> *
-Engine::InquireVariableULInt(const std::string name, const bool readIn)
+Engine::InquireVariableULInt(const std::string & /*name*/,
+                             const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<long long int> *Engine::InquireVariableLLInt(const std::string name,
-                                                      const bool readIn)
+Variable<long long int> *
+Engine::InquireVariableLLInt(const std::string & /*name*/,
+                             const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 Variable<unsigned long long int> *
-Engine::InquireVariableULLInt(const std::string name, const bool readIn)
+Engine::InquireVariableULLInt(const std::string & /*name*/,
+                              const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<float> *Engine::InquireVariableFloat(const std::string name,
-                                              const bool readIn)
+Variable<float> *Engine::InquireVariableFloat(const std::string & /*name*/,
+                                              const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-Variable<double> *Engine::InquireVariableDouble(const std::string name,
-                                                const bool readIn)
+Variable<double> *Engine::InquireVariableDouble(const std::string & /*name*/,
+                                                const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-
-Variable<long double> *Engine::InquireVariableLDouble(const std::string name,
-                                                      const bool readIn)
+Variable<long double> *
+Engine::InquireVariableLDouble(const std::string & /*name*/,
+                               const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 Variable<std::complex<float>> *
-Engine::InquireVariableCFloat(const std::string name, const bool readIn)
+Engine::InquireVariableCFloat(const std::string & /*name*/,
+                              const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 Variable<std::complex<double>> *
-Engine::InquireVariableCDouble(const std::string name, const bool readIn)
+Engine::InquireVariableCDouble(const std::string & /*name*/,
+                               const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 Variable<std::complex<long double>> *
-Engine::InquireVariableCLDouble(const std::string name, const bool readIn)
+Engine::InquireVariableCLDouble(const std::string & /*name*/,
+                                const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
-VariableCompound *Engine::InquireVariableCompound(const std::string name,
-                                                  const bool readIn)
+VariableCompound *Engine::InquireVariableCompound(const std::string & /*name*/,
+                                                  const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 
-void Engine::Read(Variable<double> &variable, const double *values) {}
-void Engine::ScheduleRead(Variable<double> &variable, const double *values) {}
+void Engine::Read(Variable<double> & /*variable*/, const double * /*values*/) {}
+void Engine::ScheduleRead(Variable<double> & /*variable*/,
+                          const double * /*values*/)
+{
+}
 void Engine::Release() {}
 
 // PROTECTED
@@ -253,76 +293,78 @@ void Engine::InitParameters() {}
 void Engine::InitTransports() {}
 
 void Engine::CheckParameter(
-    const std::map<std::string, std::string>::const_iterator itParam,
+    const std::map<std::string, std::string>::const_iterator itParameter,
     const std::map<std::string, std::string> &parameters,
     const std::string parameterName, const std::string hint) const
 {
-  if (itParam == parameters.end())
-  {
+    if (itParameter == parameters.end())
     {
-      throw std::invalid_argument("ERROR: parameter name " + parameterName +
-                                  " not found " + hint);
+        {
+            throw std::invalid_argument("ERROR: parameter name " +
+                                        parameterName + " not found " + hint);
+        }
     }
-  }
 }
 
 bool Engine::TransportNamesUniqueness() const
 {
-  auto lf_CheckTransportsType =
-      [&](const std::set<std::string> &specificType) -> bool {
-    std::set<std::string> transportNames;
+    auto lf_CheckTransportsType =
+        [&](const std::set<std::string> &specificType) -> bool
 
-    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      auto itTransport = parameters.find("transport");
-      if (m_DebugMode == true)
-      {
-        if (itTransport == parameters.end())
-        {
-          throw std::invalid_argument(
-              "ERROR: transport not defined in Method input to Engine " +
-              m_Name);
-        }
-      }
+        std::set<std::string> transportNames;
 
-      const std::string type(itTransport->second);
-      if (specificType.count(type) == 1) // file transports type
-      {
-        std::string name(m_Name);
-        auto itName = parameters.find("name");
-        if (itName != parameters.end())
+        for (const auto &parameters : m_Method.m_TransportParameters)
         {
-          name = itName->second;
-        }
+            auto itTransport = parameters.find("transport");
+            if (m_DebugMode == true)
+            {
+                if (itTransport == parameters.end())
+                {
+                    throw std::invalid_argument("ERROR: transport not defined "
+                                                "in Method input to Engine " +
+                                                m_Name);
+                }
+            }
 
-        if (transportNames.count(name) == 0)
-        {
-          transportNames.insert(name);
-        }
-        else
-        {
-          return false;
+            const std::string type(itTransport->second);
+            if (specificType.count(type) == 1) // file transports type
+            {
+                std::string name(m_Name);
+                auto itName = parameters.find("name");
+                if (itName != parameters.end())
+                {
+                    name = itName->second;
+                }
+
+                if (transportNames.count(name) == 0)
+                {
+                    transportNames.insert(name);
+                }
+                else
+                {
+                    return false;
+                }
+            }
         }
-      }
-    }
-    return true;
-  };
+        return true;
+    };
 
-  return lf_CheckTransportsType(Support::FileTransports);
+    return lf_CheckTransportsType(Support::FileTransports);
 }
 
 void Engine::CheckTransportIndex(const int transportIndex)
 {
-  if (m_DebugMode == true)
-  {
-    if (transportIndex >= static_cast<int>(m_Transports.size()) ||
-        transportIndex < -1)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: transport index " + std::to_string(transportIndex) +
-          " is out of range, in call to " + m_Name + "Close \n");
+        if (transportIndex >= static_cast<int>(m_Transports.size()) ||
+            transportIndex < -1)
+        {
+            throw std::invalid_argument(
+                "ERROR: transport index " + std::to_string(transportIndex) +
+                " is out of range, in call to " + m_Name + "Close \n");
+        }
     }
-  }
 }
 
 } // end namespace adios
diff --git a/source/core/Method.cpp b/source/core/Method.cpp
index 41397d5e5802352b05cf3c9b919fa2d58f98f2ed..00aff13ecb0c1e8dff4fd5a45eb81a74a690941c 100644
--- a/source/core/Method.cpp
+++ b/source/core/Method.cpp
@@ -23,50 +23,51 @@ Method::Method(const std::string name, const bool debugMode)
 
 bool Method::IsUserDefined()
 {
-  return false; // TODO(wfg): check if XML has the method defined
+    return false; // TODO(wfg): check if XML has the method defined
 }
 
 void Method::SetEngine(const std::string type) { m_Type = type; }
 
 void Method::AllowThreads(const unsigned int nThreads)
 {
-  if (nThreads > 1)
-  {
-    m_nThreads = nThreads;
-  }
-  else
-  {
-    m_nThreads = 1;
-  }
+    if (nThreads > 1)
+    {
+        m_nThreads = nThreads;
+    }
+    else
+    {
+        m_nThreads = 1;
+    }
 }
 
 // PRIVATE Functions
 void Method::AddTransportParameters(const std::string type,
                                     const std::vector<std::string> &parameters)
 {
-  if (m_DebugMode == true)
-  {
-    if (type.empty() || type.find("=") != type.npos)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument("ERROR: first argument in AddTransport must "
-                                  "be a single word for transport\n");
+        if (type.empty() || type.find("=") != type.npos)
+        {
+            throw std::invalid_argument(
+                "ERROR: first argument in AddTransport must "
+                "be a single word for transport\n");
+        }
     }
-  }
 
-  std::map<std::string, std::string> mapParameters =
-      BuildParametersMap(parameters, m_DebugMode);
-  if (m_DebugMode == true)
-  {
-    if (mapParameters.count("transport") == 1)
+    std::map<std::string, std::string> mapParameters =
+        BuildParametersMap(parameters, m_DebugMode);
+    if (m_DebugMode == true)
     {
-      std::invalid_argument(
-          "ERROR: transport can't be redefined with \"transport=type\", "
-          "type must be the first argument\n");
+        if (mapParameters.count("transport") == 1)
+        {
+            std::invalid_argument("ERROR: transport can't be redefined with "
+                                  "\"transport=type\", "
+                                  "type must be the first argument\n");
+        }
     }
-  }
 
-  mapParameters["transport"] = type;
-  m_TransportParameters.push_back(mapParameters);
+    mapParameters["transport"] = type;
+    m_TransportParameters.push_back(mapParameters);
 }
 
 } // end namespace adios
diff --git a/source/core/Transport.cpp b/source/core/Transport.cpp
index ca1931ce4be363147203aad33219539784c24054..1fde211ae4f9a8a6cca8768d07679afdc832081f 100644
--- a/source/core/Transport.cpp
+++ b/source/core/Transport.cpp
@@ -19,8 +19,8 @@ Transport::Transport(const std::string type, MPI_Comm mpiComm,
                      const bool debugMode)
 : m_Type(type), m_MPIComm(mpiComm), m_DebugMode(debugMode)
 {
-  MPI_Comm_rank(m_MPIComm, &m_RankMPI);
-  MPI_Comm_size(m_MPIComm, &m_SizeMPI);
+    MPI_Comm_rank(m_MPIComm, &m_RankMPI);
+    MPI_Comm_size(m_MPIComm, &m_SizeMPI);
 }
 
 void Transport::SetBuffer(char * /*buffer*/, size_t /*size*/) {}
@@ -32,21 +32,21 @@ void Transport::Close() {}
 void Transport::InitProfiler(const std::string accessMode,
                              const Support::Resolutions resolution)
 {
-  m_Profiler.Timers.emplace_back("open", Support::Resolutions::mus);
+    m_Profiler.Timers.emplace_back("open", Support::Resolutions::mus);
 
-  if (accessMode == "w" || accessMode == "write")
-    m_Profiler.Timers.emplace_back("write", resolution);
+    if (accessMode == "w" || accessMode == "write")
+        m_Profiler.Timers.emplace_back("write", resolution);
 
-  else if (accessMode == "a" || accessMode == "append")
-    m_Profiler.Timers.emplace_back("append", resolution);
+    else if (accessMode == "a" || accessMode == "append")
+        m_Profiler.Timers.emplace_back("append", resolution);
 
-  else if (accessMode == "r" || accessMode == "read")
-    m_Profiler.Timers.emplace_back("read", resolution);
+    else if (accessMode == "r" || accessMode == "read")
+        m_Profiler.Timers.emplace_back("read", resolution);
 
-  m_Profiler.Timers.emplace_back("close", Support::Resolutions::mus);
+    m_Profiler.Timers.emplace_back("close", Support::Resolutions::mus);
 
-  m_Profiler.TotalBytes.push_back(0);
-  m_Profiler.IsActive = true;
+    m_Profiler.TotalBytes.push_back(0);
+    m_Profiler.IsActive = true;
 }
 
 } // end namespace adios
diff --git a/source/engine/adios1/ADIOS1Reader.cpp b/source/engine/adios1/ADIOS1Reader.cpp
index 0d666ec9cf6142011f726f8941bae08053be9eb5..fe19d70f97f15cb949a59c97513f89c6496b0e64 100644
--- a/source/engine/adios1/ADIOS1Reader.cpp
+++ b/source/engine/adios1/ADIOS1Reader.cpp
@@ -25,7 +25,7 @@ BPFileReader::BPFileReader(ADIOS &adios, const std::string name,
          " BPFileReader constructor (or call to ADIOS Open).\n"),
   m_Buffer(accessMode, m_RankMPI, m_DebugMode)
 {
-  Init();
+    Init();
 }
 
 BPFileReader::~BPFileReader() {}
@@ -34,109 +34,109 @@ Variable<void> *
 BPFileReader::InquireVariable(const std::string name,
                               const bool readIn) // not yet implemented
 {
-  return nullptr;
+    return nullptr;
 }
 
 Variable<char> *BPFileReader::InquireVariableChar(const std::string name,
                                                   const bool readIn)
 {
-  return InquireVariableCommon<char>(name, readIn);
+    return InquireVariableCommon<char>(name, readIn);
 }
 
 Variable<unsigned char> *
 BPFileReader::InquireVariableUChar(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned char>(name, readIn);
+    return InquireVariableCommon<unsigned char>(name, readIn);
 }
 
 Variable<short> *BPFileReader::InquireVariableShort(const std::string name,
                                                     const bool readIn)
 {
-  return InquireVariableCommon<short>(name, readIn);
+    return InquireVariableCommon<short>(name, readIn);
 }
 
 Variable<unsigned short> *
 BPFileReader::InquireVariableUShort(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned short>(name, readIn);
+    return InquireVariableCommon<unsigned short>(name, readIn);
 }
 
 Variable<int> *BPFileReader::InquireVariableInt(const std::string name,
                                                 const bool readIn)
 {
-  return InquireVariableCommon<int>(name, readIn);
+    return InquireVariableCommon<int>(name, readIn);
 }
 
 Variable<unsigned int> *
 BPFileReader::InquireVariableUInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned int>(name, readIn);
+    return InquireVariableCommon<unsigned int>(name, readIn);
 }
 
 Variable<long int> *BPFileReader::InquireVariableLInt(const std::string name,
                                                       const bool readIn)
 {
-  return InquireVariableCommon<long int>(name, readIn);
+    return InquireVariableCommon<long int>(name, readIn);
 }
 
 Variable<unsigned long int> *
 BPFileReader::InquireVariableULInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long int>(name, readIn);
+    return InquireVariableCommon<unsigned long int>(name, readIn);
 }
 
 Variable<long long int> *
 BPFileReader::InquireVariableLLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long long int>(name, readIn);
+    return InquireVariableCommon<long long int>(name, readIn);
 }
 
 Variable<unsigned long long int> *
 BPFileReader::InquireVariableULLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long long int>(name, readIn);
+    return InquireVariableCommon<unsigned long long int>(name, readIn);
 }
 
 Variable<float> *BPFileReader::InquireVariableFloat(const std::string name,
                                                     const bool readIn)
 {
-  return InquireVariableCommon<float>(name, readIn);
+    return InquireVariableCommon<float>(name, readIn);
 }
 
 Variable<double> *BPFileReader::InquireVariableDouble(const std::string name,
                                                       const bool readIn)
 {
-  return InquireVariableCommon<double>(name, readIn);
+    return InquireVariableCommon<double>(name, readIn);
 }
 
 Variable<long double> *
 BPFileReader::InquireVariableLDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long double>(name, readIn);
+    return InquireVariableCommon<long double>(name, readIn);
 }
 
 Variable<std::complex<float>> *
 BPFileReader::InquireVariableCFloat(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<float>>(name, readIn);
+    return InquireVariableCommon<std::complex<float>>(name, readIn);
 }
 
 Variable<std::complex<double>> *
 BPFileReader::InquireVariableCDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<double>>(name, readIn);
+    return InquireVariableCommon<std::complex<double>>(name, readIn);
 }
 
 Variable<std::complex<long double>> *
 BPFileReader::InquireVariableCLDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<long double>>(name, readIn);
+    return InquireVariableCommon<std::complex<long double>>(name, readIn);
 }
 
 VariableCompound *BPFileReader::InquireVariableCompound(const std::string name,
                                                         const bool readIn)
 {
-  return nullptr;
+    return nullptr;
 }
 
 void BPFileReader::Close(const int transportIndex) {}
@@ -144,84 +144,87 @@ void BPFileReader::Close(const int transportIndex) {}
 // PRIVATE
 void BPFileReader::Init()
 {
-  if (m_DebugMode == true)
-  {
-    if (m_AccessMode != "r" && m_AccessMode != "read")
-      throw std::invalid_argument(
-          "ERROR: BPFileReader doesn't support access mode " + m_AccessMode +
-          ", in call to ADIOS Open or BPFileReader constructor\n");
-  }
+    if (m_DebugMode == true)
+    {
+        if (m_AccessMode != "r" && m_AccessMode != "read")
+            throw std::invalid_argument(
+                "ERROR: BPFileReader doesn't support access mode " +
+                m_AccessMode +
+                ", in call to ADIOS Open or BPFileReader constructor\n");
+    }
 
-  InitCapsules();
-  InitTransports();
+    InitCapsules();
+    InitTransports();
 }
 
 void BPFileReader::InitCapsules()
 {
-  // here init memory capsules
+    // here init memory capsules
 }
 
 void BPFileReader::InitTransports() // maybe move this?
 {
-  if (m_DebugMode == true)
-  {
-    if (TransportNamesUniqueness() == false)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: two transports of the same kind (e.g file IO) "
-          "can't have the same name, modify with name= in Method "
-          "AddTransport\n");
+        if (TransportNamesUniqueness() == false)
+        {
+            throw std::invalid_argument(
+                "ERROR: two transports of the same kind (e.g file IO) "
+                "can't have the same name, modify with name= in Method "
+                "AddTransport\n");
+        }
     }
-  }
 
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itTransport = parameters.find("transport");
-    if (itTransport->second == "file" || itTransport->second == "File")
-    {
-      auto itLibrary = parameters.find("library");
-      if (itLibrary == parameters.end() ||
-          itLibrary->second == "POSIX") // use default POSIX
-      {
-        auto file =
-            std::make_shared<transport::FileDescriptor>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "FILE*" || itLibrary->second == "stdio.h")
-      {
-        auto file =
-            std::make_shared<transport::FilePointer>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "fstream" ||
-               itLibrary->second == "std::fstream")
-      {
-        auto file =
-            std::make_shared<transport::FStream>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "MPI-IO")
-      {
-      }
-      else
-      {
-        if (m_DebugMode == true)
-          throw std::invalid_argument(
-              "ERROR: file transport library " + itLibrary->second +
-              " not supported, in " + m_Name + m_EndMessage);
-      }
-    }
-    else
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      if (m_DebugMode == true)
-        throw std::invalid_argument("ERROR: transport " + itTransport->second +
-                                    " (you mean File?) not supported, in " +
-                                    m_Name + m_EndMessage);
+        auto itTransport = parameters.find("transport");
+        if (itTransport->second == "file" || itTransport->second == "File")
+        {
+            auto itLibrary = parameters.find("library");
+            if (itLibrary == parameters.end() ||
+                itLibrary->second == "POSIX") // use default POSIX
+            {
+                auto file = std::make_shared<transport::FileDescriptor>(
+                    m_MPIComm, m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "FILE*" ||
+                     itLibrary->second == "stdio.h")
+            {
+                auto file = std::make_shared<transport::FilePointer>(
+                    m_MPIComm, m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "fstream" ||
+                     itLibrary->second == "std::fstream")
+            {
+                auto file = std::make_shared<transport::FStream>(m_MPIComm,
+                                                                 m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "MPI-IO")
+            {
+            }
+            else
+            {
+                if (m_DebugMode == true)
+                    throw std::invalid_argument(
+                        "ERROR: file transport library " + itLibrary->second +
+                        " not supported, in " + m_Name + m_EndMessage);
+            }
+        }
+        else
+        {
+            if (m_DebugMode == true)
+                throw std::invalid_argument(
+                    "ERROR: transport " + itTransport->second +
+                    " (you mean File?) not supported, in " + m_Name +
+                    m_EndMessage);
+        }
     }
-  }
 }
 
 } // end namespace
diff --git a/source/engine/adios1/ADIOS1Writer.cpp b/source/engine/adios1/ADIOS1Writer.cpp
index dc45da793801236e09720ba4a5626067a9fe7290..81813dc63f759ec71aeebc70c13e1968f1b57aba 100644
--- a/source/engine/adios1/ADIOS1Writer.cpp
+++ b/source/engine/adios1/ADIOS1Writer.cpp
@@ -28,49 +28,49 @@ ADIOS1Writer::ADIOS1Writer(ADIOS &adios, const std::string name,
          nthreads, " ADIOS1Writer constructor (or call to ADIOS Open).\n"),
   m_groupname{method.m_Name.c_str()}, m_filename{name.c_str()}, m_comm{mpiComm}
 {
-  Init();
-  adios_open(&m_adios_file, m_groupname, m_filename, accessMode.c_str(),
-             m_comm);
-  if (adios_errno == err_no_error)
-  {
-    m_IsFileOpen = true;
-  }
+    Init();
+    adios_open(&m_adios_file, m_groupname, m_filename, accessMode.c_str(),
+               m_comm);
+    if (adios_errno == err_no_error)
+    {
+        m_IsFileOpen = true;
+    }
 }
 
 ADIOS1Writer::~ADIOS1Writer()
 {
-  if (m_IsFileOpen)
-  {
-    adios_close(m_adios_file);
-    m_IsFileOpen = false;
-  }
+    if (m_IsFileOpen)
+    {
+        adios_close(m_adios_file);
+        m_IsFileOpen = false;
+    }
 }
 
 void ADIOS1Writer::Init()
 {
-  if (!m_initialized)
-  {
-    adios_init_noxml(m_comm);
-    m_initialized = true;
-  }
-  adios_declare_group(&m_adios_group, m_groupname, "", adios_stat_default);
+    if (!m_initialized)
+    {
+        adios_init_noxml(m_comm);
+        m_initialized = true;
+    }
+    adios_declare_group(&m_adios_group, m_groupname, "", adios_stat_default);
 
-  InitParameters();
-  InitTransports();
+    InitParameters();
+    InitTransports();
 }
 
 bool ADIOS1Writer::ReOpenAsNeeded()
 {
-  if (!m_IsFileOpen)
-  {
-    adios_open(&m_adios_file, m_groupname, m_filename, "a", m_comm);
-    if (adios_errno == err_no_error)
+    if (!m_IsFileOpen)
     {
-      m_IsFileOpen = true;
-      adios_delete_vardefs(m_adios_group);
+        adios_open(&m_adios_file, m_groupname, m_filename, "a", m_comm);
+        if (adios_errno == err_no_error)
+        {
+            m_IsFileOpen = true;
+            adios_delete_vardefs(m_adios_group);
+        }
     }
-  }
-  return m_IsFileOpen;
+    return m_IsFileOpen;
 }
 
 void ADIOS1Writer::DefineVariable(std::string name, bool isScalar,
@@ -78,15 +78,15 @@ void ADIOS1Writer::DefineVariable(std::string name, bool isScalar,
                                   std::string ldims, std::string gdims,
                                   std::string offs)
 {
-  if (isScalar)
-  {
-    adios_define_var(m_adios_group, name.c_str(), "", vartype, "", "", "");
-  }
-  else
-  {
-    adios_define_var(m_adios_group, name.c_str(), "", vartype, ldims.c_str(),
-                     gdims.c_str(), offs.c_str());
-  }
+    if (isScalar)
+    {
+        adios_define_var(m_adios_group, name.c_str(), "", vartype, "", "", "");
+    }
+    else
+    {
+        adios_define_var(m_adios_group, name.c_str(), "", vartype,
+                         ldims.c_str(), gdims.c_str(), offs.c_str());
+    }
 }
 
 void ADIOS1Writer::WriteVariable(std::string name, bool isScalar,
@@ -94,357 +94,362 @@ void ADIOS1Writer::WriteVariable(std::string name, bool isScalar,
                                  std::string ldims, std::string gdims,
                                  std::string offs, const void *values)
 {
-  if (ReOpenAsNeeded())
-  {
-    DefineVariable(name, isScalar, vartype, ldims, gdims, offs);
-    adios_write(m_adios_file, name.c_str(), values);
-  }
+    if (ReOpenAsNeeded())
+    {
+        DefineVariable(name, isScalar, vartype, ldims, gdims, offs);
+        adios_write(m_adios_file, name.c_str(), values);
+    }
 }
 
 void ADIOS1Writer::Write(Variable<char> &variable, const char *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_byte,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_byte,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<unsigned char> &variable,
                          const unsigned char *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_byte,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_byte,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<short> &variable, const short *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_short,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_short,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<unsigned short> &variable,
                          const unsigned short *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_short,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_short,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<int> &variable, const int *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_integer,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_integer,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<unsigned int> &variable,
                          const unsigned int *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_integer,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_integer,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<long int> &variable, const long int *values)
 {
-  enum ADIOS_DATATYPES type =
-      adios_integer; // long int is usually 4 bytes which is adios_integer
-  if (sizeof(long int) == 8)
-  {
-    type = adios_long;
-  }
-  WriteVariable(variable.m_Name, variable.m_IsScalar, type,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    enum ADIOS_DATATYPES type =
+        adios_integer; // long int is usually 4 bytes which is adios_integer
+    if (sizeof(long int) == 8)
+    {
+        type = adios_long;
+    }
+    WriteVariable(variable.m_Name, variable.m_IsScalar, type,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<unsigned long int> &variable,
                          const unsigned long int *values)
 {
-  enum ADIOS_DATATYPES type =
-      adios_unsigned_integer; // long int is usually 4 bytes
-  if (sizeof(long int) == 8)
-  {
-    type = adios_unsigned_long;
-  }
-  WriteVariable(variable.m_Name, variable.m_IsScalar, type,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    enum ADIOS_DATATYPES type =
+        adios_unsigned_integer; // long int is usually 4 bytes
+    if (sizeof(long int) == 8)
+    {
+        type = adios_unsigned_long;
+    }
+    WriteVariable(variable.m_Name, variable.m_IsScalar, type,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<long long int> &variable,
                          const long long int *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_long,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_long,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<unsigned long long int> &variable,
                          const unsigned long long int *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_long,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_unsigned_long,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<float> &variable, const float *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_real,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_real,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<double> &variable, const double *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_double,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_double,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<long double> &variable,
                          const long double *values)
 {
-  /* TODO: This is faulty: adios_long_double expects 16 bytes per elements, but
-   * long double is compiler dependent */
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_long_double,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    /* TODO: This is faulty: adios_long_double expects 16 bytes per elements,
+     * but
+     * long double is compiler dependent */
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_long_double,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<std::complex<float>> &variable,
                          const std::complex<float> *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_complex,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_complex,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<std::complex<double>> &variable,
                          const std::complex<double> *values)
 {
-  WriteVariable(variable.m_Name, variable.m_IsScalar, adios_double_complex,
-                variable.GetDimensionAsString(),
-                variable.GetGlobalDimensionAsString(),
-                variable.GetOffsetsAsString(), values);
+    WriteVariable(variable.m_Name, variable.m_IsScalar, adios_double_complex,
+                  variable.GetDimensionAsString(),
+                  variable.GetGlobalDimensionAsString(),
+                  variable.GetOffsetsAsString(), values);
 }
 
 void ADIOS1Writer::Write(Variable<std::complex<long double>> &variable,
                          const std::complex<long double> *values)
 {
-  throw std::invalid_argument("ERROR: Adios 1.x does not support complex<long "
-                              "double> type, so it cannot write variable " +
-                              variable.m_Name + "\n");
+    throw std::invalid_argument(
+        "ERROR: Adios 1.x does not support complex<long "
+        "double> type, so it cannot write variable " +
+        variable.m_Name + "\n");
 }
 
 void ADIOS1Writer::Write(VariableCompound &variable, const void *values)
 {
-  throw std::invalid_argument("ERROR: Adios 1.x does not support compound "
-                              "types, so it cannot write variable " +
-                              variable.m_Name + "\n");
+    throw std::invalid_argument("ERROR: Adios 1.x does not support compound "
+                                "types, so it cannot write variable " +
+                                variable.m_Name + "\n");
 }
 
 // String version
 void ADIOS1Writer::Write(const std::string variableName, const char *values)
 {
-  Write(m_ADIOS.GetVariable<char>(variableName), values);
+    Write(m_ADIOS.GetVariable<char>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const unsigned char *values)
 {
-  Write(m_ADIOS.GetVariable<unsigned char>(variableName), values);
+    Write(m_ADIOS.GetVariable<unsigned char>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName, const short *values)
 {
-  Write(m_ADIOS.GetVariable<short>(variableName), values);
+    Write(m_ADIOS.GetVariable<short>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const unsigned short *values)
 {
-  Write(m_ADIOS.GetVariable<unsigned short>(variableName), values);
+    Write(m_ADIOS.GetVariable<unsigned short>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName, const int *values)
 {
-  Write(m_ADIOS.GetVariable<int>(variableName), values);
+    Write(m_ADIOS.GetVariable<int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const unsigned int *values)
 {
-  Write(m_ADIOS.GetVariable<unsigned int>(variableName), values);
+    Write(m_ADIOS.GetVariable<unsigned int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName, const long int *values)
 {
-  Write(m_ADIOS.GetVariable<long int>(variableName), values);
+    Write(m_ADIOS.GetVariable<long int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const unsigned long int *values)
 {
-  Write(m_ADIOS.GetVariable<unsigned long int>(variableName), values);
+    Write(m_ADIOS.GetVariable<unsigned long int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const long long int *values)
 {
-  Write(m_ADIOS.GetVariable<long long int>(variableName), values);
+    Write(m_ADIOS.GetVariable<long long int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const unsigned long long int *values)
 {
-  Write(m_ADIOS.GetVariable<unsigned long long int>(variableName), values);
+    Write(m_ADIOS.GetVariable<unsigned long long int>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName, const float *values)
 {
-  Write(m_ADIOS.GetVariable<float>(variableName), values);
+    Write(m_ADIOS.GetVariable<float>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName, const double *values)
 {
-  Write(m_ADIOS.GetVariable<double>(variableName), values);
+    Write(m_ADIOS.GetVariable<double>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const long double *values)
 {
-  Write(m_ADIOS.GetVariable<long double>(variableName), values);
+    Write(m_ADIOS.GetVariable<long double>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const std::complex<float> *values)
 {
-  Write(m_ADIOS.GetVariable<std::complex<float>>(variableName), values);
+    Write(m_ADIOS.GetVariable<std::complex<float>>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const std::complex<double> *values)
 {
-  Write(m_ADIOS.GetVariable<std::complex<double>>(variableName), values);
+    Write(m_ADIOS.GetVariable<std::complex<double>>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const std::complex<long double> *values)
 {
-  Write(m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
+    Write(m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
 }
 
 void ADIOS1Writer::Write(const std::string variableName,
                          const void *values) // Compound type
 {
-  throw std::invalid_argument("ERROR: Adios 1.x does not support compound "
-                              "types, so it cannot write variable " +
-                              variableName + "\n");
+    throw std::invalid_argument("ERROR: Adios 1.x does not support compound "
+                                "types, so it cannot write variable " +
+                                variableName + "\n");
 }
 
 void ADIOS1Writer::Advance()
 {
-  if (m_IsFileOpen)
-  {
-    adios_close(m_adios_file);
-    m_IsFileOpen = false;
-  }
+    if (m_IsFileOpen)
+    {
+        adios_close(m_adios_file);
+        m_IsFileOpen = false;
+    }
 }
 
 void ADIOS1Writer::Close(const int transportIndex)
 {
-  if (m_IsFileOpen)
-  {
-    adios_close(m_adios_file);
-    m_IsFileOpen = false;
-  }
+    if (m_IsFileOpen)
+    {
+        adios_close(m_adios_file);
+        m_IsFileOpen = false;
+    }
 }
 
 // PRIVATE FUNCTIONS
 void ADIOS1Writer::InitParameters()
 {
-  auto itMaxBufferSize = m_Method.m_Parameters.find("max_size_MB");
-  if (itMaxBufferSize != m_Method.m_Parameters.end())
-  {
-    adios_set_max_buffer_size(std::stoul(itMaxBufferSize->second));
-  }
+    auto itMaxBufferSize = m_Method.m_Parameters.find("max_size_MB");
+    if (itMaxBufferSize != m_Method.m_Parameters.end())
+    {
+        adios_set_max_buffer_size(std::stoul(itMaxBufferSize->second));
+    }
 
-  auto itVerbosity = m_Method.m_Parameters.find("verbose");
-  if (itVerbosity != m_Method.m_Parameters.end())
-  {
-    int verbosity = std::stoi(itVerbosity->second);
-    if (m_DebugMode == true)
+    auto itVerbosity = m_Method.m_Parameters.find("verbose");
+    if (itVerbosity != m_Method.m_Parameters.end())
     {
-      if (verbosity < 0 || verbosity > 5)
-        throw std::invalid_argument("ERROR: Method verbose argument must be an "
-                                    "integer in the range [0,5], in call to "
-                                    "Open or Engine constructor\n");
+        int verbosity = std::stoi(itVerbosity->second);
+        if (m_DebugMode == true)
+        {
+            if (verbosity < 0 || verbosity > 5)
+                throw std::invalid_argument(
+                    "ERROR: Method verbose argument must be an "
+                    "integer in the range [0,5], in call to "
+                    "Open or Engine constructor\n");
+        }
+        adios_verbose_level = verbosity;
     }
-    adios_verbose_level = verbosity;
-  }
 }
 
 void ADIOS1Writer::InitTransports()
 {
-  if (m_DebugMode == true)
-  {
-    if (TransportNamesUniqueness() == false)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: two transports of the same kind (e.g file IO) "
-          "can't have the same name, modify with name= in Method "
-          "AddTransport\n");
+        if (TransportNamesUniqueness() == false)
+        {
+            throw std::invalid_argument(
+                "ERROR: two transports of the same kind (e.g file IO) "
+                "can't have the same name, modify with name= in Method "
+                "AddTransport\n");
+        }
     }
-  }
-
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itTransport = parameters.find("transport");
 
-    if (itTransport->second == "file" || itTransport->second == "File")
-    {
-      auto itLibrary = parameters.find("library");
-      if (itLibrary == parameters.end() ||
-          itLibrary->second == "POSIX") // use default POSIX
-      {
-        adios_select_method(m_adios_group, "POSIX", "", "");
-      }
-      else if (itLibrary->second == "MPI_File" || itLibrary->second == "MPI-IO")
-      {
-        adios_select_method(m_adios_group, "MPI", "", "");
-      }
-      else
-      {
-        if (m_DebugMode == true)
-          throw std::invalid_argument(
-              "ERROR: file transport library " + itLibrary->second +
-              " not supported, in " + m_Name + m_EndMessage);
-      }
-    }
-    else
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      if (m_DebugMode == true)
-        throw std::invalid_argument("ERROR: transport " + itTransport->second +
-                                    " (you mean File?) not supported, in " +
-                                    m_Name + m_EndMessage);
+        auto itTransport = parameters.find("transport");
+
+        if (itTransport->second == "file" || itTransport->second == "File")
+        {
+            auto itLibrary = parameters.find("library");
+            if (itLibrary == parameters.end() ||
+                itLibrary->second == "POSIX") // use default POSIX
+            {
+                adios_select_method(m_adios_group, "POSIX", "", "");
+            }
+            else if (itLibrary->second == "MPI_File" ||
+                     itLibrary->second == "MPI-IO")
+            {
+                adios_select_method(m_adios_group, "MPI", "", "");
+            }
+            else
+            {
+                if (m_DebugMode == true)
+                    throw std::invalid_argument(
+                        "ERROR: file transport library " + itLibrary->second +
+                        " not supported, in " + m_Name + m_EndMessage);
+            }
+        }
+        else
+        {
+            if (m_DebugMode == true)
+                throw std::invalid_argument(
+                    "ERROR: transport " + itTransport->second +
+                    " (you mean File?) not supported, in " + m_Name +
+                    m_EndMessage);
+        }
     }
-  }
 }
 
 } // end namespace adios
diff --git a/source/engine/bp/BPFileReader.cpp b/source/engine/bp/BPFileReader.cpp
index 5adce59e69caa432227c35c08f46e23a2478f9bd..dc63c9dec01e6844178868c92a2e96c8cc8e75d4 100644
--- a/source/engine/bp/BPFileReader.cpp
+++ b/source/engine/bp/BPFileReader.cpp
@@ -26,117 +26,117 @@ BPFileReader::BPFileReader(ADIOS &adios, const std::string name,
          " BPFileReader constructor (or call to ADIOS Open).\n"),
   m_Buffer(accessMode, m_RankMPI, m_DebugMode)
 {
-  Init();
+    Init();
 }
 
 Variable<void> *BPFileReader::InquireVariable(const std::string /*name*/,
                                               const bool /*readIn*/)
 {
-  // not yet implemented
-  return nullptr;
+    // not yet implemented
+    return nullptr;
 }
 
 Variable<char> *BPFileReader::InquireVariableChar(const std::string name,
                                                   const bool readIn)
 {
-  return InquireVariableCommon<char>(name, readIn);
+    return InquireVariableCommon<char>(name, readIn);
 }
 
 Variable<unsigned char> *
 BPFileReader::InquireVariableUChar(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned char>(name, readIn);
+    return InquireVariableCommon<unsigned char>(name, readIn);
 }
 
 Variable<short> *BPFileReader::InquireVariableShort(const std::string name,
                                                     const bool readIn)
 {
-  return InquireVariableCommon<short>(name, readIn);
+    return InquireVariableCommon<short>(name, readIn);
 }
 
 Variable<unsigned short> *
 BPFileReader::InquireVariableUShort(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned short>(name, readIn);
+    return InquireVariableCommon<unsigned short>(name, readIn);
 }
 
 Variable<int> *BPFileReader::InquireVariableInt(const std::string name,
                                                 const bool readIn)
 {
-  return InquireVariableCommon<int>(name, readIn);
+    return InquireVariableCommon<int>(name, readIn);
 }
 
 Variable<unsigned int> *
 BPFileReader::InquireVariableUInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned int>(name, readIn);
+    return InquireVariableCommon<unsigned int>(name, readIn);
 }
 
 Variable<long int> *BPFileReader::InquireVariableLInt(const std::string name,
                                                       const bool readIn)
 {
-  return InquireVariableCommon<long int>(name, readIn);
+    return InquireVariableCommon<long int>(name, readIn);
 }
 
 Variable<unsigned long int> *
 BPFileReader::InquireVariableULInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long int>(name, readIn);
+    return InquireVariableCommon<unsigned long int>(name, readIn);
 }
 
 Variable<long long int> *
 BPFileReader::InquireVariableLLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long long int>(name, readIn);
+    return InquireVariableCommon<long long int>(name, readIn);
 }
 
 Variable<unsigned long long int> *
 BPFileReader::InquireVariableULLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long long int>(name, readIn);
+    return InquireVariableCommon<unsigned long long int>(name, readIn);
 }
 
 Variable<float> *BPFileReader::InquireVariableFloat(const std::string name,
                                                     const bool readIn)
 {
-  return InquireVariableCommon<float>(name, readIn);
+    return InquireVariableCommon<float>(name, readIn);
 }
 
 Variable<double> *BPFileReader::InquireVariableDouble(const std::string name,
                                                       const bool readIn)
 {
-  return InquireVariableCommon<double>(name, readIn);
+    return InquireVariableCommon<double>(name, readIn);
 }
 
 Variable<long double> *
 BPFileReader::InquireVariableLDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long double>(name, readIn);
+    return InquireVariableCommon<long double>(name, readIn);
 }
 
 Variable<std::complex<float>> *
 BPFileReader::InquireVariableCFloat(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<float>>(name, readIn);
+    return InquireVariableCommon<std::complex<float>>(name, readIn);
 }
 
 Variable<std::complex<double>> *
 BPFileReader::InquireVariableCDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<double>>(name, readIn);
+    return InquireVariableCommon<std::complex<double>>(name, readIn);
 }
 
 Variable<std::complex<long double>> *
 BPFileReader::InquireVariableCLDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<long double>>(name, readIn);
+    return InquireVariableCommon<std::complex<long double>>(name, readIn);
 }
 
 VariableCompound *
 BPFileReader::InquireVariableCompound(const std::string /*name*/,
                                       const bool /*readIn*/)
 {
-  return nullptr;
+    return nullptr;
 }
 
 void BPFileReader::Close(const int /*transportIndex*/) {}
@@ -144,90 +144,88 @@ void BPFileReader::Close(const int /*transportIndex*/) {}
 // PRIVATE
 void BPFileReader::Init()
 {
-  if (m_DebugMode == true)
-  {
-    if (m_AccessMode != "r" && m_AccessMode != "read")
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: BPFileReader doesn't support access mode " + m_AccessMode +
-          ", in call to ADIOS Open or BPFileReader constructor\n");
+        if (m_AccessMode != "r" && m_AccessMode != "read")
+        {
+            throw std::invalid_argument(
+                "ERROR: BPFileReader doesn't support access mode " +
+                m_AccessMode +
+                ", in call to ADIOS Open or BPFileReader constructor\n");
+        }
     }
-  }
-
-  InitCapsules();
-  InitTransports();
-}
 
-void BPFileReader::InitCapsules()
-{
-  // here init memory capsules
+    InitCapsules();
+    InitTransports();
 }
 
 void BPFileReader::InitTransports() // maybe move this?
 {
-  if (m_DebugMode == true)
-  {
-    if (TransportNamesUniqueness() == false)
+    if (m_DebugMode == true)
     {
-      throw std::invalid_argument(
-          "ERROR: two transports of the same kind (e.g file IO) "
-          "can't have the same name, modify with name= in Method "
-          "AddTransport\n");
+        if (TransportNamesUniqueness() == false)
+        {
+            throw std::invalid_argument(
+                "ERROR: two transports of the same kind (e.g file IO) "
+                "can't have the same name, modify with name= in Method "
+                "AddTransport\n");
+        }
     }
-  }
 
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itTransport = parameters.find("transport");
-    if (itTransport->second == "file" || itTransport->second == "File")
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      auto itLibrary = parameters.find("library");
-      if (itLibrary == parameters.end() ||
-          itLibrary->second == "POSIX") // use default POSIX
-      {
-        auto file =
-            std::make_shared<transport::FileDescriptor>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "FILE*" || itLibrary->second == "stdio.h")
-      {
-        auto file =
-            std::make_shared<transport::FilePointer>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "fstream" ||
-               itLibrary->second == "std::fstream")
-      {
-        auto file =
-            std::make_shared<transport::FStream>(m_MPIComm, m_DebugMode);
-        // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "MPI-IO")
-      {
-      }
-      else
-      {
-        if (m_DebugMode == true)
+        auto itTransport = parameters.find("transport");
+        if (itTransport->second == "file" || itTransport->second == "File")
         {
-          throw std::invalid_argument(
-              "ERROR: file transport library " + itLibrary->second +
-              " not supported, in " + m_Name + m_EndMessage);
+            auto itLibrary = parameters.find("library");
+            if (itLibrary == parameters.end() ||
+                itLibrary->second == "POSIX") // use default POSIX
+            {
+                auto file = std::make_shared<transport::FileDescriptor>(
+                    m_MPIComm, m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "FILE*" ||
+                     itLibrary->second == "stdio.h")
+            {
+                auto file = std::make_shared<transport::FilePointer>(
+                    m_MPIComm, m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "fstream" ||
+                     itLibrary->second == "std::fstream")
+            {
+                auto file = std::make_shared<transport::FStream>(m_MPIComm,
+                                                                 m_DebugMode);
+                // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file );
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "MPI-IO")
+            {
+            }
+            else
+            {
+                if (m_DebugMode == true)
+                {
+                    throw std::invalid_argument(
+                        "ERROR: file transport library " + itLibrary->second +
+                        " not supported, in " + m_Name + m_EndMessage);
+                }
+            }
+        }
+        else
+        {
+            if (m_DebugMode == true)
+            {
+                throw std::invalid_argument(
+                    "ERROR: transport " + itTransport->second +
+                    " (you mean File?) not supported, in " + m_Name +
+                    m_EndMessage);
+            }
         }
-      }
-    }
-    else
-    {
-      if (m_DebugMode == true)
-      {
-        throw std::invalid_argument("ERROR: transport " + itTransport->second +
-                                    " (you mean File?) not supported, in " +
-                                    m_Name + m_EndMessage);
-      }
     }
-  }
 }
 
 } // end namespace adios
diff --git a/source/engine/bp/BPFileWriter.cpp b/source/engine/bp/BPFileWriter.cpp
index 1a126de90ae747e321ba33d27d83a2d9aff641d8..027b60266660bad19356b7346a9ff3b45f22ca65 100644
--- a/source/engine/bp/BPFileWriter.cpp
+++ b/source/engine/bp/BPFileWriter.cpp
@@ -20,7 +20,7 @@
 namespace adios
 {
 
-BPFileWriter::BPFileWriter(ADIOS &adios, const std::string name,
+BPFileWriter::BPFileWriter(ADIOS &adios, const std::string &name,
                            const std::string accessMode, MPI_Comm mpiComm,
                            const Method &method)
 : Engine(adios, "BPFileWriter", name, accessMode, mpiComm, method,
@@ -29,107 +29,107 @@ BPFileWriter::BPFileWriter(ADIOS &adios, const std::string name,
   m_BP1Aggregator(m_MPIComm, m_DebugMode),
   m_MaxBufferSize(m_Buffer.m_Data.max_size())
 {
-  m_MetadataSet.TimeStep = 1; // starting at one to be compatible with ADIOS1.x
-  Init();
+    m_MetadataSet.TimeStep = 1; // to be compatible with ADIOS1.x
+    Init();
 }
 
 BPFileWriter::~BPFileWriter() = default;
 
 void BPFileWriter::Init()
 {
-  InitParameters();
-  InitTransports();
-  InitProcessGroup();
+    InitParameters();
+    InitTransports();
+    InitProcessGroup();
 }
 
 void BPFileWriter::Write(Variable<char> &variable, const char *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<unsigned char> &variable,
                          const unsigned char *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<short> &variable, const short *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<unsigned short> &variable,
                          const unsigned short *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<int> &variable, const int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<unsigned int> &variable,
                          const unsigned int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<long int> &variable, const long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<unsigned long int> &variable,
                          const unsigned long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<long long int> &variable,
                          const long long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<unsigned long long int> &variable,
                          const unsigned long long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<float> &variable, const float *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<double> &variable, const double *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<long double> &variable,
                          const long double *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<std::complex<float>> &variable,
                          const std::complex<float> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<std::complex<double>> &variable,
                          const std::complex<double> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(Variable<std::complex<long double>> &variable,
                          const std::complex<long double> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void BPFileWriter::Write(VariableCompound & /*variable*/,
@@ -138,398 +138,428 @@ void BPFileWriter::Write(VariableCompound & /*variable*/,
 }
 
 // String version
-void BPFileWriter::Write(const std::string variableName, const char *values)
+void BPFileWriter::Write(const std::string &variableName, const char *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<char>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<char>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const unsigned char *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned char>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned char>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName, const short *values)
+void BPFileWriter::Write(const std::string &variableName, const short *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<short>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<short>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const unsigned short *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned short>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned short>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName, const int *values)
+void BPFileWriter::Write(const std::string &variableName, const int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<int>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const unsigned int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned int>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName, const long int *values)
+void BPFileWriter::Write(const std::string &variableName,
+                         const long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long int>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const unsigned long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned long int>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned long int>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const long long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long long int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long long int>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const unsigned long long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned long long int>(variableName),
-                      values);
+    WriteVariableCommon(
+        m_ADIOS.GetVariable<unsigned long long int>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName, const float *values)
+void BPFileWriter::Write(const std::string &variableName, const float *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<float>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<float>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName, const double *values)
+void BPFileWriter::Write(const std::string &variableName, const double *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<double>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<double>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const long double *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long double>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long double>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const std::complex<float> *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<std::complex<float>>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<std::complex<float>>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const std::complex<double> *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<std::complex<double>>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<std::complex<double>>(variableName),
+                        values);
 }
 
-void BPFileWriter::Write(const std::string variableName,
+void BPFileWriter::Write(const std::string &variableName,
                          const std::complex<long double> *values)
 {
-  WriteVariableCommon(
-      m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
+    WriteVariableCommon(
+        m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
 }
 
-void BPFileWriter::Write(const std::string /*variableName*/,
+void BPFileWriter::Write(const std::string & /*variableName*/,
                          const void * /*values*/) // Compound type
 {
 }
 
 void BPFileWriter::Advance(float /*timeout_sec*/)
 {
-  m_BP1Writer.Advance(m_MetadataSet, m_Buffer);
+    m_BP1Writer.Advance(m_MetadataSet, m_Buffer);
 }
 
 void BPFileWriter::Close(const int transportIndex)
 {
-  CheckTransportIndex(transportIndex);
-  if (transportIndex == -1)
-  {
-    for (auto &transport : m_Transports)
-    { // by reference or value or it doesn't matter?
-      m_BP1Writer.Close(m_MetadataSet, m_Buffer, *transport, m_IsFirstClose,
-                        false); // false: not using aggregation for now
+    CheckTransportIndex(transportIndex);
+    if (transportIndex == -1)
+    {
+        for (auto &transport : m_Transports)
+        { // by reference or value or it doesn't matter?
+            m_BP1Writer.Close(m_MetadataSet, m_Buffer, *transport,
+                              m_IsFirstClose,
+                              false); // false: not using aggregation for now
+        }
     }
-  }
-  else
-  {
-    m_BP1Writer.Close(m_MetadataSet, m_Buffer, *m_Transports[transportIndex],
-                      m_IsFirstClose,
-                      false); // false: not using aggregation for now
-  }
-
-  if (m_MetadataSet.Log.IsActive == true)
-  {
-    bool allClose = true;
-    for (auto &transport : m_Transports)
+    else
     {
-      if (transport->m_IsOpen == true)
-      {
-        allClose = false;
-        break;
-      }
+        m_BP1Writer.Close(m_MetadataSet, m_Buffer,
+                          *m_Transports[transportIndex], m_IsFirstClose,
+                          false); // false: not using aggregation for now
     }
-    if (allClose == true) // aggregate and write profiling.log
+
+    if (m_MetadataSet.Log.IsActive == true)
     {
-      const std::string rankLog = m_BP1Writer.GetRankProfilingLog(
-          m_RankMPI, m_MetadataSet, m_Transports);
+        bool allClose = true;
+        for (auto &transport : m_Transports)
+        {
+            if (transport->m_IsOpen == true)
+            {
+                allClose = false;
+                break;
+            }
+        }
+        if (allClose == true) // aggregate and write profiling.log
+        {
+            const std::string rankLog = m_BP1Writer.GetRankProfilingLog(
+                m_RankMPI, m_MetadataSet, m_Transports);
 
-      const std::string fileName(m_BP1Writer.GetDirectoryName(m_Name) +
-                                 "/profiling.log");
-      m_BP1Aggregator.WriteProfilingLog(fileName, rankLog);
+            const std::string fileName(m_BP1Writer.GetDirectoryName(m_Name) +
+                                       "/profiling.log");
+            m_BP1Aggregator.WriteProfilingLog(fileName, rankLog);
+        }
     }
-  }
 }
 
 // PRIVATE FUNCTIONS
 void BPFileWriter::InitParameters()
 {
-  auto itGrowthFactor = m_Method.m_Parameters.find("buffer_growth");
-  if (itGrowthFactor != m_Method.m_Parameters.end())
-  {
-    const float growthFactor = std::stof(itGrowthFactor->second);
-    if (m_DebugMode == true)
+    auto itGrowthFactor = m_Method.m_Parameters.find("buffer_growth");
+    if (itGrowthFactor != m_Method.m_Parameters.end())
     {
-      if (growthFactor == 1.f)
-      {
-        throw std::invalid_argument(
-            "ERROR: buffer_growth argument can't be less of equal than 1, in " +
-            m_EndMessage + "\n");
-      }
-    }
+        const float growthFactor = std::stof(itGrowthFactor->second);
+        if (m_DebugMode == true)
+        {
+            if (growthFactor == 1.f)
+            {
+                throw std::invalid_argument("ERROR: buffer_growth argument "
+                                            "can't be less of equal than 1, "
+                                            "in " +
+                                            m_EndMessage + "\n");
+            }
+        }
 
-    m_BP1Writer.m_GrowthFactor = growthFactor;
-    m_GrowthFactor = growthFactor; // float
-  }
+        m_BP1Writer.m_GrowthFactor = growthFactor;
+        m_GrowthFactor = growthFactor; // float
+    }
 
-  auto itMaxBufferSize = m_Method.m_Parameters.find("max_size_MB");
-  if (itMaxBufferSize != m_Method.m_Parameters.end())
-  {
-    if (m_DebugMode == true)
+    auto itMaxBufferSize = m_Method.m_Parameters.find("max_size_MB");
+    if (itMaxBufferSize != m_Method.m_Parameters.end())
     {
-      if (m_GrowthFactor <= 1.f)
-      {
-        throw std::invalid_argument("ERROR: Method buffer_growth argument "
-                                    "can't be less of equal than 1, in " +
-                                    m_EndMessage + "\n");
-      }
-    }
+        if (m_DebugMode == true)
+        {
+            if (m_GrowthFactor <= 1.f)
+            {
+                throw std::invalid_argument(
+                    "ERROR: Method buffer_growth argument "
+                    "can't be less of equal than 1, in " +
+                    m_EndMessage + "\n");
+            }
+        }
 
-    m_MaxBufferSize = std::stoul(itMaxBufferSize->second) *
-                      1048576; // convert from MB to bytes
-  }
+        m_MaxBufferSize = std::stoul(itMaxBufferSize->second) *
+                          1048576; // convert from MB to bytes
+    }
 
-  auto itVerbosity = m_Method.m_Parameters.find("verbose");
-  if (itVerbosity != m_Method.m_Parameters.end())
-  {
-    int verbosity = std::stoi(itVerbosity->second);
-    if (m_DebugMode == true)
+    auto itVerbosity = m_Method.m_Parameters.find("verbose");
+    if (itVerbosity != m_Method.m_Parameters.end())
     {
-      if (verbosity < 0 || verbosity > 5)
-      {
-        throw std::invalid_argument("ERROR: Method verbose argument must be an "
-                                    "integer in the range [0,5], in call to "
-                                    "Open or Engine constructor\n");
-      }
+        int verbosity = std::stoi(itVerbosity->second);
+        if (m_DebugMode == true)
+        {
+            if (verbosity < 0 || verbosity > 5)
+            {
+                throw std::invalid_argument(
+                    "ERROR: Method verbose argument must be an "
+                    "integer in the range [0,5], in call to "
+                    "Open or Engine constructor\n");
+            }
+        }
+        m_BP1Writer.m_Verbosity = verbosity;
     }
-    m_BP1Writer.m_Verbosity = verbosity;
-  }
-
-  auto itProfile = m_Method.m_Parameters.find("profile_units");
-  if (itProfile != m_Method.m_Parameters.end())
-  {
-    auto &profiler = m_MetadataSet.Log;
-
-    if (itProfile->second == "mus" || itProfile->second == "microseconds")
-      profiler.Timers.emplace_back("buffering", Support::Resolutions::mus);
-    else if (itProfile->second == "ms" || itProfile->second == "milliseconds")
-      profiler.Timers.emplace_back("buffering", Support::Resolutions::ms);
-    else if (itProfile->second == "s" || itProfile->second == "seconds")
-      profiler.Timers.emplace_back("buffering", Support::Resolutions::s);
-    else if (itProfile->second == "min" || itProfile->second == "minutes")
-      profiler.Timers.emplace_back("buffering", Support::Resolutions::m);
-    else if (itProfile->second == "h" || itProfile->second == "hours")
-      profiler.Timers.emplace_back("buffering", Support::Resolutions::h);
-    else
+
+    auto itProfile = m_Method.m_Parameters.find("profile_units");
+    if (itProfile != m_Method.m_Parameters.end())
     {
-      if (m_DebugMode == true)
-      {
-        throw std::invalid_argument("ERROR: Method profile_buffering_units "
-                                    "argument must be mus, ms, s, min or h, in "
-                                    "call to Open or Engine constructor\n");
-      }
-    }
+        auto &log = m_MetadataSet.Log;
 
-    profiler.IsActive = true;
-  }
+        if (itProfile->second == "mus" || itProfile->second == "microseconds")
+        {
+            log.Timers.emplace_back("buffering", Support::Resolutions::mus);
+        }
+        else if (itProfile->second == "ms" ||
+                 itProfile->second == "milliseconds")
+        {
+            log.Timers.emplace_back("buffering", Support::Resolutions::ms);
+        }
+        else if (itProfile->second == "s" || itProfile->second == "seconds")
+        {
+            log.Timers.emplace_back("buffering", Support::Resolutions::s);
+        }
+        else if (itProfile->second == "min" || itProfile->second == "minutes")
+        {
+            log.Timers.emplace_back("buffering", Support::Resolutions::m);
+        }
+        else if (itProfile->second == "h" || itProfile->second == "hours")
+        {
+            log.Timers.emplace_back("buffering", Support::Resolutions::h);
+        }
+        else
+        {
+            if (m_DebugMode == true)
+            {
+                throw std::invalid_argument(
+                    "ERROR: Method profile_buffering_units "
+                    "argument must be mus, ms, s, min or h, in "
+                    "call to Open or Engine constructor\n");
+            }
+        }
+
+        log.IsActive = true;
+    }
 }
 
 void BPFileWriter::InitTransports()
 {
-  if (m_DebugMode == true)
-  {
-    if (TransportNamesUniqueness() == false)
-    {
-      throw std::invalid_argument(
-          "ERROR: two transports of the same kind (e.g file IO) "
-          "can't have the same name, modify with name= in Method "
-          "AddTransport\n");
-    }
-  }
-
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itProfile = parameters.find("profile_units");
-    bool doProfiling = false;
-    Support::Resolutions resolution =
-        Support::Resolutions::s; // default is seconds
-    if (itProfile != parameters.end())
+    if (m_DebugMode == true)
     {
-      if (itProfile->second == "mus" || itProfile->second == "microseconds")
-      {
-        resolution = Support::Resolutions::mus;
-      }
-      else if (itProfile->second == "ms" || itProfile->second == "milliseconds")
-      {
-        resolution = Support::Resolutions::ms;
-      }
-      else if (itProfile->second == "s" || itProfile->second == "seconds")
-      {
-        resolution = Support::Resolutions::s;
-      }
-      else if (itProfile->second == "min" || itProfile->second == "minutes")
-      {
-        resolution = Support::Resolutions::m;
-      }
-      else if (itProfile->second == "h" || itProfile->second == "hours")
-      {
-        resolution = Support::Resolutions::h;
-      }
-      else
-      {
-        if (m_DebugMode == true)
+        if (TransportNamesUniqueness() == false)
         {
-          throw std::invalid_argument("ERROR: Transport profile_units argument "
-                                      "must be mus, ms, s, min or h " +
-                                      m_EndMessage);
+            throw std::invalid_argument(
+                "ERROR: two transports of the same kind (e.g file IO) "
+                "can't have the same name, modify with name= in Method "
+                "AddTransport\n");
         }
-      }
-      doProfiling = true;
     }
 
-    auto itTransport = parameters.find("transport");
-
-    if (itTransport->second == "file" || itTransport->second == "File")
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      auto itLibrary = parameters.find("library");
-      if (itLibrary == parameters.end() ||
-          itLibrary->second == "POSIX") // use default POSIX
-      {
-        auto file =
-            std::make_shared<transport::FileDescriptor>(m_MPIComm, m_DebugMode);
-        if (doProfiling == true)
+        auto itProfile = parameters.find("profile_units");
+        bool doProfiling = false;
+        Support::Resolutions resolution =
+            Support::Resolutions::s; // default is seconds
+        if (itProfile != parameters.end())
         {
-          file->InitProfiler(m_AccessMode, resolution);
+            if (itProfile->second == "mus" ||
+                itProfile->second == "microseconds")
+            {
+                resolution = Support::Resolutions::mus;
+            }
+            else if (itProfile->second == "ms" ||
+                     itProfile->second == "milliseconds")
+            {
+                resolution = Support::Resolutions::ms;
+            }
+            else if (itProfile->second == "s" || itProfile->second == "seconds")
+            {
+                resolution = Support::Resolutions::s;
+            }
+            else if (itProfile->second == "min" ||
+                     itProfile->second == "minutes")
+            {
+                resolution = Support::Resolutions::m;
+            }
+            else if (itProfile->second == "h" || itProfile->second == "hours")
+            {
+                resolution = Support::Resolutions::h;
+            }
+            else
+            {
+                if (m_DebugMode == true)
+                {
+                    throw std::invalid_argument(
+                        "ERROR: Transport profile_units argument "
+                        "must be mus, ms, s, min or h " +
+                        m_EndMessage);
+                }
+            }
+            doProfiling = true;
         }
 
-        m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "FILE*" || itLibrary->second == "stdio")
-      {
-        auto file =
-            std::make_shared<transport::FilePointer>(m_MPIComm, m_DebugMode);
-        if (doProfiling == true)
-        {
-          file->InitProfiler(m_AccessMode, resolution);
-        }
+        auto itTransport = parameters.find("transport");
 
-        m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "fstream" ||
-               itLibrary->second == "std::fstream")
-      {
-        auto file =
-            std::make_shared<transport::FStream>(m_MPIComm, m_DebugMode);
-
-        if (doProfiling == true)
+        if (itTransport->second == "file" || itTransport->second == "File")
         {
-          file->InitProfiler(m_AccessMode, resolution);
+            auto itLibrary = parameters.find("library");
+            if (itLibrary == parameters.end() ||
+                itLibrary->second == "POSIX") // use default POSIX
+            {
+                auto file = std::make_shared<transport::FileDescriptor>(
+                    m_MPIComm, m_DebugMode);
+                if (doProfiling == true)
+                {
+                    file->InitProfiler(m_AccessMode, resolution);
+                }
+
+                m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "FILE*" ||
+                     itLibrary->second == "stdio")
+            {
+                auto file = std::make_shared<transport::FilePointer>(
+                    m_MPIComm, m_DebugMode);
+                if (doProfiling == true)
+                {
+                    file->InitProfiler(m_AccessMode, resolution);
+                }
+
+                m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "fstream" ||
+                     itLibrary->second == "std::fstream")
+            {
+                auto file = std::make_shared<transport::FStream>(m_MPIComm,
+                                                                 m_DebugMode);
+
+                if (doProfiling == true)
+                {
+                    file->InitProfiler(m_AccessMode, resolution);
+                }
+
+                m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
+                m_Transports.push_back(std::move(file));
+            }
+            else if (itLibrary->second == "MPI_File" ||
+                     itLibrary->second == "MPI-IO")
+            {
+            }
+            else
+            {
+                if (m_DebugMode == true)
+                {
+                    throw std::invalid_argument(
+                        "ERROR: file transport library " + itLibrary->second +
+                        " not supported, in " + m_Name + m_EndMessage);
+                }
+            }
         }
-
-        m_BP1Writer.OpenRankFiles(m_Name, m_AccessMode, *file);
-        m_Transports.push_back(std::move(file));
-      }
-      else if (itLibrary->second == "MPI_File" || itLibrary->second == "MPI-IO")
-      {
-      }
-      else
-      {
-        if (m_DebugMode == true)
+        else
         {
-          throw std::invalid_argument(
-              "ERROR: file transport library " + itLibrary->second +
-              " not supported, in " + m_Name + m_EndMessage);
+            if (m_DebugMode == true)
+            {
+                throw std::invalid_argument(
+                    "ERROR: transport " + itTransport->second +
+                    " (you mean File?) not supported, in " + m_Name +
+                    m_EndMessage);
+            }
         }
-      }
-    }
-    else
-    {
-      if (m_DebugMode == true)
-      {
-        throw std::invalid_argument("ERROR: transport " + itTransport->second +
-                                    " (you mean File?) not supported, in " +
-                                    m_Name + m_EndMessage);
-      }
     }
-  }
 }
 
 void BPFileWriter::InitProcessGroup()
 {
+    if (m_MetadataSet.Log.IsActive == true)
+    {
+        m_MetadataSet.Log.Timers[0].SetInitialTime();
+    }
 
-  if (m_MetadataSet.Log.IsActive == true)
-    m_MetadataSet.Log.Timers[0].SetInitialTime();
-
-  if (m_AccessMode == "a")
-  {
-    // Get last pg timestep and update timestep counter in
-    // format::BP1MetadataSet
-  }
+    if (m_AccessMode == "a")
+    {
+        // Get last pg timestep and update timestep counter in
+        // format::BP1MetadataSet
+    }
 
-  WriteProcessGroupIndex();
+    WriteProcessGroupIndex();
 
-  if (m_MetadataSet.Log.IsActive == true)
-    m_MetadataSet.Log.Timers[0].SetTime();
+    if (m_MetadataSet.Log.IsActive == true)
+    {
+        m_MetadataSet.Log.Timers[0].SetTime();
+    }
 }
 
 void BPFileWriter::WriteProcessGroupIndex()
 {
-  // pg = process group
-  //    const std::size_t pgIndexSize = m_BP1Writer.GetProcessGroupIndexSize(
-  //    std::to_string( m_RankMPI ),
-  //                                                                          std::to_string(
-  //                                                                          m_MetadataSet.TimeStep
-  //                                                                          ),
-  //                                                                          m_Transports.size()
-  //                                                                          );
-  // metadata
-  // GrowBuffer( pgIndexSize, m_GrowthFactor, m_MetadataSet.PGIndex );
-
-  // data? Need to be careful, maybe add some trailing tolerance in variable
-  // ????
-  // GrowBuffer( pgIndexSize, m_GrowthFactor, m_Buffer.m_Data );
-
-  const bool isFortran = (m_HostLanguage == "Fortran") ? true : false;
-
-  m_BP1Writer.WriteProcessGroupIndex(isFortran, std::to_string(m_RankMPI),
-                                     static_cast<std::uint32_t>(m_RankMPI),
-                                     m_Transports, m_Buffer, m_MetadataSet);
+    // pg = process group
+    //    const std::size_t pgIndexSize = m_BP1Writer.GetProcessGroupIndexSize(
+    //    std::to_string( m_RankMPI ),
+    //                                                                          std::to_string(
+    //                                                                          m_MetadataSet.TimeStep
+    //                                                                          ),
+    //                                                                          m_Transports.size()
+    //                                                                          );
+    // metadata
+    // GrowBuffer( pgIndexSize, m_GrowthFactor, m_MetadataSet.PGIndex );
+
+    // data? Need to be careful, maybe add some trailing tolerance in variable
+    // ????
+    // GrowBuffer( pgIndexSize, m_GrowthFactor, m_Buffer.m_Data );
+
+    const bool isFortran = (m_HostLanguage == "Fortran") ? true : false;
+
+    m_BP1Writer.WriteProcessGroupIndex(isFortran, std::to_string(m_RankMPI),
+                                       static_cast<std::uint32_t>(m_RankMPI),
+                                       m_Transports, m_Buffer, m_MetadataSet);
 }
 
 } // end namespace adios
diff --git a/source/engine/dataman/DataManReader.cpp b/source/engine/dataman/DataManReader.cpp
index 6d749319ad81e4d80748342d68d6b8cb34e1a0e8..dfea765533c5298161a9f77d2263a9059917ceea 100644
--- a/source/engine/dataman/DataManReader.cpp
+++ b/source/engine/dataman/DataManReader.cpp
@@ -31,7 +31,7 @@ DataManReader::DataManReader(ADIOS &adios, const std::string name,
          " DataManReader constructor (or call to ADIOS Open).\n")
 // m_Buffer(accessMode, m_RankMPI, m_DebugMode)
 {
-  Init();
+    Init();
 }
 
 DataManReader::~DataManReader() {}
@@ -41,118 +41,118 @@ void DataManReader::SetCallBack(
                        Dims)>
         callback)
 {
-  m_CallBack = callback;
-  m_Man.reg_callback(callback);
+    m_CallBack = callback;
+    m_Man.reg_callback(callback);
 }
 
 Variable<void> *
 DataManReader::InquireVariable(const std::string name,
                                const bool readIn) // not yet implemented
 {
-  return nullptr;
+    return nullptr;
 }
 
 Variable<char> *DataManReader::InquireVariableChar(const std::string name,
                                                    const bool readIn)
 {
-  return InquireVariableCommon<char>(name, readIn);
+    return InquireVariableCommon<char>(name, readIn);
 }
 
 Variable<unsigned char> *
 DataManReader::InquireVariableUChar(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned char>(name, readIn);
+    return InquireVariableCommon<unsigned char>(name, readIn);
 }
 
 Variable<short> *DataManReader::InquireVariableShort(const std::string name,
                                                      const bool readIn)
 {
-  return InquireVariableCommon<short>(name, readIn);
+    return InquireVariableCommon<short>(name, readIn);
 }
 
 Variable<unsigned short> *
 DataManReader::InquireVariableUShort(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned short>(name, readIn);
+    return InquireVariableCommon<unsigned short>(name, readIn);
 }
 
 Variable<int> *DataManReader::InquireVariableInt(const std::string name,
                                                  const bool readIn)
 {
-  return InquireVariableCommon<int>(name, readIn);
+    return InquireVariableCommon<int>(name, readIn);
 }
 
 Variable<unsigned int> *
 DataManReader::InquireVariableUInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned int>(name, readIn);
+    return InquireVariableCommon<unsigned int>(name, readIn);
 }
 
 Variable<long int> *DataManReader::InquireVariableLInt(const std::string name,
                                                        const bool readIn)
 {
-  return InquireVariableCommon<long int>(name, readIn);
+    return InquireVariableCommon<long int>(name, readIn);
 }
 
 Variable<unsigned long int> *
 DataManReader::InquireVariableULInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long int>(name, readIn);
+    return InquireVariableCommon<unsigned long int>(name, readIn);
 }
 
 Variable<long long int> *
 DataManReader::InquireVariableLLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long long int>(name, readIn);
+    return InquireVariableCommon<long long int>(name, readIn);
 }
 
 Variable<unsigned long long int> *
 DataManReader::InquireVariableULLInt(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<unsigned long long int>(name, readIn);
+    return InquireVariableCommon<unsigned long long int>(name, readIn);
 }
 
 Variable<float> *DataManReader::InquireVariableFloat(const std::string name,
                                                      const bool readIn)
 {
-  return InquireVariableCommon<float>(name, readIn);
+    return InquireVariableCommon<float>(name, readIn);
 }
 
 Variable<double> *DataManReader::InquireVariableDouble(const std::string name,
                                                        const bool readIn)
 {
-  return InquireVariableCommon<double>(name, readIn);
+    return InquireVariableCommon<double>(name, readIn);
 }
 
 Variable<long double> *
 DataManReader::InquireVariableLDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<long double>(name, readIn);
+    return InquireVariableCommon<long double>(name, readIn);
 }
 
 Variable<std::complex<float>> *
 DataManReader::InquireVariableCFloat(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<float>>(name, readIn);
+    return InquireVariableCommon<std::complex<float>>(name, readIn);
 }
 
 Variable<std::complex<double>> *
 DataManReader::InquireVariableCDouble(const std::string name, const bool readIn)
 {
-  return InquireVariableCommon<std::complex<double>>(name, readIn);
+    return InquireVariableCommon<std::complex<double>>(name, readIn);
 }
 
 Variable<std::complex<long double>> *
 DataManReader::InquireVariableCLDouble(const std::string name,
                                        const bool readIn)
 {
-  return InquireVariableCommon<std::complex<long double>>(name, readIn);
+    return InquireVariableCommon<std::complex<long double>>(name, readIn);
 }
 
 VariableCompound *DataManReader::InquireVariableCompound(const std::string name,
                                                          const bool readIn)
 {
-  return nullptr;
+    return nullptr;
 }
 
 void DataManReader::Close(const int transportIndex) {}
@@ -160,159 +160,163 @@ void DataManReader::Close(const int transportIndex) {}
 // PRIVATE
 void DataManReader::Init()
 {
-  if (m_DebugMode == true)
-  {
-    if (m_AccessMode != "r" && m_AccessMode != "read")
-      throw std::invalid_argument(
-          "ERROR: DataManReader doesn't support access mode " + m_AccessMode +
-          ", in call to ADIOS Open or DataManReader constructor\n");
-  }
-
-  auto itRealTime = m_Method.m_Parameters.find("real_time");
-  if (itRealTime != m_Method.m_Parameters.end())
-  {
-    if (itRealTime->second == "yes" || itRealTime->second == "true")
-      m_DoRealTime = true;
-  }
-
-  if (m_DoRealTime)
-  {
-    /**
-     * Lambda function that assigns a parameter in m_Method to a localVariable
-     * of type std::string
-     */
-    auto lf_AssignString = [this](const std::string parameter,
-                                  std::string &localVariable) {
-      auto it = m_Method.m_Parameters.find(parameter);
-      if (it != m_Method.m_Parameters.end())
-      {
-        localVariable = it->second;
-      }
-    };
-
-    /**
-     * Lambda function that assigns a parameter in m_Method to a localVariable
-     * of type int
-     */
-    auto lf_AssignInt = [this](const std::string parameter,
-                               int &localVariable) {
-      auto it = m_Method.m_Parameters.find(parameter);
-      if (it != m_Method.m_Parameters.end())
-      {
-        localVariable = std::stoi(it->second);
-      }
-    };
-
-    auto is_number = [](const std::string &s) {
-      return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) {
-                             return !std::isdigit(c);
-                           }) == s.end();
-    };
-
-    json jmsg;
-    for (auto &i : m_Method.m_Parameters)
+    if (m_DebugMode == true)
+    {
+        if (m_AccessMode != "r" && m_AccessMode != "read")
+            throw std::invalid_argument(
+                "ERROR: DataManReader doesn't support access mode " +
+                m_AccessMode +
+                ", in call to ADIOS Open or DataManReader constructor\n");
+    }
+
+    auto itRealTime = m_Method.m_Parameters.find("real_time");
+    if (itRealTime != m_Method.m_Parameters.end())
     {
-      if (is_number(i.second))
-      {
-        jmsg[i.first] = std::stoi(i.second);
-      }
-      else
-      {
-        jmsg[i.first] = i.second;
-      }
+        if (itRealTime->second == "yes" || itRealTime->second == "true")
+            m_DoRealTime = true;
+    }
+
+    if (m_DoRealTime)
+    {
+        /**
+         * Lambda function that assigns a parameter in m_Method to a
+         * localVariable
+         * of type std::string
+         */
+        auto lf_AssignString = [this](const std::string parameter,
+                                      std::string &localVariable) {
+            auto it = m_Method.m_Parameters.find(parameter);
+            if (it != m_Method.m_Parameters.end())
+            {
+                localVariable = it->second;
+            }
+        };
+
+        /**
+         * Lambda function that assigns a parameter in m_Method to a
+         * localVariable
+         * of type int
+         */
+        auto lf_AssignInt = [this](const std::string parameter,
+                                   int &localVariable) {
+            auto it = m_Method.m_Parameters.find(parameter);
+            if (it != m_Method.m_Parameters.end())
+            {
+                localVariable = std::stoi(it->second);
+            }
+        };
+
+        auto is_number = [](const std::string &s) {
+            return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) {
+                                     return !std::isdigit(c);
+                                 }) == s.end();
+        };
+
+        json jmsg;
+        for (auto &i : m_Method.m_Parameters)
+        {
+            if (is_number(i.second))
+            {
+                jmsg[i.first] = std::stoi(i.second);
+            }
+            else
+            {
+                jmsg[i.first] = i.second;
+            }
+        }
+        jmsg["stream_mode"] = "receiver";
+        m_Man.add_stream(jmsg);
+
+        std::string method_type;
+        int num_channels = 0;
+        lf_AssignString("method_type", method_type);
+        lf_AssignInt("num_channels", num_channels);
+    }
+    else
+    {
+        InitCapsules();
+        InitTransports();
     }
-    jmsg["stream_mode"] = "receiver";
-    m_Man.add_stream(jmsg);
-
-    std::string method_type;
-    int num_channels = 0;
-    lf_AssignString("method_type", method_type);
-    lf_AssignInt("num_channels", num_channels);
-  }
-  else
-  {
-    InitCapsules();
-    InitTransports();
-  }
 }
 
 void DataManReader::InitCapsules()
 {
-  // here init memory capsules
+    // here init memory capsules
 }
 
 void DataManReader::InitTransports() // maybe move this?
 {
-  TransportNamesUniqueness();
+    TransportNamesUniqueness();
 
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itTransport = parameters.find("transport");
-
-    if (itTransport->second == "Mdtm" || itTransport->second == "MdtmMan")
-    {
-      const std::string localIP(
-          GetMdtmParameter("localIP", parameters)); // mandatory
-      const std::string remoteIP(
-          GetMdtmParameter("remoteIP", parameters)); // mandatory
-      const std::string prefix(GetMdtmParameter("prefix", parameters));
-      const int numberOfPipes =
-          std::stoi(GetMdtmParameter("pipes", parameters));
-      const std::vector<int> tolerances =
-          CSVToVectorInt(GetMdtmParameter("tolerances", parameters));
-      const std::vector<int> priorities =
-          CSVToVectorInt(GetMdtmParameter("priorities", parameters));
-
-      m_Transports.push_back(std::make_shared<transport::MdtmMan>(
-          localIP, remoteIP, m_AccessMode, prefix, numberOfPipes, tolerances,
-          priorities, m_MPIComm, m_DebugMode));
-    }
-    else if (itTransport->second == "Zmq")
-    {
-    }
-    else
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      if (m_DebugMode == true)
-        throw std::invalid_argument(
-            "ERROR: transport + " + itTransport->second +
-            " not supported, in " + m_Name + m_EndMessage);
+        auto itTransport = parameters.find("transport");
+
+        if (itTransport->second == "Mdtm" || itTransport->second == "MdtmMan")
+        {
+            const std::string localIP(
+                GetMdtmParameter("localIP", parameters)); // mandatory
+            const std::string remoteIP(
+                GetMdtmParameter("remoteIP", parameters)); // mandatory
+            const std::string prefix(GetMdtmParameter("prefix", parameters));
+            const int numberOfPipes =
+                std::stoi(GetMdtmParameter("pipes", parameters));
+            const std::vector<int> tolerances =
+                CSVToVectorInt(GetMdtmParameter("tolerances", parameters));
+            const std::vector<int> priorities =
+                CSVToVectorInt(GetMdtmParameter("priorities", parameters));
+
+            m_Transports.push_back(std::make_shared<transport::MdtmMan>(
+                localIP, remoteIP, m_AccessMode, prefix, numberOfPipes,
+                tolerances, priorities, m_MPIComm, m_DebugMode));
+        }
+        else if (itTransport->second == "Zmq")
+        {
+        }
+        else
+        {
+            if (m_DebugMode == true)
+                throw std::invalid_argument(
+                    "ERROR: transport + " + itTransport->second +
+                    " not supported, in " + m_Name + m_EndMessage);
+        }
     }
-  }
 }
 
 std::string DataManReader::GetMdtmParameter(
     const std::string parameter,
     const std::map<std::string, std::string> &mdtmParameters)
 {
-  auto itParam = mdtmParameters.find(parameter);
-  if (itParam != mdtmParameters.end()) // found
-  {
-    return itParam->second; // return value
-  }
-  // if not found
-  // mandatory ones
-  if (parameter == "localIP" || parameter == "remoteIP")
-  {
-    if (m_DebugMode == true)
-      throw std::invalid_argument("ERROR: " + parameter +
-                                  " parameter not found in Method, in call to "
-                                  "DataManWriter constructor\n");
-  }
-  else if (parameter == "prefix")
-  {
-    return "";
-  }
-  else if (parameter == "pipes")
-  {
-    return "0"; // or 1?
-  }
-  else if (parameter == "tolerances") // so far empty string
-  {
-  }
-  else if (parameter == "priority")
-  {
-  }
-
-  return ""; // return empty string
+    auto itParam = mdtmParameters.find(parameter);
+    if (itParam != mdtmParameters.end()) // found
+    {
+        return itParam->second; // return value
+    }
+    // if not found
+    // mandatory ones
+    if (parameter == "localIP" || parameter == "remoteIP")
+    {
+        if (m_DebugMode == true)
+            throw std::invalid_argument(
+                "ERROR: " + parameter +
+                " parameter not found in Method, in call to "
+                "DataManWriter constructor\n");
+    }
+    else if (parameter == "prefix")
+    {
+        return "";
+    }
+    else if (parameter == "pipes")
+    {
+        return "0"; // or 1?
+    }
+    else if (parameter == "tolerances") // so far empty string
+    {
+    }
+    else if (parameter == "priority")
+    {
+    }
+
+    return ""; // return empty string
 }
 }
diff --git a/source/engine/dataman/DataManWriter.cpp b/source/engine/dataman/DataManWriter.cpp
index 8e5383fff204b841800f29b9ba3617813f096aec..f8d16e8a6f7b829ef0407d56709151e12402057f 100644
--- a/source/engine/dataman/DataManWriter.cpp
+++ b/source/engine/dataman/DataManWriter.cpp
@@ -24,14 +24,12 @@ namespace adios
 
 DataManWriter::DataManWriter(ADIOS &adios, const std::string name,
                              const std::string accessMode, MPI_Comm mpiComm,
-                             const Method &method, const IOMode iomode,
-                             const float timeout_sec, const bool debugMode,
-                             const unsigned int nthreads)
+                             const Method &method)
 : Engine(adios, "DataManWriter", name, accessMode, mpiComm, method,
          " DataManWriter constructor (or call to ADIOS Open).\n"),
   m_Buffer(accessMode, m_RankMPI, m_DebugMode)
 {
-  Init();
+    Init();
 }
 
 DataManWriter::~DataManWriter() {}
@@ -41,370 +39,378 @@ void DataManWriter::SetCallBack(
                        Dims)>
         callback)
 {
-  m_CallBack = callback;
-  m_Man.reg_callback(callback);
+    m_CallBack = callback;
+    m_Man.reg_callback(callback);
 }
 
 void DataManWriter::Write(Variable<char> &variable, const char *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<unsigned char> &variable,
                           const unsigned char *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<short> &variable, const short *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<unsigned short> &variable,
                           const unsigned short *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<int> &variable, const int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<unsigned int> &variable,
                           const unsigned int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<long int> &variable, const long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<unsigned long int> &variable,
                           const unsigned long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<long long int> &variable,
                           const long long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<unsigned long long int> &variable,
                           const unsigned long long int *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<float> &variable, const float *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<double> &variable, const double *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<long double> &variable,
                           const long double *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<std::complex<float>> &variable,
                           const std::complex<float> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<std::complex<double>> &variable,
                           const std::complex<double> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 void DataManWriter::Write(Variable<std::complex<long double>> &variable,
                           const std::complex<long double> *values)
 {
-  WriteVariableCommon(variable, values);
+    WriteVariableCommon(variable, values);
 }
 
 // String version
-void DataManWriter::Write(const std::string variableName, const char *values)
+void DataManWriter::Write(const std::string &variableName, const char *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<char>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<char>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const unsigned char *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned char>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned char>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName, const short *values)
+void DataManWriter::Write(const std::string &variableName, const short *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<short>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<short>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const unsigned short *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned short>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned short>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName, const int *values)
+void DataManWriter::Write(const std::string &variableName, const int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<int>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const unsigned int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned int>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long int>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const unsigned long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned long int>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<unsigned long int>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const long long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long long int>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long long int>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const unsigned long long int *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<unsigned long long int>(variableName),
-                      values);
+    WriteVariableCommon(
+        m_ADIOS.GetVariable<unsigned long long int>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName, const float *values)
+void DataManWriter::Write(const std::string &variableName, const float *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<float>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<float>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName, const double *values)
+void DataManWriter::Write(const std::string &variableName, const double *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<double>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<double>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const long double *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<long double>(variableName), values);
+    WriteVariableCommon(m_ADIOS.GetVariable<long double>(variableName), values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const std::complex<float> *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<std::complex<float>>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<std::complex<float>>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const std::complex<double> *values)
 {
-  WriteVariableCommon(m_ADIOS.GetVariable<std::complex<double>>(variableName),
-                      values);
+    WriteVariableCommon(m_ADIOS.GetVariable<std::complex<double>>(variableName),
+                        values);
 }
 
-void DataManWriter::Write(const std::string variableName,
+void DataManWriter::Write(const std::string &variableName,
                           const std::complex<long double> *values)
 {
-  WriteVariableCommon(
-      m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
+    WriteVariableCommon(
+        m_ADIOS.GetVariable<std::complex<long double>>(variableName), values);
 }
 
 void DataManWriter::Close(const int transportIndex)
 {
-  m_Man.flush();
-  // here close IPs and deallocate or free/close resources (if using STL no need
-  // for memory deallocation)
+    m_Man.flush();
+    // here close IPs and deallocate or free/close resources (if using STL no
+    // need
+    // for memory deallocation)
 }
 
 // PRIVATE functions below
 void DataManWriter::Init()
 {
-  if (m_DebugMode == true)
-  {
-    if (m_AccessMode != "w" && m_AccessMode != "write" && m_AccessMode != "a" &&
-        m_AccessMode != "append")
-      throw std::invalid_argument(
-          "ERROR: DataManWriter doesn't support access mode " + m_AccessMode +
-          ", in call to ADIOS Open or DataManWriter constructor\n");
-  }
-
-  auto itRealTime = m_Method.m_Parameters.find("real_time");
-  if (itRealTime != m_Method.m_Parameters.end())
-  {
-    if (itRealTime->second == "yes" || itRealTime->second == "true")
-      m_DoRealTime = true;
-  }
-
-  itRealTime = m_Method.m_Parameters.find("monitoring");
-  if (itRealTime != m_Method.m_Parameters.end())
-  {
-    if (itRealTime->second == "yes" || itRealTime->second == "true")
-      m_DoMonitor = true;
-  }
-
-  if (m_DoRealTime)
-  {
-    /**
-     * Lambda function that assigns a parameter in m_Method to a localVariable
-     * of type std::string
-     */
-    auto lf_AssignString = [this](const std::string parameter,
-                                  std::string &localVariable) {
-      auto it = m_Method.m_Parameters.find(parameter);
-      if (it != m_Method.m_Parameters.end())
-      {
-        localVariable = it->second;
-      }
-    };
-
-    /**
-     * Lambda function that assigns a parameter in m_Method to a localVariable
-     * of type int
-     */
-    auto lf_AssignInt = [this](const std::string parameter,
-                               int &localVariable) {
-      auto it = m_Method.m_Parameters.find(parameter);
-      if (it != m_Method.m_Parameters.end())
-      {
-        localVariable = std::stoi(it->second);
-      }
-    };
-
-    auto is_number = [](const std::string &s) {
-      return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) {
-                             return !std::isdigit(c);
-                           }) == s.end();
-    };
-
-    json jmsg;
-    for (auto &i : m_Method.m_Parameters)
+    if (m_DebugMode == true)
+    {
+        if (m_AccessMode != "w" && m_AccessMode != "write" &&
+            m_AccessMode != "a" && m_AccessMode != "append")
+            throw std::invalid_argument(
+                "ERROR: DataManWriter doesn't support access mode " +
+                m_AccessMode +
+                ", in call to ADIOS Open or DataManWriter constructor\n");
+    }
+
+    auto itRealTime = m_Method.m_Parameters.find("real_time");
+    if (itRealTime != m_Method.m_Parameters.end())
     {
-      if (is_number(i.second))
-      {
-        jmsg[i.first] = std::stoi(i.second);
-      }
-      else
-      {
-        jmsg[i.first] = i.second;
-      }
+        if (itRealTime->second == "yes" || itRealTime->second == "true")
+            m_DoRealTime = true;
     }
-    jmsg["stream_mode"] = "sender";
-    m_Man.add_stream(jmsg);
 
-    std::string method_type;
-    int num_channels = 0;
-    lf_AssignString("method_type", method_type);
-    lf_AssignInt("num_channels", num_channels);
-  }
-  else
-  {
-    InitCapsules();
-    InitTransports();
-  }
+    itRealTime = m_Method.m_Parameters.find("monitoring");
+    if (itRealTime != m_Method.m_Parameters.end())
+    {
+        if (itRealTime->second == "yes" || itRealTime->second == "true")
+            m_DoMonitor = true;
+    }
+
+    if (m_DoRealTime)
+    {
+        /**
+         * Lambda function that assigns a parameter in m_Method to a
+         * localVariable
+         * of type std::string
+         */
+        auto lf_AssignString = [this](const std::string parameter,
+                                      std::string &localVariable) {
+            auto it = m_Method.m_Parameters.find(parameter);
+            if (it != m_Method.m_Parameters.end())
+            {
+                localVariable = it->second;
+            }
+        };
+
+        /**
+         * Lambda function that assigns a parameter in m_Method to a
+         * localVariable
+         * of type int
+         */
+        auto lf_AssignInt = [this](const std::string parameter,
+                                   int &localVariable) {
+            auto it = m_Method.m_Parameters.find(parameter);
+            if (it != m_Method.m_Parameters.end())
+            {
+                localVariable = std::stoi(it->second);
+            }
+        };
+
+        auto is_number = [](const std::string &s) {
+            return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) {
+                                     return !std::isdigit(c);
+                                 }) == s.end();
+        };
+
+        json jmsg;
+        for (auto &i : m_Method.m_Parameters)
+        {
+            if (is_number(i.second))
+            {
+                jmsg[i.first] = std::stoi(i.second);
+            }
+            else
+            {
+                jmsg[i.first] = i.second;
+            }
+        }
+        jmsg["stream_mode"] = "sender";
+        m_Man.add_stream(jmsg);
+
+        std::string method_type;
+        int num_channels = 0;
+        lf_AssignString("method_type", method_type);
+        lf_AssignInt("num_channels", num_channels);
+    }
+    else
+    {
+        InitCapsules();
+        InitTransports();
+    }
 }
 
 void DataManWriter::InitCapsules()
 {
-  // here init memory capsules
+    // here init memory capsules
 }
 
 void DataManWriter::InitTransports() // maybe move this?
 {
-  TransportNamesUniqueness();
+    TransportNamesUniqueness();
 
-  for (const auto &parameters : m_Method.m_TransportParameters)
-  {
-    auto itTransport = parameters.find("transport");
-
-    if (itTransport->second == "Mdtm" || itTransport->second == "MdtmMan")
-    {
-      const std::string localIP(
-          GetMdtmParameter("localIP", parameters)); // mandatory
-      const std::string remoteIP(
-          GetMdtmParameter("remoteIP", parameters)); // mandatory
-      const std::string prefix(GetMdtmParameter("prefix", parameters));
-      const int numberOfPipes =
-          std::stoi(GetMdtmParameter("pipes", parameters));
-      const std::vector<int> tolerances =
-          CSVToVectorInt(GetMdtmParameter("tolerances", parameters));
-      const std::vector<int> priorities =
-          CSVToVectorInt(GetMdtmParameter("priorities", parameters));
-
-      m_Transports.push_back(std::make_shared<transport::MdtmMan>(
-          localIP, remoteIP, m_AccessMode, prefix, numberOfPipes, tolerances,
-          priorities, m_MPIComm, m_DebugMode));
-    }
-    else if (itTransport->second == "Zmq")
-    {
-    }
-    else
+    for (const auto &parameters : m_Method.m_TransportParameters)
     {
-      if (m_DebugMode == true)
-        throw std::invalid_argument(
-            "ERROR: transport + " + itTransport->second +
-            " not supported, in " + m_Name + m_EndMessage);
+        auto itTransport = parameters.find("transport");
+
+        if (itTransport->second == "Mdtm" || itTransport->second == "MdtmMan")
+        {
+            const std::string localIP(
+                GetMdtmParameter("localIP", parameters)); // mandatory
+            const std::string remoteIP(
+                GetMdtmParameter("remoteIP", parameters)); // mandatory
+            const std::string prefix(GetMdtmParameter("prefix", parameters));
+            const int numberOfPipes =
+                std::stoi(GetMdtmParameter("pipes", parameters));
+            const std::vector<int> tolerances =
+                CSVToVectorInt(GetMdtmParameter("tolerances", parameters));
+            const std::vector<int> priorities =
+                CSVToVectorInt(GetMdtmParameter("priorities", parameters));
+
+            m_Transports.push_back(std::make_shared<transport::MdtmMan>(
+                localIP, remoteIP, m_AccessMode, prefix, numberOfPipes,
+                tolerances, priorities, m_MPIComm, m_DebugMode));
+        }
+        else if (itTransport->second == "Zmq")
+        {
+        }
+        else
+        {
+            if (m_DebugMode == true)
+                throw std::invalid_argument(
+                    "ERROR: transport + " + itTransport->second +
+                    " not supported, in " + m_Name + m_EndMessage);
+        }
     }
-  }
 }
 
 std::string DataManWriter::GetMdtmParameter(
     const std::string parameter,
     const std::map<std::string, std::string> &mdtmParameters)
 {
-  auto itParam = mdtmParameters.find(parameter);
-  if (itParam != mdtmParameters.end()) // found
-  {
-    return itParam->second; // return value
-  }
-  // if not found
-  // mandatory ones
-  if (parameter == "localIP" || parameter == "remoteIP")
-  {
-    if (m_DebugMode == true)
-      throw std::invalid_argument("ERROR: " + parameter +
-                                  " parameter not found in Method, in call to "
-                                  "DataManWriter constructor\n");
-  }
-  else if (parameter == "prefix")
-  {
-    return "";
-  }
-  else if (parameter == "pipes")
-  {
-    return "0"; // or 1?
-  }
-  else if (parameter == "tolerances") // so far empty string
-  {
-  }
-  else if (parameter == "priority")
-  {
-  }
-
-  return ""; // return empty string
+    auto itParam = mdtmParameters.find(parameter);
+    if (itParam != mdtmParameters.end()) // found
+    {
+        return itParam->second; // return value
+    }
+    // if not found
+    // mandatory ones
+    if (parameter == "localIP" || parameter == "remoteIP")
+    {
+        if (m_DebugMode == true)
+            throw std::invalid_argument(
+                "ERROR: " + parameter +
+                " parameter not found in Method, in call to "
+                "DataManWriter constructor\n");
+    }
+    else if (parameter == "prefix")
+    {
+        return "";
+    }
+    else if (parameter == "pipes")
+    {
+        return "0"; // or 1?
+    }
+    else if (parameter == "tolerances") // so far empty string
+    {
+    }
+    else if (parameter == "priority")
+    {
+    }
+
+    return ""; // return empty string
 }
 
 } // end namespace adios
diff --git a/source/functions/adiosFunctions.cpp b/source/functions/adiosFunctions.cpp
index 78393c641f2c502c35728c46e590252ff8580749..0946dc0d6efa6d79860a595f0ff0be85ad84d8f4 100644
--- a/source/functions/adiosFunctions.cpp
+++ b/source/functions/adiosFunctions.cpp
@@ -35,197 +35,202 @@ namespace adios
 
 void DumpFileToString(const std::string fileName, std::string &fileContent)
 {
-  std::ifstream fileStream(fileName);
-
-  if (fileStream.good() == false)
-  { // check file
-    throw std::ios_base::failure(
-        "ERROR: file " + fileName +
-        " could not be opened. Check permissions or file existence\n");
-  }
-
-  std::ostringstream fileSS;
-  fileSS << fileStream.rdbuf();
-  fileStream.close();
-  fileContent = fileSS.str(); // convert to string and check
-
-  if (fileContent.empty())
-  {
-    throw std::invalid_argument("ERROR: file " + fileName + " is empty\n");
-  }
+    std::ifstream fileStream(fileName);
+
+    if (fileStream.good() == false)
+    { // check file
+        throw std::ios_base::failure(
+            "ERROR: file " + fileName +
+            " could not be opened. Check permissions or file existence\n");
+    }
+
+    std::ostringstream fileSS;
+    fileSS << fileStream.rdbuf();
+    fileStream.close();
+    fileContent = fileSS.str(); // convert to string and check
+
+    if (fileContent.empty())
+    {
+        throw std::invalid_argument("ERROR: file " + fileName + " is empty\n");
+    }
 }
 
 void GetSubString(const std::string initialTag, const std::string finalTag,
                   const std::string content, std::string &subString,
                   std::string::size_type &currentPosition)
 {
-  auto lf_Wipe = [](std::string &subString,
-                    std::string::size_type &currentPosition) {
-    subString.clear();
-    currentPosition = std::string::npos;
-  };
-
-  auto lf_SetPositions =
-      [](const char quote, const std::string::size_type quotePosition,
-         const std::string &content, std::string::size_type &currentPosition,
-         std::string::size_type &closingQuotePosition) {
-        currentPosition = quotePosition;
-        closingQuotePosition = content.find(quote, currentPosition + 1);
-      };
-
-  // BODY OF FUNCTION STARTS HERE
-  std::string::size_type start(content.find(initialTag, currentPosition));
-  if (start == content.npos)
-  {
-    lf_Wipe(subString, currentPosition);
-    return;
-  }
-  currentPosition = start;
-
-  std::string::size_type end(content.find(finalTag, currentPosition));
-  if (end == content.npos)
-  {
-    lf_Wipe(subString, currentPosition);
-    return;
-  }
-
-  // here make sure the finalTag is not a value surrounded by " " or ' ', if so
-  // find next
-  bool isValue = true;
-
-  while (isValue == true)
-  {
-    std::string::size_type singleQuotePosition =
-        content.find('\'', currentPosition);
-    std::string::size_type doubleQuotePosition =
-        content.find('\"', currentPosition);
-
-    if ((singleQuotePosition == content.npos &&
-         doubleQuotePosition == content.npos) ||
-        (singleQuotePosition == content.npos && end < doubleQuotePosition) ||
-        (doubleQuotePosition == content.npos && end < singleQuotePosition) ||
-        (end < singleQuotePosition && end < doubleQuotePosition))
+    auto lf_Wipe = [](std::string &subString,
+                      std::string::size_type &currentPosition) {
+        subString.clear();
+        currentPosition = std::string::npos;
+    };
+
+    auto lf_SetPositions =
+        [](const char quote, const std::string::size_type quotePosition,
+           const std::string &content, std::string::size_type &currentPosition,
+           std::string::size_type &closingQuotePosition) {
+            currentPosition = quotePosition;
+            closingQuotePosition = content.find(quote, currentPosition + 1);
+        };
+
+    // BODY OF FUNCTION STARTS HERE
+    std::string::size_type start(content.find(initialTag, currentPosition));
+    if (start == content.npos)
     {
-      break;
+        lf_Wipe(subString, currentPosition);
+        return;
     }
+    currentPosition = start;
 
-    // find the closing corresponding quote
-    std::string::size_type closingQuotePosition;
-
-    if (singleQuotePosition == content.npos)
-    { // no ' anywhere
-      lf_SetPositions('\"', doubleQuotePosition, content, currentPosition,
-                      closingQuotePosition);
-    }
-    else if (doubleQuotePosition == content.npos)
-    { // no " anywhere
-      lf_SetPositions('\'', singleQuotePosition, content, currentPosition,
-                      closingQuotePosition);
-    }
-    else
+    std::string::size_type end(content.find(finalTag, currentPosition));
+    if (end == content.npos)
     {
-      if (singleQuotePosition < doubleQuotePosition)
-      {
-        lf_SetPositions('\'', singleQuotePosition, content, currentPosition,
-                        closingQuotePosition);
-      }
-      else
-      { // find the closing "
-        lf_SetPositions('\"', doubleQuotePosition, content, currentPosition,
-                        closingQuotePosition);
-      }
+        lf_Wipe(subString, currentPosition);
+        return;
     }
 
-    if (closingQuotePosition ==
-        content.npos) // if can't find closing it's open until the end
+    // here make sure the finalTag is not a value surrounded by " " or ' ', if
+    // so
+    // find next
+    bool isValue = true;
+
+    while (isValue == true)
     {
-      lf_Wipe(subString, currentPosition);
-      return;
-    }
+        std::string::size_type singleQuotePosition =
+            content.find('\'', currentPosition);
+        std::string::size_type doubleQuotePosition =
+            content.find('\"', currentPosition);
+
+        if ((singleQuotePosition == content.npos &&
+             doubleQuotePosition == content.npos) ||
+            (singleQuotePosition == content.npos &&
+             end < doubleQuotePosition) ||
+            (doubleQuotePosition == content.npos &&
+             end < singleQuotePosition) ||
+            (end < singleQuotePosition && end < doubleQuotePosition))
+        {
+            break;
+        }
 
-    currentPosition = closingQuotePosition + 1;
+        // find the closing corresponding quote
+        std::string::size_type closingQuotePosition;
 
-    if (closingQuotePosition < end)
-    {
-      continue;
-    }
+        if (singleQuotePosition == content.npos)
+        { // no ' anywhere
+            lf_SetPositions('\"', doubleQuotePosition, content, currentPosition,
+                            closingQuotePosition);
+        }
+        else if (doubleQuotePosition == content.npos)
+        { // no " anywhere
+            lf_SetPositions('\'', singleQuotePosition, content, currentPosition,
+                            closingQuotePosition);
+        }
+        else
+        {
+            if (singleQuotePosition < doubleQuotePosition)
+            {
+                lf_SetPositions('\'', singleQuotePosition, content,
+                                currentPosition, closingQuotePosition);
+            }
+            else
+            { // find the closing "
+                lf_SetPositions('\"', doubleQuotePosition, content,
+                                currentPosition, closingQuotePosition);
+            }
+        }
+
+        if (closingQuotePosition ==
+            content.npos) // if can't find closing it's open until the end
+        {
+            lf_Wipe(subString, currentPosition);
+            return;
+        }
+
+        currentPosition = closingQuotePosition + 1;
+
+        if (closingQuotePosition < end)
+        {
+            continue;
+        }
 
-    // if this point is reached it means it's a value inside " " or ' ', move to
-    // the next end
-    end = content.find(finalTag, currentPosition);
-  }
+        // if this point is reached it means it's a value inside " " or ' ',
+        // move to
+        // the next end
+        end = content.find(finalTag, currentPosition);
+    }
 
-  subString = content.substr(start, end - start + finalTag.size());
-  currentPosition = end;
+    subString = content.substr(start, end - start + finalTag.size());
+    currentPosition = end;
 }
 
 void GetQuotedValue(const char quote,
                     const std::string::size_type &quotePosition,
                     std::string &currentTag, std::string &value)
 {
-  currentTag = currentTag.substr(quotePosition + 1);
-  auto nextQuotePosition = currentTag.find(quote);
+    currentTag = currentTag.substr(quotePosition + 1);
+    auto nextQuotePosition = currentTag.find(quote);
 
-  if (nextQuotePosition == currentTag.npos)
-  {
-    throw std::invalid_argument("ERROR: Invalid attribute in..." + currentTag +
-                                "...check XML file\n");
-  }
+    if (nextQuotePosition == currentTag.npos)
+    {
+        throw std::invalid_argument("ERROR: Invalid attribute in..." +
+                                    currentTag + "...check XML file\n");
+    }
 
-  value = currentTag.substr(0, nextQuotePosition);
-  currentTag = currentTag.substr(nextQuotePosition + 1);
+    value = currentTag.substr(0, nextQuotePosition);
+    currentTag = currentTag.substr(nextQuotePosition + 1);
 }
 
 void GetPairs(const std::string tag,
               std::vector<std::pair<const std::string, const std::string>>
                   &pairs) noexcept
 {
-  std::string currentTag(
-      tag.substr(tag.find_first_of(" \t\n"))); // initialize current tag
-
-  while (currentTag.find('=') != currentTag.npos) // equalPosition
-  {
-    currentTag = currentTag.substr(currentTag.find_first_not_of(" \t\n"));
-    auto equalPosition = currentTag.find('=');
-    const std::string field(currentTag.substr(0, equalPosition)); // get field
-    std::string value;
-
-    const char quote = currentTag[equalPosition + 1];
-    if (quote == '\'' || quote == '"') // single quotes
+    std::string currentTag(
+        tag.substr(tag.find_first_of(" \t\n"))); // initialize current tag
+
+    while (currentTag.find('=') != currentTag.npos) // equalPosition
     {
-      GetQuotedValue(quote, equalPosition + 1, currentTag, value);
-    }
+        currentTag = currentTag.substr(currentTag.find_first_not_of(" \t\n"));
+        auto equalPosition = currentTag.find('=');
+        const std::string field(
+            currentTag.substr(0, equalPosition)); // get field
+        std::string value;
+
+        const char quote = currentTag[equalPosition + 1];
+        if (quote == '\'' || quote == '"') // single quotes
+        {
+            GetQuotedValue(quote, equalPosition + 1, currentTag, value);
+        }
 
-    pairs.push_back(
-        std::pair<const std::string, const std::string>(field, value));
-  }
+        pairs.push_back(
+            std::pair<const std::string, const std::string>(field, value));
+    }
 }
 
 void GetPairsFromTag(
     const std::string &fileContent, const std::string tag,
     std::vector<std::pair<const std::string, const std::string>> &pairs)
 {
-  if (tag.back() == '/') // last char is / --> "XML empty tag"
-  {
-    GetPairs(tag, pairs);
-  }
-  else if (tag[0] == '/') // first char is / ---> closing tag
-  {
-  }
-  else // opening tag
-  {
-    const std::string tagName(tag.substr(0, tag.find_first_of(" \t\n\r")));
-    const std::string closingTagName("</" + tagName +
-                                     ">"); // check for closing tagName
-
-    if (fileContent.find(closingTagName) == fileContent.npos)
+    if (tag.back() == '/') // last char is / --> "XML empty tag"
     {
-      throw std::invalid_argument("ERROR: closing tag " + closingTagName +
-                                  " missing, check XML file\n");
+        GetPairs(tag, pairs);
     }
+    else if (tag[0] == '/') // first char is / ---> closing tag
+    {
+    }
+    else // opening tag
+    {
+        const std::string tagName(tag.substr(0, tag.find_first_of(" \t\n\r")));
+        const std::string closingTagName("</" + tagName +
+                                         ">"); // check for closing tagName
 
-    GetPairs(tag, pairs);
-  }
+        if (fileContent.find(closingTagName) == fileContent.npos)
+        {
+            throw std::invalid_argument("ERROR: closing tag " + closingTagName +
+                                        " missing, check XML file\n");
+        }
+
+        GetPairs(tag, pairs);
+    }
 }
 
 // void SetMembers( const std::string& fileContent, const MPI_Comm mpiComm,
@@ -428,48 +433,48 @@ void GetPairsFromTag(
 
 std::size_t GetTotalSize(const std::vector<std::size_t> &dimensions)
 {
-  std::size_t product = 1;
+    std::size_t product = 1;
 
-  for (const auto dimension : dimensions)
-  {
-    product *= dimension;
-  }
+    for (const auto dimension : dimensions)
+    {
+        product *= dimension;
+    }
 
-  return product;
+    return product;
 }
 
 void CreateDirectory(const std::string fullPath) noexcept
 {
-  auto lf_Mkdir = [](const std::string directory, struct stat &st) {
-    if (stat(directory.c_str(), &st) == -1)
-    {
-      mkdir(directory.c_str(), 0777);
-    }
-  };
-
-  auto directoryPosition = fullPath.find("/");
+    auto lf_Mkdir = [](const std::string directory, struct stat &st) {
+        if (stat(directory.c_str(), &st) == -1)
+        {
+            mkdir(directory.c_str(), 0777);
+        }
+    };
 
-  if (fullPath[0] == '/' || fullPath[0] == '.')
-  { // find the second '/'
-    directoryPosition = fullPath.find("/", directoryPosition + 1);
-  }
+    auto directoryPosition = fullPath.find("/");
 
-  struct stat st = {0};
-  if (directoryPosition == fullPath.npos) // no subdirectories
-  {
-    lf_Mkdir(fullPath.c_str(), st);
-    return;
-  }
+    if (fullPath[0] == '/' || fullPath[0] == '.')
+    { // find the second '/'
+        directoryPosition = fullPath.find("/", directoryPosition + 1);
+    }
 
-  std::string directory(fullPath.substr(0, directoryPosition));
-  lf_Mkdir(directory.c_str(), st);
+    struct stat st = {0};
+    if (directoryPosition == fullPath.npos) // no subdirectories
+    {
+        lf_Mkdir(fullPath.c_str(), st);
+        return;
+    }
 
-  while (directoryPosition != fullPath.npos)
-  {
-    directoryPosition = fullPath.find("/", directoryPosition + 1);
-    directory = fullPath.substr(0, directoryPosition);
+    std::string directory(fullPath.substr(0, directoryPosition));
     lf_Mkdir(directory.c_str(), st);
-  }
+
+    while (directoryPosition != fullPath.npos)
+    {
+        directoryPosition = fullPath.find("/", directoryPosition + 1);
+        directory = fullPath.substr(0, directoryPosition);
+        lf_Mkdir(directory.c_str(), st);
+    }
 }
 
 void SetTransformsHelper(const std::vector<std::string> &transformNames,
@@ -478,207 +483,209 @@ void SetTransformsHelper(const std::vector<std::string> &transformNames,
                          std::vector<short> &transformIndices,
                          std::vector<short> &parameters)
 {
-  // function to get a parameter from "method:parameter"
-  auto lf_GetParameter = [](const std::string transformName,
-                            std::string &transformMethod,
-                            const bool debugMode) -> short {
-    short parameter = -1;
-    auto colonPosition = transformName.find(":");
-
-    if (colonPosition != transformName.npos)
-    {
-      if (debugMode == true)
-      {
-        if (colonPosition == transformName.size() - 1)
+    // function to get a parameter from "method:parameter"
+    auto lf_GetParameter = [](const std::string transformName,
+                              std::string &transformMethod,
+                              const bool debugMode) -> short {
+        short parameter = -1;
+        auto colonPosition = transformName.find(":");
+
+        if (colonPosition != transformName.npos)
         {
-          throw std::invalid_argument("ERROR: wrong format for transform " +
-                                      transformName +
-                                      ", in call to SetTransform\n");
+            if (debugMode == true)
+            {
+                if (colonPosition == transformName.size() - 1)
+                {
+                    throw std::invalid_argument(
+                        "ERROR: wrong format for transform " + transformName +
+                        ", in call to SetTransform\n");
+                }
+            }
+
+            transformMethod = transformName.substr(0, colonPosition);
+            parameter = std::stoi(
+                transformName.substr(colonPosition + 1)); // need to test
         }
-      }
+        return parameter;
+    };
+
+    // Get transform index from transforms, if not found return -1
+    auto lf_GetTransformIndex =
+        [](const std::string transformMethod,
+           const std::vector<std::shared_ptr<Transform>> &transforms) -> short {
+        short transformIndex = -1;
+        for (unsigned int i = 0; i < transforms.size(); ++i)
+        {
+            if (transforms[i]->m_Method == transformMethod)
+            {
+                transformIndex = i;
+                break;
+            }
+        }
+        return transformIndex;
+    };
 
-      transformMethod = transformName.substr(0, colonPosition);
-      parameter =
-          std::stoi(transformName.substr(colonPosition + 1)); // need to test
-    }
-    return parameter;
-  };
-
-  // Get transform index from transforms, if not found return -1
-  auto lf_GetTransformIndex =
-      [](const std::string transformMethod,
-         const std::vector<std::shared_ptr<Transform>> &transforms) -> short {
-    short transformIndex = -1;
-    for (unsigned int i = 0; i < transforms.size(); ++i)
-    {
-      if (transforms[i]->m_Method == transformMethod)
-      {
-        transformIndex = i;
-        break;
-      }
-    }
-    return transformIndex;
-  };
-
-  // BODY of FUNCTION STARTS HERE
-  for (const std::string transformName : transformNames)
-  {
-    std::string transformMethod(transformName);
-    short parameter =
-        lf_GetParameter(transformName, transformMethod,
-                        debugMode); // from transform = "method:parameter"
-    short transformIndex = lf_GetTransformIndex(transformMethod, transforms);
-
-    if (transformIndex == -1) // not found, then create a new transform
+    // BODY of FUNCTION STARTS HERE
+    for (const std::string transformName : transformNames)
     {
-      if (transformMethod == "bzip2")
-      {
+        std::string transformMethod(transformName);
+        short parameter =
+            lf_GetParameter(transformName, transformMethod,
+                            debugMode); // from transform = "method:parameter"
+        short transformIndex =
+            lf_GetTransformIndex(transformMethod, transforms);
+
+        if (transformIndex == -1) // not found, then create a new transform
+        {
+            if (transformMethod == "bzip2")
+            {
 #ifdef HAVE_BZIP2
-        transforms.push_back(std::make_shared<CBZIP2>());
+                transforms.push_back(std::make_shared<CBZIP2>());
 #endif
-      }
+            }
 
-      transformIndex = static_cast<short>(transforms.size() - 1);
+            transformIndex = static_cast<short>(transforms.size() - 1);
+        }
+        transformIndices.push_back(transformIndex);
+        parameters.push_back(parameter);
     }
-    transformIndices.push_back(transformIndex);
-    parameters.push_back(parameter);
-  }
 }
 
 std::map<std::string, std::string>
 BuildParametersMap(const std::vector<std::string> &parameters,
                    const bool debugMode)
 {
-  auto lf_GetFieldValue = [](const std::string parameter, std::string &field,
-                             std::string &value, const bool debugMode) {
-    auto equalPosition = parameter.find("=");
+    auto lf_GetFieldValue = [](const std::string parameter, std::string &field,
+                               std::string &value, const bool debugMode) {
+        auto equalPosition = parameter.find("=");
 
-    if (debugMode == true)
-    {
-      if (equalPosition == parameter.npos)
-      {
-        throw std::invalid_argument("ERROR: wrong format for parameter " +
-                                    parameter +
-                                    ", format must be field=value \n");
-      }
-
-      if (equalPosition == parameter.size() - 1)
-      {
-        throw std::invalid_argument("ERROR: empty value in parameter " +
-                                    parameter +
-                                    ", format must be field=value \n");
-      }
-    }
-
-    field = parameter.substr(0, equalPosition);
-    value = parameter.substr(equalPosition + 1); // need to test
-  };
+        if (debugMode == true)
+        {
+            if (equalPosition == parameter.npos)
+            {
+                throw std::invalid_argument(
+                    "ERROR: wrong format for parameter " + parameter +
+                    ", format must be field=value \n");
+            }
+
+            if (equalPosition == parameter.size() - 1)
+            {
+                throw std::invalid_argument("ERROR: empty value in parameter " +
+                                            parameter +
+                                            ", format must be field=value \n");
+            }
+        }
 
-  // BODY OF FUNCTION STARTS HERE
-  std::map<std::string, std::string> parametersOutput;
+        field = parameter.substr(0, equalPosition);
+        value = parameter.substr(equalPosition + 1); // need to test
+    };
 
-  for (const auto parameter : parameters)
-  {
-    std::string field, value;
-    lf_GetFieldValue(parameter, field, value, debugMode);
+    // BODY OF FUNCTION STARTS HERE
+    std::map<std::string, std::string> parametersOutput;
 
-    if (debugMode == true)
+    for (const auto parameter : parameters)
     {
-      if (parametersOutput.count(field) == 1)
-      {
-        throw std::invalid_argument("ERROR: parameter " + field +
-                                    " already exists, must be unique\n");
-      }
-    }
+        std::string field, value;
+        lf_GetFieldValue(parameter, field, value, debugMode);
 
-    parametersOutput[field] = value;
-  }
+        if (debugMode == true)
+        {
+            if (parametersOutput.count(field) == 1)
+            {
+                throw std::invalid_argument(
+                    "ERROR: parameter " + field +
+                    " already exists, must be unique\n");
+            }
+        }
+
+        parametersOutput[field] = value;
+    }
 
-  return parametersOutput;
+    return parametersOutput;
 }
 
 std::vector<int> CSVToVectorInt(const std::string csv)
 {
-  std::vector<int> numbers;
-  if (csv.empty())
-  {
-    return numbers;
-  }
-
-  if (csv.find(",") == csv.npos) // check if no commas, one int
-  {
-    numbers.push_back(std::stoi(csv)); // might need to be checked
-  }
-  else
-  {
-    int count = std::count(csv.begin(), csv.end(), ',');
-    numbers.reserve(count);
-
-    std::istringstream csvSS(csv);
-    std::string value;
-    while (std::getline(csvSS, value, ',')) // need to test
+    std::vector<int> numbers;
+    if (csv.empty())
     {
-      numbers.push_back(std::stoi(csv));
+        return numbers;
     }
-  }
 
-  return numbers;
+    if (csv.find(",") == csv.npos) // check if no commas, one int
+    {
+        numbers.push_back(std::stoi(csv)); // might need to be checked
+    }
+    else
+    {
+        int count = std::count(csv.begin(), csv.end(), ',');
+        numbers.reserve(count);
+
+        std::istringstream csvSS(csv);
+        std::string value;
+        while (std::getline(csvSS, value, ',')) // need to test
+        {
+            numbers.push_back(std::stoi(csv));
+        }
+    }
+
+    return numbers;
 }
 
 bool CheckBufferAllocation(const std::size_t newSize, const float growthFactor,
                            const std::size_t maxBufferSize,
                            std::vector<char> &buffer)
 {
-  // Check if data in buffer needs to be reallocated
-  const std::size_t requiredDataSize =
-      buffer.size() + newSize + 100; // adding some bytes for tolerance
-  // might need to write payload in batches
-  bool doTransportsFlush = (requiredDataSize > maxBufferSize) ? true : false;
-
-  if (GrowBuffer(requiredDataSize, growthFactor, buffer) == -1)
-  {
-    doTransportsFlush = true;
-  }
-
-  return doTransportsFlush;
+    // Check if data in buffer needs to be reallocated
+    const std::size_t requiredDataSize =
+        buffer.size() + newSize + 100; // adding some bytes for tolerance
+    // might need to write payload in batches
+    bool doTransportsFlush = (requiredDataSize > maxBufferSize) ? true : false;
+
+    if (GrowBuffer(requiredDataSize, growthFactor, buffer) == -1)
+    {
+        doTransportsFlush = true;
+    }
+
+    return doTransportsFlush;
 }
 
 int GrowBuffer(const std::size_t incomingDataSize, const float growthFactor,
                std::vector<char> &buffer)
 {
-  const std::size_t currentCapacity = buffer.capacity();
-  const std::size_t availableSpace = currentCapacity - buffer.size();
-  const double gf = static_cast<double>(growthFactor);
-
-  if (incomingDataSize > availableSpace)
-  {
-    const std::size_t neededCapacity = incomingDataSize + buffer.size();
-    const double numerator = std::log(static_cast<double>(neededCapacity) /
-                                      static_cast<double>(currentCapacity));
-    const double denominator = std::log(gf);
-
-    double n = std::ceil(numerator / denominator);
-    const std::size_t newSize =
-        static_cast<std::size_t>(std::ceil(std::pow(gf, n) * currentCapacity));
-
-    try
-    {
-      buffer.reserve(newSize);
-    }
-    catch (std::bad_alloc &e)
+    const std::size_t currentCapacity = buffer.capacity();
+    const std::size_t availableSpace = currentCapacity - buffer.size();
+    const double gf = static_cast<double>(growthFactor);
+
+    if (incomingDataSize > availableSpace)
     {
-      return -1;
-    }
+        const std::size_t neededCapacity = incomingDataSize + buffer.size();
+        const double numerator = std::log(static_cast<double>(neededCapacity) /
+                                          static_cast<double>(currentCapacity));
+        const double denominator = std::log(gf);
+
+        double n = std::ceil(numerator / denominator);
+        const std::size_t newSize = static_cast<std::size_t>(
+            std::ceil(std::pow(gf, n) * currentCapacity));
 
-    return 1;
-  }
-  return 0;
+        try
+        {
+            buffer.reserve(newSize);
+        }
+        catch (std::bad_alloc &e)
+        {
+            return -1;
+        }
+
+        return 1;
+    }
+    return 0;
 }
 
 bool IsLittleEndian() noexcept
 {
-  uint16_t hexa = 0x1234;
-  return *reinterpret_cast<uint8_t *>(&hexa) != 0x12; // NOLINT
+    uint16_t hexa = 0x1234;
+    return *reinterpret_cast<uint8_t *>(&hexa) != 0x12; // NOLINT
 }
 
 } // namespace adios
diff --git a/source/mpidummy.cpp b/source/mpidummy.cpp
index f85e40a44a64c84718691452db59a420e1b8f369..c70ae74e0d74dd3a1215427e8d82e1ab36d55b5e 100644
--- a/source/mpidummy.cpp
+++ b/source/mpidummy.cpp
@@ -40,26 +40,26 @@ static char mpierrmsg[MPI_MAX_ERROR_STRING];
 
 int MPI_Init(int * /*argc*/, char *** /*argv*/)
 {
-  mpierrmsg[0] = '\0';
-  return MPI_SUCCESS;
+    mpierrmsg[0] = '\0';
+    return MPI_SUCCESS;
 }
 
 int MPI_Finalize()
 {
-  mpierrmsg[0] = '\0';
-  return MPI_SUCCESS;
+    mpierrmsg[0] = '\0';
+    return MPI_SUCCESS;
 }
 
 int MPI_Initialized(int *flag)
 {
-  *flag = 1;
-  return MPI_SUCCESS;
+    *flag = 1;
+    return MPI_SUCCESS;
 }
 
 int MPI_Comm_split(MPI_Comm /*comm*/, int /*color*/, int /*key*/,
                    MPI_Comm * /*comm_out*/)
 {
-  return MPI_SUCCESS;
+    return MPI_SUCCESS;
 }
 
 int MPI_Barrier(MPI_Comm /*comm*/) { return MPI_SUCCESS; }
@@ -67,31 +67,31 @@ int MPI_Barrier(MPI_Comm /*comm*/) { return MPI_SUCCESS; }
 int MPI_Bcast(void * /*buffer*/, int /*count*/, MPI_Datatype /*datatype*/,
               int /*root*/, MPI_Comm /*comm*/)
 {
-  return MPI_SUCCESS;
+    return MPI_SUCCESS;
 }
 
 int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
 {
-  *newcomm = comm;
-  return MPI_SUCCESS;
+    *newcomm = comm;
+    return MPI_SUCCESS;
 }
 
 int MPI_Comm_rank(MPI_Comm /*comm*/, int *rank)
 {
-  *rank = 0;
-  return MPI_SUCCESS;
+    *rank = 0;
+    return MPI_SUCCESS;
 }
 
 int MPI_Comm_size(MPI_Comm /*comm*/, int *size)
 {
-  *size = 1;
-  return MPI_SUCCESS;
+    *size = 1;
+    return MPI_SUCCESS;
 }
 
 int MPI_Comm_free(MPI_Comm *comm)
 {
-  *comm = 0;
-  return MPI_SUCCESS;
+    *comm = 0;
+    return MPI_SUCCESS;
 }
 
 MPI_Comm MPI_Comm_f2c(MPI_Fint comm) { return comm; }
@@ -100,158 +100,158 @@ int MPI_Gather(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
                void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root,
                MPI_Comm comm)
 {
-  int ier = MPI_SUCCESS;
-  size_t n = 0, nsent = 0, nrecv = 0;
-  if (!sendbuf || !recvbuf)
-  {
-    ier = MPI_ERR_BUFFER;
-  }
-  if (comm == MPI_COMM_NULL || root)
-  {
-    ier = MPI_ERR_COMM;
-  }
-
-  switch (sendtype)
-  {
+    int ier = MPI_SUCCESS;
+    size_t n = 0, nsent = 0, nrecv = 0;
+    if (!sendbuf || !recvbuf)
+    {
+        ier = MPI_ERR_BUFFER;
+    }
+    if (comm == MPI_COMM_NULL || root)
+    {
+        ier = MPI_ERR_COMM;
+    }
+
+    switch (sendtype)
+    {
     case MPI_INT:
-      n = sizeof(int);
-      break;
+        n = sizeof(int);
+        break;
     default:
-      return MPI_ERR_TYPE;
-  }
-  nsent = n * sendcnt;
+        return MPI_ERR_TYPE;
+    }
+    nsent = n * sendcnt;
 
-  switch (recvtype)
-  {
+    switch (recvtype)
+    {
     case MPI_INT:
-      nrecv = sizeof(int);
-      break;
+        nrecv = sizeof(int);
+        break;
     default:
-      return MPI_ERR_TYPE;
-  }
-  nrecv = n * recvcnt;
-
-  if (nrecv != nsent)
-  {
-    ier = MPI_ERR_COUNT;
-  }
-
-  if (ier == MPI_SUCCESS)
-  {
-    memcpy(recvbuf, sendbuf, nsent);
-  }
-  else
-  {
-    snprintf(mpierrmsg, ier, "could not gather data\n");
-  }
-
-  return ier;
+        return MPI_ERR_TYPE;
+    }
+    nrecv = n * recvcnt;
+
+    if (nrecv != nsent)
+    {
+        ier = MPI_ERR_COUNT;
+    }
+
+    if (ier == MPI_SUCCESS)
+    {
+        memcpy(recvbuf, sendbuf, nsent);
+    }
+    else
+    {
+        snprintf(mpierrmsg, ier, "could not gather data\n");
+    }
+
+    return ier;
 }
 
 int MPI_Gatherv(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
                 void *recvbuf, const int *recvcnts, const int *displs,
                 MPI_Datatype recvtype, int root, MPI_Comm comm)
 {
-  int ier = MPI_SUCCESS;
-  if (!recvcnts || !displs)
-  {
-    ier = MPI_ERR_BUFFER;
-  }
-
-  if (ier == MPI_SUCCESS)
-  {
-    ier = MPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, *recvcnts, recvtype,
-                     root, comm);
-  }
-
-  return ier;
+    int ier = MPI_SUCCESS;
+    if (!recvcnts || !displs)
+    {
+        ier = MPI_ERR_BUFFER;
+    }
+
+    if (ier == MPI_SUCCESS)
+    {
+        ier = MPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, *recvcnts,
+                         recvtype, root, comm);
+    }
+
+    return ier;
 }
 
 int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                   void *recvbuf, int recvcount, MPI_Datatype recvtype,
                   MPI_Comm comm)
 {
-  return MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
-                    0, comm);
+    return MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+                      recvtype, 0, comm);
 }
 
 int MPI_Scatter(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
                 void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root,
                 MPI_Comm comm)
 {
-  int ier = MPI_SUCCESS;
-  size_t n = 0, nsent = 0, nrecv = 0;
-  if (!sendbuf || !recvbuf)
-  {
-    ier = MPI_ERR_BUFFER;
-  }
-
-  if (comm == MPI_COMM_NULL || root)
-  {
-    ier = MPI_ERR_COMM;
-  }
-
-  switch (sendtype)
-  {
+    int ier = MPI_SUCCESS;
+    size_t n = 0, nsent = 0, nrecv = 0;
+    if (!sendbuf || !recvbuf)
+    {
+        ier = MPI_ERR_BUFFER;
+    }
+
+    if (comm == MPI_COMM_NULL || root)
+    {
+        ier = MPI_ERR_COMM;
+    }
+
+    switch (sendtype)
+    {
     case MPI_INT:
-      n = sizeof(int);
-      break;
+        n = sizeof(int);
+        break;
     default:
-      return MPI_ERR_TYPE;
-  }
-  nsent = n * sendcnt;
+        return MPI_ERR_TYPE;
+    }
+    nsent = n * sendcnt;
 
-  switch (recvtype)
-  {
+    switch (recvtype)
+    {
     case MPI_INT:
-      nrecv = sizeof(int);
-      break;
+        nrecv = sizeof(int);
+        break;
     default:
-      return MPI_ERR_TYPE;
-  }
-  nrecv = n * recvcnt;
-
-  if (nrecv != nsent)
-  {
-    ier = MPI_ERR_COUNT;
-  }
-
-  if (ier == MPI_SUCCESS)
-  {
-    memcpy(recvbuf, sendbuf, nsent);
-  }
-  else
-  {
-    snprintf(mpierrmsg, ier, "could not scatter data\n");
-  }
-
-  return ier;
+        return MPI_ERR_TYPE;
+    }
+    nrecv = n * recvcnt;
+
+    if (nrecv != nsent)
+    {
+        ier = MPI_ERR_COUNT;
+    }
+
+    if (ier == MPI_SUCCESS)
+    {
+        memcpy(recvbuf, sendbuf, nsent);
+    }
+    else
+    {
+        snprintf(mpierrmsg, ier, "could not scatter data\n");
+    }
+
+    return ier;
 }
 
 int MPI_Scatterv(const void *sendbuf, const int *sendcnts, const int *displs,
                  MPI_Datatype sendtype, void *recvbuf, int recvcnt,
                  MPI_Datatype recvtype, int root, MPI_Comm comm)
 {
-  int ier = MPI_SUCCESS;
-  if (!sendcnts || !displs)
-  {
-    ier = MPI_ERR_BUFFER;
-  }
-
-  if (ier == MPI_SUCCESS)
-  {
-    ier = MPI_Scatter(sendbuf, *sendcnts, sendtype, recvbuf, recvcnt, recvtype,
-                      root, comm);
-  }
-
-  return ier;
+    int ier = MPI_SUCCESS;
+    if (!sendcnts || !displs)
+    {
+        ier = MPI_ERR_BUFFER;
+    }
+
+    if (ier == MPI_SUCCESS)
+    {
+        ier = MPI_Scatter(sendbuf, *sendcnts, sendtype, recvbuf, recvcnt,
+                          recvtype, root, comm);
+    }
+
+    return ier;
 }
 
 int MPI_Recv(void * /*recvbuffer*/, int /*count*/, MPI_Datatype /*type*/,
              int /*source*/, int /*tag*/, MPI_Comm /*comm*/,
              MPI_Status * /*status*/)
 {
-  return 0;
+    return 0;
 }
 
 int MPI_Irecv(void * /*recvbuffer*/, int /*count*/, MPI_Datatype /*type*/,
@@ -259,20 +259,20 @@ int MPI_Irecv(void * /*recvbuffer*/, int /*count*/, MPI_Datatype /*type*/,
               MPI_Request * /*request*/)
 
 {
-  return 0;
+    return 0;
 }
 
 int MPI_Send(const void * /*sendbuffer*/, int /*count*/, MPI_Datatype /*type*/,
              int /*destination*/, int /*tag*/, MPI_Comm /*comm*/)
 {
-  return 0;
+    return 0;
 }
 
 int MPI_Isend(const void * /*recvbuffer*/, int /*count*/, MPI_Datatype /*type*/,
               int /*source*/, int /*tag*/, MPI_Comm /*comm*/,
               MPI_Request * /*request*/)
 {
-  return 0;
+    return 0;
 }
 
 int MPI_Wait(MPI_Request * /*request*/, MPI_Status * /*status*/) { return 0; }
@@ -280,83 +280,85 @@ int MPI_Wait(MPI_Request * /*request*/, MPI_Status * /*status*/) { return 0; }
 int MPI_File_open(MPI_Comm /*comm*/, const char *filename, int amode,
                   MPI_Info /*info*/, MPI_File *fh)
 {
-  *fh = open64(filename, amode);
-  if (*fh == -1)
-  {
-    snprintf(mpierrmsg, MPI_MAX_ERROR_STRING, "File not found: %s", filename);
-    return -1;
-  }
-  return MPI_SUCCESS;
+    *fh = open64(filename, amode);
+    if (*fh == -1)
+    {
+        snprintf(mpierrmsg, MPI_MAX_ERROR_STRING, "File not found: %s",
+                 filename);
+        return -1;
+    }
+    return MPI_SUCCESS;
 }
 
 int MPI_File_close(MPI_File *fh) { return close(*fh); }
 
 int MPI_File_get_size(MPI_File fh, MPI_Offset *size)
 {
-  uint64_t curpos = lseek64(fh, 0, SEEK_CUR); // get the current seek pos
-  uint64_t endpos =
-      lseek64(fh, 0, SEEK_END);  // go to end, returned is the size in bytes
-  lseek64(fh, curpos, SEEK_SET); // go back where we were
-  *size = static_cast<MPI_Offset>(endpos);
-  // printf("MPI_File_get_size: fh=%d, size=%lld\n", fh, *size);
-  return MPI_SUCCESS;
+    uint64_t curpos = lseek64(fh, 0, SEEK_CUR); // get the current seek pos
+    uint64_t endpos =
+        lseek64(fh, 0, SEEK_END);  // go to end, returned is the size in bytes
+    lseek64(fh, curpos, SEEK_SET); // go back where we were
+    *size = static_cast<MPI_Offset>(endpos);
+    // printf("MPI_File_get_size: fh=%d, size=%lld\n", fh, *size);
+    return MPI_SUCCESS;
 }
 
 int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
                   MPI_Status *status)
 {
-  // FIXME: int count can read only 2GB (*datatype size) array at max
-  uint64_t bytes_to_read = static_cast<uint64_t>(count) * datatype;
-  uint64_t bytes_read;
-  bytes_read = read(fh, buf, bytes_to_read);
-  if (bytes_read != bytes_to_read)
-  {
-    snprintf(mpierrmsg, MPI_MAX_ERROR_STRING,
-             "could not read %" PRId64 " bytes. read only: %" PRId64 "\n",
-             bytes_to_read, bytes_read);
-    return -2;
-  }
-  *status = bytes_read;
-  // printf("MPI_File_read: fh=%d, count=%d, typesize=%d, bytes read=%lld\n",
-  // fh, count, datatype, *status);
-  return MPI_SUCCESS;
+    // FIXME: int count can read only 2GB (*datatype size) array at max
+    uint64_t bytes_to_read = static_cast<uint64_t>(count) * datatype;
+    uint64_t bytes_read;
+    bytes_read = read(fh, buf, bytes_to_read);
+    if (bytes_read != bytes_to_read)
+    {
+        snprintf(mpierrmsg, MPI_MAX_ERROR_STRING,
+                 "could not read %" PRId64 " bytes. read only: %" PRId64 "\n",
+                 bytes_to_read, bytes_read);
+        return -2;
+    }
+    *status = bytes_read;
+    // printf("MPI_File_read: fh=%d, count=%d, typesize=%d, bytes read=%lld\n",
+    // fh, count, datatype, *status);
+    return MPI_SUCCESS;
 }
 
 int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence)
 {
-  lseek64(fh, offset, whence);
-  // printf("MPI_File_seek: fh=%d, offset=%lld, whence=%d\n", fh, off, whence);
-  return MPI_SUCCESS;
+    lseek64(fh, offset, whence);
+    // printf("MPI_File_seek: fh=%d, offset=%lld, whence=%d\n", fh, off,
+    // whence);
+    return MPI_SUCCESS;
 }
 
 int MPI_Get_count(const MPI_Status *status, MPI_Datatype, int *count)
 {
-  *count = static_cast<int>(*status);
-  return MPI_SUCCESS;
+    *count = static_cast<int>(*status);
+    return MPI_SUCCESS;
 }
 
 int MPI_Error_string(int /*errorcode*/, char *string, int *resultlen)
 {
-  // sprintf(string, "Dummy lib does not know error strings.
-  // Code=%d\n",errorcode);
-  strcpy(string, mpierrmsg);
-  *resultlen = strlen(string);
-  return MPI_SUCCESS;
+    // sprintf(string, "Dummy lib does not know error strings.
+    // Code=%d\n",errorcode);
+    strcpy(string, mpierrmsg);
+    *resultlen = strlen(string);
+    return MPI_SUCCESS;
 }
 
 double MPI_Wtime()
 {
-  // Implementation not tested
-  timeval tv = {0, 0};
-  gettimeofday(&tv, nullptr);
-  return tv.tv_sec + tv.tv_usec * 1e-6;
+    // Implementation not tested
+    timeval tv = {0, 0};
+    gettimeofday(&tv, nullptr);
+    return tv.tv_sec + tv.tv_usec * 1e-6;
 }
 
 int MPI_Get_processor_name(char *name, int *resultlen)
 {
-  sprintf(name, "0");
-  *resultlen = 1;
-  return 0;
+    sprintf(name, "0");
+    *resultlen = 1;
+    return 0;
 }
 
 } // end namespace adios
diff --git a/source/transport/file/FStream.cpp b/source/transport/file/FStream.cpp
index bb7b851de06b514f316c256bd7a5265394005114..9fad70c894e7d1c67a0512e4efaf3eb2f07f6d5a 100644
--- a/source/transport/file/FStream.cpp
+++ b/source/transport/file/FStream.cpp
@@ -27,50 +27,51 @@ FStream::FStream(MPI_Comm mpiComm, const bool debugMode)
 
 void FStream::Open(const std::string name, const std::string accessMode)
 {
-  m_Name = name;
-  m_AccessMode = accessMode;
+    m_Name = name;
+    m_AccessMode = accessMode;
 
-  if (accessMode == "w" || accessMode == "write")
-  {
-    m_FStream.open(name, std::fstream::out);
-  }
-  else if (accessMode == "a" || accessMode == "append")
-  {
-    m_FStream.open(name, std::fstream::out | std::fstream::app);
-  }
-  else if (accessMode == "r" || accessMode == "read")
-  {
-    m_FStream.open(name, std::fstream::in);
-  }
+    if (accessMode == "w" || accessMode == "write")
+    {
+        m_FStream.open(name, std::fstream::out);
+    }
+    else if (accessMode == "a" || accessMode == "append")
+    {
+        m_FStream.open(name, std::fstream::out | std::fstream::app);
+    }
+    else if (accessMode == "r" || accessMode == "read")
+    {
+        m_FStream.open(name, std::fstream::in);
+    }
 
-  if (m_DebugMode == true)
-  {
-    if (!m_FStream)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure(
-          "ERROR: couldn't open file " + name +
-          ", in call to Open from FStream transport\n");
+        if (!m_FStream)
+        {
+            throw std::ios_base::failure(
+                "ERROR: couldn't open file " + name +
+                ", in call to Open from FStream transport\n");
+        }
     }
-  }
 }
 
 void FStream::SetBuffer(char *buffer, std::size_t size)
 {
-  m_FStream.rdbuf()->pubsetbuf(buffer, size);
+    m_FStream.rdbuf()->pubsetbuf(buffer, size);
 }
 
 void FStream::Write(const char *buffer, std::size_t size)
 {
-  m_FStream.write(buffer, size);
+    m_FStream.write(buffer, size);
 
-  if (m_DebugMode == true)
-  {
-    if (!m_FStream)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure("ERROR: couldn't write to file " + m_Name +
-                                   ", in call to FStream write\n");
+        if (!m_FStream)
+        {
+            throw std::ios_base::failure("ERROR: couldn't write to file " +
+                                         m_Name +
+                                         ", in call to FStream write\n");
+        }
     }
-  }
 }
 
 void FStream::Flush() { m_FStream.flush(); }
diff --git a/source/transport/file/FileDescriptor.cpp b/source/transport/file/FileDescriptor.cpp
index d469f017286e8dde70925f6da8c6ebb6dc61308c..b71980c0f83403e3fa4e9ac65485e8262cd54ebd 100644
--- a/source/transport/file/FileDescriptor.cpp
+++ b/source/transport/file/FileDescriptor.cpp
@@ -9,11 +9,11 @@
  */
 
 /// \cond EXCLUDE_FROM_DOXYGEN
-#include <fcntl.h>     //open
-#include <ios>         //std::ios_base::failure
+#include <fcntl.h>     // open
+#include <ios>         // std::ios_base::failure
 #include <stddef.h>    // write output
-#include <sys/stat.h>  //open
-#include <sys/types.h> //open
+#include <sys/stat.h>  // open
+#include <sys/types.h> // open
 #include <unistd.h>    // write, close
 /// \endcond
 
@@ -31,111 +31,129 @@ FileDescriptor::FileDescriptor(MPI_Comm mpiComm, const bool debugMode)
 
 FileDescriptor::~FileDescriptor()
 {
-  if (m_FileDescriptor != -1)
-  {
-    close(m_FileDescriptor);
-  }
+    if (m_FileDescriptor != -1)
+    {
+        close(m_FileDescriptor);
+    }
 }
 
-void FileDescriptor::Open(const std::string name, const std::string accessMode)
+void FileDescriptor::Open(const std::string &name, const std::string accessMode)
 {
-  m_Name = name;
-  m_AccessMode = accessMode;
-
-  if (accessMode == "w" || accessMode == "write")
-  {
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetInitialTime();
+    m_Name = name;
+    m_AccessMode = accessMode;
 
-    m_FileDescriptor = open(m_Name.c_str(), O_WRONLY | O_CREAT, 0777);
-
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetTime();
-  }
-  else if (accessMode == "a" || accessMode == "append")
-  {
-
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetInitialTime();
-
-    m_FileDescriptor =
-        open(m_Name.c_str(), O_WRONLY | O_APPEND); // we need to change this
+    if (accessMode == "w" || accessMode == "write")
+    {
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetInitialTime();
+        }
 
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetTime();
-  }
-  else if (accessMode == "r" || accessMode == "read")
-  {
+        m_FileDescriptor = open(m_Name.c_str(), O_WRONLY | O_CREAT, 0777);
 
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetInitialTime();
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetTime();
+        }
+    }
+    else if (accessMode == "a" || accessMode == "append")
+    {
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetInitialTime();
+        }
+
+        m_FileDescriptor = open(m_Name.c_str(),
+                                O_WRONLY | O_APPEND); // we need to change this
+
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetTime();
+        }
+    }
+    else if (accessMode == "r" || accessMode == "read")
+    {
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetInitialTime();
+        }
 
-    m_FileDescriptor = open(m_Name.c_str(), O_RDONLY);
+        m_FileDescriptor = open(m_Name.c_str(), O_RDONLY);
 
-    if (m_Profiler.IsActive == true)
-      m_Profiler.Timers[0].SetTime();
-  }
+        if (m_Profiler.IsActive == true)
+        {
+            m_Profiler.Timers[0].SetTime();
+        }
+    }
 
-  if (m_DebugMode == true)
-  {
-    if (m_FileDescriptor == -1)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure("ERROR: couldn't open file " + m_Name +
-                                   ", from call to Open in FD transport using "
-                                   "POSIX open. Does file exists?\n");
+        if (m_FileDescriptor == -1)
+        {
+            throw std::ios_base::failure(
+                "ERROR: couldn't open file " + m_Name +
+                ", from call to Open in FD transport using "
+                "POSIX open. Does file exists?\n");
+        }
     }
-  }
 }
 
 void FileDescriptor::Write(const char *buffer, std::size_t size)
 {
+    if (m_Profiler.IsActive == true)
+    {
+        m_Profiler.Timers[1].SetInitialTime();
+    }
 
-  if (m_Profiler.IsActive == true)
-    m_Profiler.Timers[1].SetInitialTime();
-
-  auto writtenSize = write(m_FileDescriptor, buffer, size);
-
-  if (m_Profiler.IsActive == true)
-    m_Profiler.Timers[1].SetTime();
+    auto writtenSize = write(m_FileDescriptor, buffer, size);
 
-  if (m_DebugMode == true)
-  {
-    if (writtenSize == -1)
+    if (m_Profiler.IsActive == true)
     {
-      throw std::ios_base::failure("ERROR: couldn't write to file " + m_Name +
-                                   ", in call to POSIX write\n");
+        m_Profiler.Timers[1].SetTime();
     }
 
-    if (static_cast<std::size_t>(writtenSize) != size)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure(
-          "ERROR: written size + " + std::to_string(writtenSize) +
-          " is not equal to intended size " + std::to_string(size) +
-          " in file " + m_Name + ", in call to POSIX write\n");
+        if (writtenSize == -1)
+        {
+            throw std::ios_base::failure("ERROR: couldn't write to file " +
+                                         m_Name + ", in call to POSIX write\n");
+        }
+
+        if (static_cast<std::size_t>(writtenSize) != size)
+        {
+            throw std::ios_base::failure(
+                "ERROR: written size + " + std::to_string(writtenSize) +
+                " is not equal to intended size " + std::to_string(size) +
+                " in file " + m_Name + ", in call to POSIX write\n");
+        }
     }
-  }
 }
 
 void FileDescriptor::Close()
 {
-  if (m_Profiler.IsActive == true)
-    m_Profiler.Timers[2].SetInitialTime();
+    if (m_Profiler.IsActive == true)
+    {
+        m_Profiler.Timers[2].SetInitialTime();
+    }
 
-  int status = close(m_FileDescriptor);
+    int status = close(m_FileDescriptor);
 
-  if (m_Profiler.IsActive == true)
-    m_Profiler.Timers[2].SetTime();
+    if (m_Profiler.IsActive == true)
+    {
+        m_Profiler.Timers[2].SetTime();
+    }
 
-  if (m_DebugMode == true)
-  {
-    if (status == -1)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure("ERROR: couldn't close file " + m_Name +
-                                   ", in call to POSIX write\n");
+        if (status == -1)
+        {
+            throw std::ios_base::failure("ERROR: couldn't close file " +
+                                         m_Name + ", in call to POSIX write\n");
+        }
     }
-  }
 
-  m_IsOpen = false;
+    m_IsOpen = false;
 }
 
 } // end namespace transport
diff --git a/source/transport/file/FilePointer.cpp b/source/transport/file/FilePointer.cpp
index 1ba57204e6a6827c7454c688b37b8e2f1d62e2c9..4cbe9a8918f4c8a2fcae03543460292e2a22648b 100644
--- a/source/transport/file/FilePointer.cpp
+++ b/source/transport/file/FilePointer.cpp
@@ -26,76 +26,78 @@ FilePointer::FilePointer(MPI_Comm mpiComm, const bool debugMode)
 
 FilePointer::~FilePointer()
 {
-  if (m_File != nullptr)
-  {
-    fclose(m_File);
-  }
+    if (m_File != nullptr)
+    {
+        fclose(m_File);
+    }
 }
 
 void FilePointer::Open(const std::string name, const std::string accessMode)
 {
-  m_Name = name;
-  m_AccessMode = accessMode;
-
-  if (accessMode == "w" || accessMode == "write")
-  {
-    m_File = fopen(name.c_str(), "w");
-  }
-  else if (accessMode == "a" || accessMode == "append")
-  {
-    m_File = fopen(name.c_str(), "a");
-  }
-  else if (accessMode == "r" || accessMode == "read")
-  {
-    m_File = fopen(name.c_str(), "r");
-  }
-
-  if (m_DebugMode == true)
-  {
-    if (m_File == nullptr)
+    m_Name = name;
+    m_AccessMode = accessMode;
+
+    if (accessMode == "w" || accessMode == "write")
+    {
+        m_File = fopen(name.c_str(), "w");
+    }
+    else if (accessMode == "a" || accessMode == "append")
     {
-      throw std::ios_base::failure("ERROR: couldn't open file " + name +
-                                   ", "
-                                   "in call to Open from File* transport\n");
+        m_File = fopen(name.c_str(), "a");
+    }
+    else if (accessMode == "r" || accessMode == "read")
+    {
+        m_File = fopen(name.c_str(), "r");
+    }
+
+    if (m_DebugMode == true)
+    {
+        if (m_File == nullptr)
+        {
+            throw std::ios_base::failure(
+                "ERROR: couldn't open file " + name +
+                ", "
+                "in call to Open from File* transport\n");
+        }
     }
-  }
 }
 
 void FilePointer::SetBuffer(char *buffer, std::size_t size)
 {
-  int status = setvbuf(m_File, buffer, _IOFBF, size);
+    int status = setvbuf(m_File, buffer, _IOFBF, size);
 
-  if (m_DebugMode == true)
-  {
-    if (status == 1)
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure("ERROR: could not set buffer in rank " +
-                                   std::to_string(m_RankMPI) + "\n");
+        if (status == 1)
+        {
+            throw std::ios_base::failure(
+                "ERROR: could not set buffer in rank " +
+                std::to_string(m_RankMPI) + "\n");
+        }
     }
-  }
 }
 
 void FilePointer::Write(const char *buffer, std::size_t size)
 {
-  fwrite(buffer, sizeof(char), size, m_File);
+    fwrite(buffer, sizeof(char), size, m_File);
 
-  if (m_DebugMode == true)
-  {
-    if (ferror(m_File))
+    if (m_DebugMode == true)
     {
-      throw std::ios_base::failure("ERROR: couldn't write to file " + m_Name +
-                                   ", in call to File* write\n");
+        if (ferror(m_File))
+        {
+            throw std::ios_base::failure("ERROR: couldn't write to file " +
+                                         m_Name + ", in call to File* write\n");
+        }
     }
-  }
 }
 
 void FilePointer::Flush() { fflush(m_File); }
 
 void FilePointer::Close()
 {
-  fclose(m_File);
+    fclose(m_File);
 
-  m_IsOpen = false;
+    m_IsOpen = false;
 }
 
 } // end namespace transport
diff --git a/source/transport/wan/MdtmMan.cpp b/source/transport/wan/MdtmMan.cpp
index 55324e0c2f23d9f2ba33f5b1a43584becda3bac8..cdece2ecbfa5270b2e36eedb07af430319056cb1 100644
--- a/source/transport/wan/MdtmMan.cpp
+++ b/source/transport/wan/MdtmMan.cpp
@@ -49,7 +49,7 @@ int MdtmMan::Put(const void *data, const std::string doid,
                  const int priority)
 {
 
-  return 0;
+    return 0;
 }
 
 int MdtmMan::Get(void *data, const std::string doid, const std::string variable,
@@ -61,7 +61,7 @@ int MdtmMan::Get(void *data, const std::string doid, const std::string variable,
                  const int priority)
 {
 
-  return 0;
+    return 0;
 }
 
 int MdtmMan::Get(void *data, const std::string doid, const std::string variable,
@@ -69,7 +69,7 @@ int MdtmMan::Get(void *data, const std::string doid, const std::string variable,
                  const std::uint64_t timestep)
 {
 
-  return 0;
+    return 0;
 }
 
 void MdtmMan::OnReceive(nlohmann::json &jData) {}