diff --git a/source/adios2/engine/bp/BPFileReader.cpp b/source/adios2/engine/bp/BPFileReader.cpp
index dccbb3338dd2903073bc0b144ccbc19fd7f77355..939e7556decc20dc7202ce75863ab507f6b812d8 100644
--- a/source/adios2/engine/bp/BPFileReader.cpp
+++ b/source/adios2/engine/bp/BPFileReader.cpp
@@ -5,32 +5,45 @@
  * BPFileReader.cpp
  *
  *  Created on: Feb 27, 2017
- *      Author: wfg
+ *      Author: William F Godoy godoywf@ornl.gov
  */
 
 #include "BPFileReader.h"
 
-#include "../../helper/adiosFunctions.h"           // CSVToVector
-#include "../../toolkit/transport/file/FileDescriptor.h" // uses POSIX
-#include "../../toolkit/transport/file/FilePointer.h"    // uses C FILE*
-#include "../../toolkit/transport/file/FileStream.h"        // uses C++ fstream
-#include "adios2/core/Support.h"
+#include "adios2/helper/adiosFunctions.h" // CSVToVector
 
 namespace adios
 {
 
-BPFileReader::BPFileReader(ADIOS &adios, const std::string &name,
-                           const std::string accessMode, MPI_Comm mpiComm,
-                           const Method &method)
-: Engine(adios, "BPFileReader", name, accessMode, mpiComm, method,
-         " BPFileReader constructor (or call to ADIOS Open).\n"),
-  m_Heap(m_DebugMode)
+BPFileReader::BPFileReader(IO &io, const std::string &name,
+                           const OpenMode openMode, MPI_Comm mpiComm)
+: Engine("BPFileReader", io, name, openMode, mpiComm)
 {
     Init();
 }
 
-Variable<void> *BPFileReader::InquireVariable(const std::string & /*name*/,
-                                              const bool /*readIn*/)
+void BPFileReader::Close(const int /*transportIndex*/) {}
+
+// PRIVATE
+void BPFileReader::Init()
+{
+    if (m_DebugMode == true)
+    {
+        if (m_OpenMode != OpenMode::r && m_OpenMode != OpenMode::Read)
+        {
+            throw std::invalid_argument(
+                "ERROR: BPFileReader only supports OpenMode::r from" + m_Name +
+                " " + m_EndMessage);
+        }
+    }
+
+    InitTransports();
+}
+
+void BPFileReader::InitTransports() {}
+
+VariableBase *BPFileReader::InquireVariableUnknown(const std::string & /*name*/,
+                                                   const bool /*readIn*/)
 {
     // not yet implemented
     return nullptr;
@@ -140,92 +153,4 @@ BPFileReader::InquireVariableCompound(const std::string & /*name*/,
     return nullptr;
 }
 
-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");
-        }
-    }
-
-    InitTransports();
-}
-
-void BPFileReader::InitTransports() // maybe move this?
-{
-    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 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 adios
diff --git a/source/adios2/engine/bp/BPFileReader.h b/source/adios2/engine/bp/BPFileReader.h
index 71d88ae0c3cd620dd70bb9a142fb407ad743e88e..5302d485425532ad62949385ff14ab96cfc35a09 100644
--- a/source/adios2/engine/bp/BPFileReader.h
+++ b/source/adios2/engine/bp/BPFileReader.h
@@ -2,18 +2,15 @@
  * Distributed under the OSI-approved Apache License, Version 2.0.  See
  * accompanying file Copyright.txt for details.
  *
- * BPReader.h
+ * BPFileReader.h
  *
  *  Created on: Feb 27, 2017
- *      Author: wfg
+ *      Author: William F Godoy godoywf@ornl.gov
  */
 
 #ifndef ADIOS2_ENGINE_BP_BPFILEREADER_H_
 #define ADIOS2_ENGINE_BP_BPFILEREADER_H_
 
-#include <iostream> //this must go away
-
-#include "../../toolkit/capsule/heap/STLVector.h"
 #include "adios2/ADIOSConfig.h"
 #include "adios2/core/Engine.h"
 
@@ -25,24 +22,23 @@ 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);
+    BPFileReader(IO &io, const std::string &name, const OpenMode openMode,
+                 MPI_Comm mpiComm);
 
     virtual ~BPFileReader() = default;
 
-    Variable<void> *InquireVariable(const std::string &variableName,
-                                    const bool readIn = true);
+    void Close(const int transportIndex = -1);
+
+private:
+    void Init(); ///< calls InitCapsules and InitTransports based on Method,
+                 /// called from constructor
+
+    void InitTransports(); ///< from Transports
+
+    VariableBase *InquireVariableUnknown(const std::string &variableName,
+                                         const bool readIn = true);
 
     Variable<char> *InquireVariableChar(const std::string &variableName,
                                         const bool readIn = true);
@@ -109,24 +105,6 @@ public:
     VariableCompound *InquireVariableCompound(const std::string &variableName,
                                               const bool readIn = true);
 
-    void Close(const int transportIndex = -1);
-
-private:
-    capsule::STLVector
-        m_Heap; ///< 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)