diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
index 54e06283336ec526a77543d9437cef7ac4f0f49c..efb6e446ee4db76406b58fb4c7bab992b8de073b 100644
--- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
+++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
@@ -30,6 +30,7 @@
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 
+#include "RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h"
 #include <RobotAPI/libraries/armem/core/error.h>
 #include <RobotAPI/libraries/armem/core/wm/memory_definitions.h>
 #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
@@ -45,6 +46,7 @@ namespace armarx
         SkillManagerComponentPluginUser(),
         statechartListenerProviderSegment(iceAdapter()),
         executableSkillCoreSegment(iceAdapter()),
+        composedSkillCoreSegment(iceAdapter()),
         skillEventCoreSegment(iceAdapter()),
         skillExecutionRequestCoreSegment(iceAdapter())
     {
@@ -59,6 +61,7 @@ namespace armarx
         const std::string prefix = "mem.";
         statechartListenerProviderSegment.defineProperties(defs, prefix + "statechartlistener.");
         executableSkillCoreSegment.defineProperties(defs, prefix + "executableskill.");
+        composedSkillCoreSegment.defineProperties(defs, prefix + "composedskill.");
         skillExecutionRequestCoreSegment.defineProperties(defs, prefix + "executionrequest.");
         skillEventCoreSegment.defineProperties(defs, prefix + "event.");
 
@@ -77,6 +80,7 @@ namespace armarx
     {
         statechartListenerProviderSegment.init();
         executableSkillCoreSegment.init();
+        composedSkillCoreSegment.init();
         skillExecutionRequestCoreSegment.init();
         skillEventCoreSegment.init();
     }
diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
index ead9f19122bc80266196aff40f138b4bd87c77f1..cd40868e6e69e17f7e671df30ffed2d7dc5410e5 100644
--- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
+++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
@@ -34,6 +34,7 @@
 #include <RobotAPI/libraries/armem_skills/aron/Statechart.aron.generated.h>
 #include <RobotAPI/libraries/armem_skills/server/StatechartListenerComponentPlugin.h>
 #include <RobotAPI/libraries/armem_skills/server/segment/ExecutableSkillLibrarySegment.h>
+#include <RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h>
 #include <RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.h>
 #include <RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.h>
 #include <RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.h>
@@ -133,6 +134,7 @@ namespace armarx
 
         skills::segment::StatechartListenerProviderSegment statechartListenerProviderSegment;
         skills::segment::ExecutableSkillLibraryCoreSegment executableSkillCoreSegment;
+        skills::segment::ComposedSkillLibraryCoreSegment composedSkillCoreSegment;
         skills::segment::SkillEventCoreSegment skillEventCoreSegment;
         skills::segment::SkillExecutionRequestCoreSegment skillExecutionRequestCoreSegment;
     };
diff --git a/source/RobotAPI/libraries/armem_skills/CMakeLists.txt b/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
index 5dea7fd336d310010fdd6a15be653b6c5cdeba46..967384b5855c68cc44e0825533327b349ddbe17d 100644
--- a/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
@@ -21,6 +21,7 @@ armarx_add_library(
         
         ./server/segment/StatechartListenerSegment.cpp
         ./server/segment/ExecutableSkillLibrarySegment.cpp
+        ./server/segment/ComposedSkillLibrarySegment.cpp
         ./server/segment/SkillExecutionRequestSegment.cpp
         ./server/segment/SkillEventSegment.cpp
     HEADERS  
@@ -30,6 +31,7 @@ armarx_add_library(
         
         ./server/segment/StatechartListenerSegment.h
         ./server/segment/ExecutableSkillLibrarySegment.h
+        ./server/segment/ComposedSkillLibrarySegment.h
         ./server/segment/SkillExecutionRequestSegment.h
         ./server/segment/SkillEventSegment.h
 )
diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c652bb287d37101b2a43d9bae6a22469df3cfc8e
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp
@@ -0,0 +1,69 @@
+#include "ComposedSkillLibrarySegment.h"
+
+#include <SimoxUtility/algorithm/string.h>
+
+#include <ArmarXCore/core/time/ice_conversions.h>
+
+#include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
+#include <RobotAPI/libraries/armem_skills/aron/Skill.aron.generated.h>
+#include <RobotAPI/libraries/armem_skills/aron_conversions.h>
+#include <RobotAPI/libraries/aron/converter/datatype/DatatypeConverterVisitor.h>
+#include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h>
+#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
+
+namespace armarx::skills::segment
+{
+    ComposedSkillLibraryCoreSegment::ComposedSkillLibraryCoreSegment(
+        armem::server::MemoryToIceAdapter& iceMemory) :
+        Base(iceMemory, CoreSegmentName, skills::manager::arondto::FluxioSkill::ToAronType())
+    {
+    }
+
+    void
+    ComposedSkillLibraryCoreSegment::defineProperties(PropertyDefinitionsPtr defs,
+                                                        const std::string& prefix)
+    {
+        this->setDefaultMaxHistorySize(3);
+        Base::defineProperties(defs, prefix);
+    }
+
+    void
+    ComposedSkillLibraryCoreSegment::init()
+    {
+        Base::init();
+    }
+
+    void
+    ComposedSkillLibraryCoreSegment::addSkillProvider(const skills::ProviderInfo& info)
+    {
+        // add skills
+        auto skills = info.providedSkills;
+        auto provId = id().withProviderSegmentName(info.providerId.providerName);
+
+        for (const auto& [s, d] : skills)
+        {
+            armarx::skills::arondto::SkillDescription skillDescription;
+            armem::toAron(skillDescription, d);
+
+            armem::Commit commit;
+            auto& entityUpdate = commit.add();
+            entityUpdate.confidence = 1.0;
+            entityUpdate.referencedTime = armem::Time::Now();
+            entityUpdate.sentTime = armem::Time::Now();
+            entityUpdate.arrivedTime = armem::Time::Now();
+            entityUpdate.instancesData = {skillDescription.toAron()};
+            entityUpdate.entityID = provId.withEntityName(d.skillId.skillName);
+
+            // Commit data to memory and notify
+            iceMemory.commit(commit);
+        }
+    }
+
+    void
+    ComposedSkillLibraryCoreSegment::removeSkillProvider(const std::string& providerName)
+    {
+        skills.erase(providerName);
+
+        // TODO also add info about removed provider to memory?
+    }
+} // namespace armarx::skills::segment
diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h
new file mode 100644
index 0000000000000000000000000000000000000000..5e633d216e920d17170221b63f1a56786ae3f4c0
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h
@@ -0,0 +1,38 @@
+#pragma once
+
+// Base Class
+#include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h>
+
+// ArmarX
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+#include <ArmarXCore/interface/core/Profiler.h>
+#include <ArmarXCore/observers/ObserverObjectFactories.h>
+
+#include <RobotAPI/interface/skills/SkillManagerInterface.h>
+#include <RobotAPI/interface/skills/SkillProviderInterface.h>
+#include <RobotAPI/libraries/armem_skills/aron/Skill.aron.generated.h>
+#include <RobotAPI/libraries/skills/core/ProviderInfo.h>
+
+namespace armarx::skills::segment
+{
+    class ComposedSkillLibraryCoreSegment : public armem::server::segment::SpecializedCoreSegment
+    {
+        using Base = armem::server::segment::SpecializedCoreSegment;
+
+    public:
+        static constexpr const char* CoreSegmentName = "ComposedSkill";
+
+        ComposedSkillLibraryCoreSegment(armem::server::MemoryToIceAdapter& iceMemory);
+
+        void defineProperties(PropertyDefinitionsPtr defs, const std::string& prefix);
+        void init();
+
+        void addSkillProvider(const skills::ProviderInfo& info);
+        void removeSkillProvider(const std::string& providerName);
+
+        size_t size() const;
+
+    private:
+        std::map<std::string, std::map<std::string, skills::manager::dto::ProviderInfo>> skills;
+    };
+} // namespace armarx::skills::segment