diff --git a/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt b/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt
index 29e894703a635024b3f31bffd08f447ad26dc2e3..3871efdea26b84c0cda4bea7db68dee8fc80afd6 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt
+++ b/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt
@@ -10,11 +10,13 @@ set(COMPONENT_LIBS
 
 set(SOURCES
     ObjectPoseObserver.cpp
+    ObjectPoseProviderPlugin.cpp
 
     ObjectFinder.cpp
 )
 set(HEADERS
     ObjectPoseObserver.h
+    ObjectPoseProviderPlugin.h
 
     ObjectFinder.h
 )
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d614e214f0c9ad5505ece0680ed3766469859752
--- /dev/null
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.cpp
@@ -0,0 +1,61 @@
+#include "ObjectPoseProviderPlugin.h"
+
+namespace armarx::plugins
+{
+
+    void ObjectPoseProviderPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties)
+    {
+        if (!properties->hasDefinition(makePropertyName(PROPERTY_NAME)))
+        {
+            properties->defineOptionalProperty<std::string>(
+                makePropertyName(PROPERTY_NAME),
+                "ObjectPoseTopic",
+                "Name of the object pose topic.");
+        }
+    }
+
+    void ObjectPoseProviderPlugin::preOnInitComponent()
+    {
+        parent<Component>().offeringTopicFromProperty(makePropertyName(PROPERTY_NAME));
+    }
+
+    void ObjectPoseProviderPlugin::preOnConnectComponent()
+    {
+        parent<ObjectPoseProviderPluginUser>().objectPoseTopic = createObjectPoseTopic();
+    }
+
+    void ObjectPoseProviderPlugin::postOnConnectComponent()
+    {
+        objpose::ObjectPoseTopicPrx& topic = parent<ObjectPoseProviderPluginUser>().objectPoseTopic;
+        if (topic)
+        {
+            topic->reportProviderAvailable(parent<Component>().getName());
+        }
+        else
+        {
+            ARMARX_WARNING << "Object pose topic not ready.";
+        }
+    }
+
+    objpose::ObjectPoseTopicPrx ObjectPoseProviderPlugin::createObjectPoseTopic()
+    {
+        return parent<Component>().getTopicFromProperty<objpose::ObjectPoseTopicPrx>(makePropertyName(PROPERTY_NAME));
+    }
+
+}
+
+
+namespace armarx
+{
+
+    ObjectPoseProviderPluginUser::ObjectPoseProviderPluginUser()
+    {
+        addPlugin(plugin);
+    }
+
+    objpose::ObjectPoseTopicPrx ObjectPoseProviderPluginUser::createObjectPoseTopic()
+    {
+        return plugin->createObjectPoseTopic();
+    }
+
+}
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.h
new file mode 100644
index 0000000000000000000000000000000000000000..698c7d37592c76b9eb9f1b2aa52ea9b4cec65499
--- /dev/null
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseProviderPlugin.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#include <ArmarXCore/core/Component.h>
+
+#include <RobotAPI/interface/objectpose/ObjectPoseProvider.h>
+
+
+namespace armarx::plugins
+{
+
+    class ObjectPoseProviderPlugin : public ComponentPlugin
+    {
+    public:
+        using ComponentPlugin::ComponentPlugin;
+
+        void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
+
+        void preOnInitComponent() override;
+        void preOnConnectComponent() override;
+        void postOnConnectComponent() override;
+
+        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
+
+
+    private:
+
+        static constexpr const char* PROPERTY_NAME = "ObjectPoseTopicName";
+
+    };
+
+}
+
+
+namespace armarx
+{
+
+    /**
+     * @brief Provides an `objpose::ObjectPoseTopicPrx objectPoseTopic` as member variable.
+     */
+    class ObjectPoseProviderPluginUser :
+        virtual public ManagedIceObject
+        , virtual objpose::ObjectPoseProvider
+    {
+    public:
+
+        ObjectPoseProviderPluginUser();
+
+        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
+
+        objpose::ObjectPoseTopicPrx objectPoseTopic;
+
+    private:
+
+        armarx::plugins::ObjectPoseProviderPlugin* plugin = nullptr;
+
+    };
+}