diff --git a/source/adios2/ADIOSTypes.h b/source/adios2/ADIOSTypes.h
index bb806e56960f57681c2edd4ff500a94fc67103d5..0078b66b855ec5728cae3e43ad883c0d27fa1ddb 100644
--- a/source/adios2/ADIOSTypes.h
+++ b/source/adios2/ADIOSTypes.h
@@ -166,6 +166,13 @@ constexpr float DefaultBufferGrowthFactor(1.05f);
  *  2Gb - 100Kb (tolerance)*/
 constexpr size_t DefaultMaxFileBatchSize(2147381248);
 
+constexpr char PathSeparator =
+#ifdef _WIN32
+    '\\';
+#else
+    '/';
+#endif
+
 // adios alias values and types
 constexpr bool DebugON = true;
 constexpr bool DebugOFF = false;
diff --git a/source/adios2/toolkit/format/bp1/BP1Base.cpp b/source/adios2/toolkit/format/bp1/BP1Base.cpp
index ecc990f38bef44f499eb417f0e9e609845ae5a6c..19e9ec190785e1b0f3fd45b248741afe239939f7 100644
--- a/source/adios2/toolkit/format/bp1/BP1Base.cpp
+++ b/source/adios2/toolkit/format/bp1/BP1Base.cpp
@@ -111,8 +111,11 @@ BP1Base::GetBPNames(const std::vector<std::string> &baseNames) const noexcept
                            const int rank) -> std::string {
 
         const std::string bpBaseName = AddExtension(baseName, ".bp");
-        // name.bp.dir/name.bp.rank
-        const std::string bpName(bpBaseName + ".dir/" + bpBaseName + "." +
+        // path/root.bp.dir/root.bp.rank
+        const std::string bpRootName =
+            bpBaseName.substr(bpBaseName.find_last_of(PathSeparator));
+
+        const std::string bpName(bpBaseName + ".dir/" + bpRootName + "." +
                                  std::to_string(rank));
         return bpName;
     };