diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
index 595f68609f18eecf0939709561e80cdd56bdf738..a90d04e34ac89c3b420c3841a6d6043fb96e8060 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
@@ -13,6 +13,7 @@
 #include <utility>
 #include <vector>
 
+#include <boost/algorithm/string/case_conv.hpp>
 #include <boost/locale.hpp>
 #include <boost/uuid/name_generator.hpp>
 #include <boost/uuid/nil_generator.hpp>
@@ -1343,13 +1344,18 @@ namespace armarx::plugins
                 __LINE__)};
         }
 
-        // create idempotent id with parent id as namespace
-        const auto& parentId = createUuidWithString(profile.parentPtr->id);
-        const auto& id = createUuidWithString(profile.name, parentId);
-        const auto& idStr = boost::uuids::to_string(id);
+        const auto& parentId = profile.parentPtr->id;
+        const auto& nameLowerCase = boost::algorithm::to_lower_copy(profile.name);
 
         std::unique_lock l(fluxioDC.profilesMutex);
-        if (fluxioDC.profiles.find(idStr) != fluxioDC.profiles.end())
+        if (std::find_if(fluxioDC.profiles.begin(),
+                         fluxioDC.profiles.end(),
+                         [&profile, &parentId, &nameLowerCase](auto& p)
+                         {
+                             return nameLowerCase == "root" ||
+                                    (p.parentPtr != nullptr && profile.parentPtr->id == parentId &&
+                                     boost::algorithm::to_lower(p.second.name) == nameLowerCase);
+                         }) != fluxioDC.profiles.end())
         {
             ARMARX_WARNING << "Profile with name '" << profile.name << "' already exists.";
             l.unlock();
@@ -1362,10 +1368,21 @@ namespace armarx::plugins
                 __LINE__)};
         }
 
-        fluxioDC.profiles[idStr] =
-            profile; // a copy is created when the profile is added to the map
-        fluxioDC.profiles[idStr].id = idStr; // this copy can then be modified
-        const auto& ret = fluxioDC.profiles[idStr];
+        std::string id;
+        if (fluxioDC.profiles.find(profile.id) != fluxioDC.profiles.end())
+        {
+            ARMARX_INFO << "The id '" << profile.id
+                        << "' is already taken. A new uuid will be generated.";
+            id = IceUtil::generateUUID();
+        }
+        else
+        {
+            id = profile.id;
+        }
+
+        fluxioDC.profiles[id] = profile; // a copy is created when the profile is added to the map
+        fluxioDC.profiles[id].id = id; // this copy can then be modified
+        const auto& ret = fluxioDC.profiles[id];
         l.unlock();
 
         return {ret};
@@ -1530,6 +1547,10 @@ namespace armarx::plugins
             // its a new skill, its a new world, ...
             skill.id = IceUtil::generateUUID();
         }
+        else
+        {
+            // TODO(me): check if a skill with the same id already exists
+        }
 
         boost::uuids::uuid uuid;
         try