diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
index 2a33e54c17fe0ed1ac0c836d1286c28fdece5f9d..354eec9cea9d1d1e37f4dc4ea790b47ba1749755 100644
--- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
+++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
@@ -236,10 +236,10 @@ namespace armarx::armem::server
         // Core segment processors will aquire the core segment locks.
         armem::wm::query_proc::MemoryQueryProcessor wmProcessor(
             input.withData ? armem::DataMode::WithData : armem::DataMode::NoData);
-        wm::Memory wmResult = wmProcessor.process(input, *workingMemory, /* execute if: */ { query::data::QueryTarget::WM });
+        wm::Memory wmResult = wmProcessor.process(input, *workingMemory);
 
         armem::ltm::query_proc::MemoryQueryProcessor ltmProcessor;
-        ltm::Memory ltmResult = ltmProcessor.process(input, *longtermMemory, /* execute if: */ { query::data::QueryTarget::LTM });
+        ltm::Memory ltmResult = ltmProcessor.process(input, *longtermMemory);
 
         armem::query::data::Result result;
         if (ltmResult.hasData())
@@ -267,7 +267,7 @@ namespace armarx::armem::server
             auto queryInput = armem::client::QueryInput::fromIce(input);
             queryInput.replaceQueryTarget(query::data::QueryTarget::LTM, query::data::QueryTarget::WM);
 
-            wm::Memory merged_result = wmProcessor.process(queryInput.toIce(), wmResult, /* execute if: */ { query::data::QueryTarget::WM });
+            wm::Memory merged_result = wmProcessor.process(queryInput.toIce(), wmResult);
             if (!merged_result.hasData())
             {
                 ARMARX_ERROR << "A merged and postprocessed Memory has no data although at least the LTM result contains data. This indicates that something is wrong.";
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 95943dd2f18289360336c22b910913835a84c604..2af92450309d640122bffc9066c1a1df7bdfff49 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/BaseQueryProcessorBase.h
@@ -22,34 +22,29 @@ namespace armarx::armem::base::query_proc
         virtual ~BaseQueryProcessorBase() = default;
 
 
-        DataT process(const QueryT& query, const DataT& data, const query::data::QueryTargets& executeIf = {}) const
+        DataT process(const QueryT& query, const DataT& data) const
         {
             DataT result = data.copyEmpty();
-
-            for (const auto queryTarget : query.targets)
+            if (getTargets(query.targets).count(getTargetType()))
             {
-                if (std::find(executeIf.begin(), executeIf.end(), queryTarget) != executeIf.end())
-                {
-                    this->process(result, query, data);
-                    break;
-                }
+                this->process(result, query, data);
             }
             return result;
         }
 
-        DataT process(const QueryPtrT& query, const DataT& data, const query::data::QueryTargets& executeIf = {}) const
+        DataT process(const QueryPtrT& query, const DataT& data) const
         {
-            return this->process(*query, *data, executeIf);
+            return this->process(*query, *data);
         }
 
-        DataT process(const QuerySeqT& queries, const DataT& data, const query::data::QueryTargets& executeIf = {}) const
+        DataT process(const QuerySeqT& queries, const DataT& data) const
         {
             DataT result = data.copyEmpty();
-            this->process(result, queries, data, executeIf);
+            this->process(result, queries, data);
             return result;
         }
 
-        void process(DataT& result, const QuerySeqT& queries, const DataT& data, const query::data::QueryTargets& executeIf = {}) const
+        void process(DataT& result, const QuerySeqT& queries, const DataT& data) const
         {
             if (queries.empty())
             {
@@ -57,35 +52,37 @@ namespace armarx::armem::base::query_proc
                 return;
             }
 
-            if (executeIf.empty())
-            {
-                ARMARX_DEBUG << "Could not execute query. ExecuteIf s empty.";
-                return;
-            }
-
             for (const auto& query : queries)
             {
-                if (query->targets.empty())
+                if (getTargets(query->targets).count(getTargetType()))
                 {
-                    ARMARX_DEBUG << "The targets of a query are empty";
-                    continue;
-                }
-
-                for (const auto queryTarget : query->targets)
-                {
-                    if (std::find(executeIf.begin(), executeIf.end(), queryTarget) != executeIf.end())
-                    {
-                        this->process(result, *query, data);
-                        break;
-                    }
-                    else
-                    {
-                        ARMARX_DEBUG << "The query target " << queryTarget << " was not found in executeIf: " << executeIf;
-                    }
+                    this->process(result, *query, data);
                 }
             }
         }
 
         virtual void process(DataT& result, const QueryT& query, const DataT& data) const = 0;
+
+
+    protected:
+
+        virtual query::data::QueryTarget getTargetType() const = 0;
+
+
+    private:
+
+        /// If empty, e.g. when receiving queries from python, we use WM as default.
+        /// We do it here as (Sl)ice does not support default values for vectors.
+        static std::set<query::data::QueryTarget> getTargets(const std::vector<query::data::QueryTarget>& _targets)
+        {
+            std::set<query::data::QueryTarget> targets(_targets.begin(), _targets.end());
+            if (targets.empty())
+            {
+                ARMARX_DEBUG << "Query has no targets - using WM as default.";
+                targets.insert(query::data::QueryTarget::WM);
+            }
+            return targets;
+        }
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h
index cc06defc93976ea018ab8a7d3823a00d6121543d..55c5e51126b49775db7317d6401aa695c4b5581c 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h
@@ -34,9 +34,9 @@ namespace armarx::armem::base::query_proc
 
 
         using Base::process;
-        _MemoryT process(const armem::query::data::Input& input, const _MemoryT& memory, const std::vector<query::data::QueryTarget>& executeIf = {}) const
+        _MemoryT process(const armem::query::data::Input& input, const _MemoryT& memory) const
         {
-            return this->process(input.memoryQueries, memory, executeIf);
+            return this->process(input.memoryQueries, memory);
         }
 
         void process(_MemoryT& result,
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/BaseQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/BaseQueryProcessor.h
index 84f967795fd26d79d173a14e71498dbec7d56ee1..469b5f907d01bbff757b1bea14ff8e80e5769315 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/BaseQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/BaseQueryProcessor.h
@@ -22,5 +22,11 @@ namespace armarx::armem::d_ltm::query_proc
         {}
 
     protected:
+
+        query::data::QueryTarget getTargetType() const override
+        {
+            return query::data::QueryTarget::Disk;
+        }
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/CoreSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/CoreSegmentQueryProcessor.h
index 1c40f7fc64b0a2c59fdc3e54d968c6627480cbb0..5c043a2d1dbe2218078591adc3fc0ebac0bfe932 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/CoreSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/CoreSegmentQueryProcessor.h
@@ -27,7 +27,7 @@ namespace armarx::armem::d_ltm::query_proc
     protected:
         virtual ProviderSegmentT providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegmentT& s) const override
         {
-            return providerSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::Disk});
+            return providerSegmentProcessor.process(q, s);
         }
 
     private:
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/MemoryQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/MemoryQueryProcessor.h
index 2abdcc1ccc7c25a317edc67e36835cb4a4df2f9b..038523950bfe399c2ef7a65b79fde43376651617 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/MemoryQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/MemoryQueryProcessor.h
@@ -26,7 +26,7 @@ namespace armarx::armem::d_ltm::query_proc
     protected:
         virtual CoreSegmentT coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegmentT& s) const override
         {
-            return coreSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::Disk});
+            return coreSegmentProcessor.process(q, s);
         }
 
     private:
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/ProviderSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/ProviderSegmentQueryProcessor.h
index 94c2e756875c1152f8018f70c5e0d691a5704582..2043273ec7c5f3fee2d02410a145ef436c47459c 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/ProviderSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/diskmemory/ProviderSegmentQueryProcessor.h
@@ -26,7 +26,7 @@ namespace armarx::armem::d_ltm::query_proc
     protected:
         virtual EntityT entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const EntityT& s) const override
         {
-            return entityProcessor.process(q, s, {armem::query::data::QueryTarget::Disk});
+            return entityProcessor.process(q, s);
         }
 
     private:
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/BaseQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/BaseQueryProcessor.h
index 458128e5305139db33a6c25d6ff19e3e92772fd5..64f560afff93e5d0cfff4b036f68f0fb4e8cdaba 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/BaseQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/BaseQueryProcessor.h
@@ -22,5 +22,11 @@ namespace armarx::armem::ltm::query_proc
         {}
 
     protected:
+
+        query::data::QueryTarget getTargetType() const override
+        {
+            return query::data::QueryTarget::LTM;
+        }
+
     };
 }
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/CoreSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/CoreSegmentQueryProcessor.h
index e333dd816aedabbb8dfa7209c687caf727d9ccf9..dc379f1d88fa82bbe886e412e0341079fa43fce9 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/CoreSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/CoreSegmentQueryProcessor.h
@@ -27,7 +27,7 @@ namespace armarx::armem::ltm::query_proc
     protected:
         virtual ProviderSegmentT providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegmentT& s) const override
         {
-            return providerSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::LTM});
+            return providerSegmentProcessor.process(q, s);
         }
 
     private:
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/MemoryQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/MemoryQueryProcessor.h
index 569014d6579eeb6c99996e4be5b7cb68f65457b1..a5129417262515975efa247398602272865ee5ec 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/MemoryQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/MemoryQueryProcessor.h
@@ -26,7 +26,7 @@ namespace armarx::armem::ltm::query_proc
     protected:
         virtual CoreSegmentT coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegmentT& s) const override
         {
-            return coreSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::LTM});
+            return coreSegmentProcessor.process(q, s);
         }
 
     private:
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/ProviderSegmentQueryProcessor.h b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/ProviderSegmentQueryProcessor.h
index 5443acfd6594b98250711cf2acfd434a98414066..e0c6db9e3ef06e6241e9af8c572bb7fc78eec452 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/ProviderSegmentQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/longtermmemory/ProviderSegmentQueryProcessor.h
@@ -26,7 +26,7 @@ namespace armarx::armem::ltm::query_proc
     protected:
         virtual EntityT entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const EntityT& s) const override
         {
-            return entityProcessor.process(q, s, {armem::query::data::QueryTarget::LTM});
+            return entityProcessor.process(q, s);
         }
 
     private:
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 933f9a6fd628b8c2747c2c6449499e596593935b..d4875053c93dc2278cdb9f327fc0739370811fe7 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/BaseQueryProcessor.h
@@ -26,6 +26,11 @@ namespace armarx::armem::wm::query_proc
 
     protected:
 
+        query::data::QueryTarget getTargetType() const override
+        {
+            return query::data::QueryTarget::WM;
+        }
+
         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 bda9ad04de5ac7cd46be68a2f5f7ca2ec1419040..4c41f16664af134b66b00355080d8de362d7eaf9 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/CoreSegmentQueryProcessor.cpp
@@ -32,7 +32,7 @@ namespace armarx::armem::wm::query_proc
 
     ProviderSegment CoreSegmentQueryProcessor::providerSegmentProcessorProcess(const armem::query::data::ProviderSegmentQuerySeq& q, const ProviderSegment& s) const
     {
-        return providerSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+        return providerSegmentProcessor.process(q, s);
     }
 
 
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 7ef31f2badfbffbf49f132c855b2143b8ddc10bd..005649b8f670586f16177f90a43c6e0f48b3879d 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
@@ -6,7 +6,7 @@
 namespace armarx::armem::wm::query_proc
 {
     EntityQueryProcessor::EntityQueryProcessor(DataMode dataMode) :
-        Base(dataMode)
+        BaseQueryProcessor<wm::Entity, armem::query::data::EntityQuery>(dataMode)
     {}
 
 
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 dd249b61caaacaca11e369b19b8f4e0da1dc5cf5..7aa868af13bc525b42d93f230a8398c27531525d 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/MemoryQueryProcessor.cpp
@@ -16,7 +16,7 @@ namespace armarx::armem::wm::query_proc
 
     CoreSegment MemoryQueryProcessor::coreSegmentProcessorProcess(const armem::query::data::CoreSegmentQuerySeq& q, const CoreSegment& s) const
     {
-        return coreSegmentProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+        return coreSegmentProcessor.process(q, s);
     }
 
 }
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 a5e23184fa999dc44d72de7588cf77fad0503729..eb2524631b4c1d2fb89eb3e7c36a3aaf86f31e29 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/ProviderSegmentQueryProcessor.cpp
@@ -24,7 +24,7 @@ namespace armarx::armem::wm::query_proc
 
     Entity ProviderSegmentQueryProcessor::entityProcessorProcess(const armem::query::data::EntityQuerySeq& q, const Entity& s) const
     {
-        return entityProcessor.process(q, s, {armem::query::data::QueryTarget::WM});
+        return entityProcessor.process(q, s);
     }
 
 }
diff --git a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp
index 5037bad396c0e7a83b7704b4895a25225ae8106f..f88a2e1731c87de6fa163c307c90f4c6d3e01ae2 100644
--- a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp
+++ b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp
@@ -245,7 +245,7 @@ namespace armarx::armem::gui
                         input.addQueryTargetToAll(armem::query::data::QueryTarget::Disk);
 
                         armem::d_ltm::query_proc::MemoryQueryProcessor d_ltm_processor;
-                        dMem = d_ltm_processor.process(input.toIce(), dMem, /* execute if: */ { query::data::QueryTarget::Disk });
+                        dMem = d_ltm_processor.process(input.toIce(), dMem);
 
                         wm::Memory converted = dMem.convert();
                         memoryData[k] = std::move(converted);
@@ -275,7 +275,7 @@ namespace armarx::armem::gui
 
                             // requery (e.g. to get only the last n values instead of the last n from disk and the last n from wm)
                             armem::wm::query_proc::MemoryQueryProcessor wm_processor;
-                            result.memory = wm_processor.process(input.toIce(), result.memory, /* execute if: */ { query::data::QueryTarget::WM });
+                            result.memory = wm_processor.process(input.toIce(), result.memory);
 
                             if (!result.memory.hasData())
                             {
@@ -293,7 +293,7 @@ namespace armarx::armem::gui
                 }
                 else
                 {
-                    ARMARX_WARNING << "A query for memory '" + name + "' produced an error: " << result.errorMessage;
+                    ARMARX_WARNING << "A query for memory '" << name << "' produced an error: " << result.errorMessage;
                     if (statusLabel)
                     {
                         statusLabel->setText(QString::fromStdString(result.errorMessage));