diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.cpp b/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.cpp
index ce437fd67bdd2ba3aa6ac9943093525db99a581e..34e2abd99c889d65723065c8b4726b2ea0aa9bd1 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.cpp
@@ -1 +1,2 @@
 #include "BaseQueryProcessorBase.h"
+
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h
index f71aede29731259471cf5e8dd660917b3e848bb1..95943dd2f18289360336c22b910913835a84c604 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h
@@ -19,6 +19,9 @@ namespace armarx::armem::base::query_proc
 
     public:
 
+        virtual ~BaseQueryProcessorBase() = default;
+
+
         DataT process(const QueryT& query, const DataT& data, const query::data::QueryTargets& executeIf = {}) const
         {
             DataT result = data.copyEmpty();
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h
index f8ab8c113e510e57a1ab2b53af6a06e60e393ce1..d334019c4ed70de05e56e6e0164a912741e0e772 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h
@@ -1,17 +1,15 @@
 #pragma once
 
-#include <RobotAPI/interface/armem/query.h>
-
-#include "BaseQueryProcessorBase.h"
-#include "ProviderSegmentQueryProcessorBase.h"
-
 #include <regex>
 
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include <RobotAPI/interface/armem/query.h>
 #include <RobotAPI/libraries/armem/core/error.h>
 
+#include "BaseQueryProcessorBase.h"
+#include "ProviderSegmentQueryProcessorBase.h"
 
 
 namespace armarx::armem::base::query_proc
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h
index 99811dcc72d168dfecb0c5864f0760c4d5634a6e..708157ab602884f8fd35ee3d78019924fded2c4d 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h
@@ -1,11 +1,9 @@
 #pragma once
 
-#include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
-
 #include <RobotAPI/interface/armem/query.h>
 #include <RobotAPI/libraries/armem/core/DataMode.h>
 
-#include "../base/BaseQueryProcessorBase.h"
+#include <RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h>
 
 
 namespace armarx::armem::wm::query_proc
@@ -20,11 +18,14 @@ namespace armarx::armem::wm::query_proc
         using Base = base::query_proc::BaseQueryProcessorBase<DataT, QueryT>;
 
     public:
+
         BaseQueryProcessor(DataMode dataMode = DataMode::WithData) :
             dataMode(dataMode)
         {}
 
     protected:
+
         DataMode dataMode;
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp
index afbe35ad15eea0342b0b0d4df0200aaf0d32aa2a..52efc9cc4930c9c50fb4b2fdc26986e4183ff3e4 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp
@@ -1 +1,24 @@
 #include "CoreSegmentQueryProcessor.h"
+
+#include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
+
+
+namespace armarx::armem::wm::query_proc
+{
+
+    CoreSegmentQueryProcessor::~CoreSegmentQueryProcessor() = default;
+
+    data::CoreSegment CoreSegmentQueryProcessor::processToIce(const armem::query::data::CoreSegmentQuery& query, const wm::CoreSegment& coreSegment) const
+    {
+        data::CoreSegment data;
+        toIce(data, process(query, coreSegment));
+        return data;
+    }
+
+    ProviderSegment CoreSegmentQueryProcessor::providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegmentT& s) const
+    {
+        return providerSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+    }
+
+
+}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.h
index 390ab66f656ece6010457f12f09917d9fca413f6..50387e5f1e8d7be59a1e7e2ce038610458420875 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.h
@@ -1,8 +1,11 @@
 #pragma once
 
-#include "BaseQueryProcessor.h"
-#include "../base/CoreSegmentQueryProcessorBase.h"
+#include <mutex>
+
+#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h>
+#include <RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h>
 
+#include "BaseQueryProcessor.h"
 #include "ProviderSegmentQueryProcessor.h"
 
 
@@ -18,23 +21,24 @@ namespace armarx::armem::wm::query_proc
         using Base = BaseQueryProcessor<wm::CoreSegment, armem::query::data::CoreSegmentQuery>;
 
     public:
+
         CoreSegmentQueryProcessor(DataMode dataMode = DataMode::WithData) :
             Base(dataMode), providerSegmentProcessor(dataMode)
         {}
+        virtual ~CoreSegmentQueryProcessor() override;
 
         using Base::process;
-        data::CoreSegment processToIce(const armem::query::data::CoreSegmentQuery& query, const wm::CoreSegment& coreSegment) const
-        {
-            return toIce<data::CoreSegment>(process(query, coreSegment));
-        }
+        data::CoreSegment processToIce(const armem::query::data::CoreSegmentQuery& query, const wm::CoreSegment& coreSegment) const;
+
 
     protected:
-        virtual ProviderSegmentT providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegmentT& s) const override
-        {
-            return providerSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
-        }
+
+        virtual ProviderSegment providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegmentT& s) const override;
+
 
     private:
+
         ProviderSegmentQueryProcessor providerSegmentProcessor;
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
index c1c321b026b173c6552758fb9d8b9fdf722ea5a4..001bedae13b13b671252c94540a127402d002465 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
@@ -1 +1,40 @@
 #include "EntityQueryProcessor.h"
+
+#include <RobotAPI/libraries/armem/core/workingmemory/Entity.h>
+#include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
+
+
+namespace armarx::armem::wm::query_proc
+{
+
+    EntityQueryProcessor::~EntityQueryProcessor() = default;
+
+
+    void EntityQueryProcessor::addResultSnapshot(wm::Entity& result, const wm::EntitySnapshot& snapshot) const
+    {
+        bool withData = (dataMode == DataMode::WithData);
+        if (withData)
+        {
+            result.addSnapshot(snapshot.copy());
+        }
+        else
+        {
+            result.addSnapshot(snapshot.copyWithoutData());
+        }
+    }
+
+
+    data::Entity EntityQueryProcessor::processToIce(const armem::query::data::EntityQuery& query, const wm::Entity& entity) const
+    {
+        data::Entity data;
+        toIce(data, process(query, entity));
+        return data;
+    }
+
+
+    void EntityQueryProcessor::addResultSnapshot(wm::Entity& result, wm::Entity::ContainerT::const_iterator it) const
+    {
+        addResultSnapshot(result, it->second);
+    }
+
+}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.h
index 94dc905e489be501257be508cff03c7efee8f8b8..34f66237e98d5c6f37fb2ea023ca4820b41c53e0 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.h
@@ -1,9 +1,10 @@
 #pragma once
 
+#include <RobotAPI/libraries/armem/core/workingmemory/Entity.h>
+#include <RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h>
+
 #include "BaseQueryProcessor.h"
-#include "../base/EntityQueryProcessorBase.h"
 
-#include "EntityQueryProcessor.h"
 
 namespace armarx::armem::wm::query_proc
 {
@@ -17,33 +18,18 @@ namespace armarx::armem::wm::query_proc
         using Base = BaseQueryProcessor<wm::Entity, armem::query::data::EntityQuery>;
 
     public:
+
         EntityQueryProcessor(DataMode dataMode = DataMode::WithData) :
             Base(dataMode)
         {}
+        virtual ~EntityQueryProcessor() override;
 
-        data::Entity processToIce(const armem::query::data::EntityQuery& query, const wm::Entity& entity) const
-        {
-            return toIce<data::Entity>(process(query, entity));
-        }
+        data::Entity processToIce(const armem::query::data::EntityQuery& query, const wm::Entity& entity) const;
 
     private:
-        void addResultSnapshot(wm::Entity& result, wm::Entity::ContainerT::const_iterator it) const override
-        {
-            addResultSnapshot(result, it->second);
-        }
-
-        void addResultSnapshot(wm::Entity& result, const wm::EntitySnapshot& snapshot) const override
-        {
-            bool withData = (dataMode == DataMode::WithData);
-            if (withData)
-            {
-                result.addSnapshot(snapshot.copy());
-            }
-            else
-            {
-                result.addSnapshot(snapshot.copyWithoutData());
-            }
-        }
+
+        void addResultSnapshot(wm::Entity& result, wm::Entity::ContainerT::const_iterator it) const override;
+        void addResultSnapshot(wm::Entity& result, const wm::EntitySnapshot& snapshot) const override;
 
     };
 
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp
index 69b04de6c9e623286a5bda836dddfdc8b551b64a..cb8d94789d2cccd67ecb715fda4913daebe655cc 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp
@@ -1 +1,10 @@
 #include "MemoryQueryProcessor.h"
+
+
+namespace armarx::armem::wm::query_proc
+{
+    CoreSegment MemoryQueryProcessor::coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegmentT& s) const
+    {
+        return coreSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+    }
+}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.h
index 8284df202bbcf602e2433639fe85388ca13d75ff..674b9ede6b3bb795ae65b00bfc1d220d8f970ed7 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.h
@@ -1,10 +1,13 @@
 #pragma once
 
+#include <RobotAPI/libraries/armem/core/workingmemory/Memory.h>
+#include <RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h>
+
 #include "BaseQueryProcessor.h"
-#include "../base/MemoryQueryProcessorBase.h"
 
 #include "CoreSegmentQueryProcessor.h"
 
+
 namespace armarx::armem::wm::query_proc
 {
     /**
@@ -17,18 +20,20 @@ namespace armarx::armem::wm::query_proc
         using Base = BaseQueryProcessor<wm::Memory, armem::query::data::MemoryQuery>;
 
     public:
+
         MemoryQueryProcessor(DataMode dataMode = DataMode::WithData) :
             Base(dataMode), coreSegmentProcessor(dataMode)
         {}
 
+
     protected:
-        virtual CoreSegmentT coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegmentT& s) const override
-        {
-            return coreSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
-        }
+
+        virtual CoreSegment coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegment& s) const override;
 
 
     private:
+
         CoreSegmentQueryProcessor coreSegmentProcessor;
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp
index 9a2a4405001f0904b74fc6afcf96813eef0879cd..84189bf2ba08d706e623fb065de7063500312b86 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp
@@ -1 +1,25 @@
 #include "ProviderSegmentQueryProcessor.h"
+
+#include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
+
+
+namespace armarx::armem::wm::query_proc
+{
+
+    ProviderSegmentQueryProcessor::~ProviderSegmentQueryProcessor() = default;
+
+
+    data::ProviderSegment ProviderSegmentQueryProcessor::processToIce(const armem::query::data::ProviderSegmentQuery& query, const wm::ProviderSegment& providerSegment) const
+    {
+        data::ProviderSegment data;
+        toIce(data, process(query, providerSegment));
+        return data;
+    }
+
+
+    Entity ProviderSegmentQueryProcessor::entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const Entity& s) const
+    {
+        return entityProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+    }
+
+}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.h
index 468138d9e2bbd526db3632019beca6a5a29f8269..adb921d0211430e818b6aa5e6ce6e62a70acdad8 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.h
@@ -1,10 +1,12 @@
 #pragma once
 
-#include "BaseQueryProcessor.h"
-#include "../base/ProviderSegmentQueryProcessorBase.h"
+#include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h>
+#include <RobotAPI/libraries/armem/server/query_proc/base/ProviderSegmentQueryProcessorBase.h>
 
+#include "BaseQueryProcessor.h"
 #include "EntityQueryProcessor.h"
 
+
 namespace armarx::armem::wm::query_proc
 {
     /**
@@ -17,23 +19,24 @@ namespace armarx::armem::wm::query_proc
         using Base = BaseQueryProcessor<wm::ProviderSegment, armem::query::data::ProviderSegmentQuery>;
 
     public:
+
         ProviderSegmentQueryProcessor(DataMode dataMode = DataMode::WithData) :
             Base(dataMode), entityProcessor(dataMode)
         {}
+        virtual ~ProviderSegmentQueryProcessor() override;
+
 
         using Base::process;
-        data::ProviderSegment processToIce(const armem::query::data::ProviderSegmentQuery& query, const wm::ProviderSegment& providerSegment) const
-        {
-            return toIce<data::ProviderSegment>(process(query, providerSegment));
-        }
+        data::ProviderSegment processToIce(const armem::query::data::ProviderSegmentQuery& query, const wm::ProviderSegment& providerSegment) const;
+
 
     protected:
-        virtual EntityT entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const EntityT& s) const override
-        {
-            return entityProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
-        }
+
+        virtual Entity entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const Entity& s) const override;
 
     private:
+
         EntityQueryProcessor entityProcessor;
+
     };
 }