diff --git a/source/adios2/engine/adios1/ADIOS1Writer.cpp b/source/adios2/engine/adios1/ADIOS1Writer.cpp
index e8a90d71d3f6cec17a2ba52c3eb89dff21bf826b..e6290d9ee9a0332d0008b803db3111ca666d7195 100644
--- a/source/adios2/engine/adios1/ADIOS1Writer.cpp
+++ b/source/adios2/engine/adios1/ADIOS1Writer.cpp
@@ -25,7 +25,7 @@ namespace adios
 ADIOS1Writer::ADIOS1Writer(IO &io, const std::string &name,
                            const OpenMode openMode, MPI_Comm mpiComm)
 : Engine("ADIOS1Writer", io, name, openMode, mpiComm),
-  m_ADIOS1(io.m_Name, name, openMode, mpiComm, io.m_DebugMode)
+  m_ADIOS1(io.m_Name, name, mpiComm, io.m_DebugMode)
 {
     m_EndMessage = " in call to ADIOS1Writer " + m_Name + " Open\n";
     Init();
@@ -35,7 +35,7 @@ void ADIOS1Writer::Init()
 {
     InitParameters();
     InitTransports();
-    m_ADIOS1.Open();
+    m_ADIOS1.Open(m_OpenMode);
 }
 
 #define declare_type(T)                                                        \
diff --git a/source/adios2/helper/adiosType.cpp b/source/adios2/helper/adiosType.cpp
index b74e68f1e5ccda2963abf3b7a155dd92948955ab..f5d3e3430fa5d03d943c85cd0d44f30b1581f1e8 100644
--- a/source/adios2/helper/adiosType.cpp
+++ b/source/adios2/helper/adiosType.cpp
@@ -171,21 +171,43 @@ size_t BytesFactor(const std::string units, const bool debugMode)
     return factor;
 }
 
-std::string OpenModeToString(const OpenMode openMode) noexcept
+std::string OpenModeToString(const OpenMode openMode,
+                             const bool oneLetter) noexcept
 {
-
     std::string openModeString;
+
     if (openMode == OpenMode::Write)
     {
-        openModeString = "Write";
+        if (oneLetter)
+        {
+            openModeString = "w";
+        }
+        else
+        {
+            openModeString = "Write";
+        }
     }
     else if (openMode == OpenMode::Append)
     {
-        openModeString = "Append";
+        if (oneLetter)
+        {
+            openModeString = "a";
+        }
+        else
+        {
+            openModeString = "Append";
+        }
     }
     else if (openMode == OpenMode::Read)
     {
-        openModeString = "Read";
+        if (oneLetter)
+        {
+            openModeString = "r";
+        }
+        else
+        {
+            openModeString = "Read";
+        }
     }
     return openModeString;
 }
diff --git a/source/adios2/helper/adiosType.h b/source/adios2/helper/adiosType.h
index 25f96d6d417a4ea2128e210dcd916a6b37d684d3..d98d9a4f95eff007df21a3e2bbbc6fffb611d4e1 100644
--- a/source/adios2/helper/adiosType.h
+++ b/source/adios2/helper/adiosType.h
@@ -102,9 +102,11 @@ size_t BytesFactor(const std::string units, const bool debugMode);
 /**
  * Returns open mode as a string
  * @param openMode from ADIOSTypes.h
- * @return
+ * @param oneLetter if true returns a one letter version ("w", "a" or "r")
+ * @return string with open mode
  */
-std::string OpenModeToString(const OpenMode openMode) noexcept;
+std::string OpenModeToString(const OpenMode openMode,
+                             const bool oneLetter = false) noexcept;
 }
 
 #include "adiosType.inl"
diff --git a/source/adios2/toolkit/interop/adios1/ADIOS1Common.cpp b/source/adios2/toolkit/interop/adios1/ADIOS1Common.cpp
index 424d96e52857926a09e0a8c12fcd2794937c45d7..2f981e94c22d67b2595ca17e9bdc403a23803ed4 100644
--- a/source/adios2/toolkit/interop/adios1/ADIOS1Common.cpp
+++ b/source/adios2/toolkit/interop/adios1/ADIOS1Common.cpp
@@ -24,10 +24,9 @@ namespace interop
 {
 
 ADIOS1Common::ADIOS1Common(const std::string &groupName,
-                           const std::string &fileName, const OpenMode openMode,
-                           MPI_Comm mpiComm, const bool debugMode)
-: m_GroupName(groupName), m_FileName(fileName),
-  m_OpenModeString(OpenModeToString(openMode)), m_MPIComm(mpiComm),
+                           const std::string &fileName, MPI_Comm mpiComm,
+                           const bool debugMode)
+: m_GroupName(groupName), m_FileName(fileName), m_MPIComm(mpiComm),
   m_DebugMode(debugMode)
 {
     Init();
@@ -126,10 +125,10 @@ void ADIOS1Common::InitTransports(
     }
 }
 
-bool ADIOS1Common::Open()
+bool ADIOS1Common::Open(const OpenMode openMode)
 {
     adios_open(&m_ADIOSFile, m_GroupName.c_str(), m_FileName.c_str(),
-               m_OpenModeString.c_str(), m_MPIComm);
+               OpenModeToString(openMode, true).c_str(), m_MPIComm);
     if (adios_errno == err_no_error)
     {
         m_IsFileOpen = true;
diff --git a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
index c5e2297f4320b67fad2fd4dda198c403635fed15..11a7e1b2e2bbdd1cf6522775fa126a67660f0a2f 100644
--- a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
+++ b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
@@ -53,14 +53,13 @@ public:
     ADIOS_ERRCODES m_ErrorNumber = static_cast<ADIOS_ERRCODES>(-1);
 
     ADIOS1Common(const std::string &groupName, const std::string &fileName,
-                 const OpenMode openMode, MPI_Comm mpiComm,
-                 const bool debugMode);
+                 MPI_Comm mpiComm, const bool debugMode);
 
     ~ADIOS1Common();
 
     void InitParameters(const Params &parameters);
     void InitTransports(const std::vector<Params> &transportsParameters);
-    bool Open();           // return true if file is opened
+    bool Open(const OpenMode openMode); // return true if file is opened
     bool ReOpenAsNeeded(); // return true if file is open or reopened
 
     template <class T>