diff --git a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.cpp b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.cpp
index d2efce35ed8fa81f926e96f36fb511f57fd52a0c..6e7da7e30cc5c0168c589a6ac7c7157dbd18089f 100644
--- a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.cpp
+++ b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.cpp
@@ -27,6 +27,15 @@
 #include <Inventor/VRMLnodes/SoVRMLGroup.h>
 
 
+namespace
+{
+    namespace fs = std::filesystem;
+    inline fs::path remove_trailing_separator(fs::path p)
+    {
+        p /= "dummy";
+        return p.parent_path();
+    }
+}
 
 
 namespace VirtualRobot
@@ -435,8 +444,8 @@ namespace VirtualRobot
         std::string outFile = filename;
         bool vrml = true; // may be changed later according to file extension
 
-        std::filesystem::path completePath(modelPath);
-        std::filesystem::path fn(outFile);
+        auto completePath = remove_trailing_separator(modelPath);
+        auto fn = remove_trailing_separator(outFile);
 
         if (!std::filesystem::is_directory(completePath))
         {
diff --git a/VirtualRobot/Visualization/VisualizationNode.cpp b/VirtualRobot/Visualization/VisualizationNode.cpp
index 90fa13db486b90600788805b83824d5b3ca97965..d3964c04448899a2056fb5592aefc13e71b2b1ef 100644
--- a/VirtualRobot/Visualization/VisualizationNode.cpp
+++ b/VirtualRobot/Visualization/VisualizationNode.cpp
@@ -13,6 +13,15 @@
 #include "VirtualRobot/VirtualRobotException.h"
 #include "VirtualRobot/XML/BaseIO.h"
 
+namespace
+{
+    namespace fs = std::filesystem;
+    inline fs::path remove_trailing_separator(fs::path p)
+    {
+        p /= "dummy";
+        return p.parent_path();
+    }
+}
 
 namespace VirtualRobot
 {
@@ -258,7 +267,7 @@ namespace VirtualRobot
 
     bool VisualizationNode::saveModel(const std::string& modelPath, const std::string& filename)
     {
-        const std::filesystem::path completePath(modelPath);
+        const auto completePath = remove_trailing_separator(modelPath);
 
         if (!std::filesystem::is_directory(completePath))
         {
diff --git a/VirtualRobot/XML/RobotIO.cpp b/VirtualRobot/XML/RobotIO.cpp
index 79daf30f720115fe5105519277119fbc97aa86ca..23e3ee8c67e9e00f05d6ca2806eaab6b97b6ce87 100644
--- a/VirtualRobot/XML/RobotIO.cpp
+++ b/VirtualRobot/XML/RobotIO.cpp
@@ -22,6 +22,16 @@
 #include <fstream>
 #include <iostream>
 
+namespace
+{
+    namespace fs = std::filesystem;
+    inline fs::path remove_trailing_separator(fs::path p)
+    {
+        p /= "dummy";
+        return p.parent_path();
+    }
+}
+
 namespace VirtualRobot
 {
 
@@ -1467,11 +1477,11 @@ namespace VirtualRobot
         THROW_VR_EXCEPTION_IF(!robot, "NULL data");
 
 
-        std::filesystem::path p(basePath);
-        std::filesystem::path fn(filename);
-        std::filesystem::path pModelDir(modelDir);
-        std::filesystem::path fnComplete = std::filesystem::operator/(p, fn);
-        std::filesystem::path modelDirComplete = std::filesystem::operator/(p, pModelDir);
+        std::filesystem::path p = remove_trailing_separator(basePath);
+        std::filesystem::path fn = remove_trailing_separator(filename);
+        std::filesystem::path pModelDir = remove_trailing_separator(modelDir);
+        std::filesystem::path fnComplete = p / fn;
+        std::filesystem::path modelDirComplete = p / pModelDir;
 
         if (std::filesystem::exists(modelDirComplete) && !std::filesystem::is_directory(modelDirComplete))
         {
diff --git a/VirtualRobot/XML/mujoco/MujocoIO.cpp b/VirtualRobot/XML/mujoco/MujocoIO.cpp
index 132eba206b152937b7de143bd4b40348b77c4d0a..83aeb56977c0d99a27a0b031392460e7e02f4e88 100644
--- a/VirtualRobot/XML/mujoco/MujocoIO.cpp
+++ b/VirtualRobot/XML/mujoco/MujocoIO.cpp
@@ -13,6 +13,18 @@
 namespace fs = std::filesystem;
 
 
+namespace
+{
+    namespace fs = std::filesystem;
+    inline fs::path removeTrailingSeparator(fs::path p)
+    {
+        p /= "dummy";
+        return p.parent_path();
+    }
+}
+
+
+
 namespace VirtualRobot::mujoco
 {
 
@@ -131,7 +143,7 @@ void MujocoIO::ensureDirectoriesExist()
         if (!fs::is_directory(dir))
         {
             std::cout << "Creating directory: " << dir << std::endl;
-            bool success = fs::create_directories(dir);
+            bool success = fs::create_directories(removeTrailingSeparator(dir));
             THROW_VR_EXCEPTION_IF(!success, "Could not create " << errMsgName << ": " << dir);
         }
     };