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 1b704ed4907f6e1ab4222904f542d74c3bbc6684..0c6199eac95465a27da8bc0d59b4fcd40607d139 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/CoreSegmentQueryProcessorBase.h
@@ -71,7 +71,7 @@ namespace armarx::armem::server::query_proc::base
         {
             coreSegment.forEachProviderSegment([this, &query, &result](const ProviderSegmentT & providerSegment)
             {
-                childProcessor.process(result.addProviderSegment(providerSegment.name(), providerSegment.aronType()), query.providerSegmentQueries, providerSegment);
+                this->_processResult(result, providerSegment, query);
             });
         }
 
@@ -79,14 +79,10 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::core::Single& query,
                      const CoreSegmentT& coreSegment) const
         {
-            try
+            const ProviderSegmentT* providerSegment = coreSegment.findProviderSegment(query.providerSegmentName);
+            if (providerSegment)
             {
-                const ProviderSegmentT& providerSegment = coreSegment.getProviderSegment(query.providerSegmentName);
-                childProcessor.process(result.addProviderSegment(providerSegment.name(), providerSegment.aronType()), query.providerSegmentQueries, providerSegment);
-            }
-            catch (const error::MissingEntry&)
-            {
-                // Leave empty.
+                this->_processResult(result, *providerSegment, query);
             }
         }
 
@@ -94,18 +90,29 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::core::Regex& query,
                      const CoreSegmentT& coreSegment) const
         {
-            std::regex regex(query.providerSegmentNameRegex);
+            const std::regex regex(query.providerSegmentNameRegex);
             coreSegment.forEachProviderSegment(
                 [this, &result, &query, &regex](const ProviderSegmentT & providerSegment)
             {
                 if (std::regex_search(providerSegment.name(), regex))
                 {
-                    childProcessor.process(result.addProviderSegment(providerSegment.name(), providerSegment.aronType()), query.providerSegmentQueries, providerSegment);
+                    this->_processResult(result, providerSegment, query);
                 }
             });
         }
 
 
+    private:
+
+        void _processResult(ResultCoreSegmentT& result,
+                            const ProviderSegmentT& providerSegment,
+                            const armem::query::data::CoreSegmentQuery& query) const
+        {
+            ResultProviderSegmentT& added = result.addProviderSegment(providerSegment.name(), providerSegment.aronType());
+            childProcessor.process(added, query.providerSegmentQueries, providerSegment);
+        }
+
+
     protected:
 
         ChildProcessorT childProcessor;
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.cpp b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.cpp
index 5cbac85a8dc5f8899e7c72434516063121a2b4c1..d9df528842d11fd66ba38877318785d6c4dd5263 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.cpp
@@ -1 +1,12 @@
 #include "EntityQueryProcessorBase.h"
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
+
+namespace armarx::armem::server::query_proc::base
+{
+    void detail::checkReferenceTimestampNonNegative(const Time& timestamp)
+    {
+        ARMARX_CHECK_NONNEGATIVE(timestamp.toMicroSeconds()) << "Reference timestamp must be non-negative.";
+    }
+}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h
index 6552f44f54448dc6f11e8cfe5b820e2bb236bcd9..b0210c37e4ed71b64875a79453e56d928852b54f 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h
@@ -8,12 +8,14 @@
 
 #include <RobotAPI/interface/armem/query.h>
 
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
-
 #include <cstdint>
 #include <iterator>
 
 
+namespace armarx::armem::server::query_proc::base::detail
+{
+    void checkReferenceTimestampNonNegative(const Time& timestamp);
+}
 namespace armarx::armem::server::query_proc::base
 {
 
@@ -92,27 +94,19 @@ namespace armarx::armem::server::query_proc::base
         {
             if (query.timestamp < 0)
             {
-                try
+                if (const ResultSnapshotT* snapshot = entity.findLatestSnapshot())
                 {
-                    addResultSnapshot(result, entity.getLatestSnapshot());
-                }
-                catch (const armem::error::EntityHistoryEmpty&)
-                {
-#if 0
-                    ARMARX_IMPORTANT << "Failed to retrieve latest snapshot from entity " << entity.id() << ". "
-                                     << "Entity is empty.";
-#endif
+                    addResultSnapshot(result, *snapshot);
                 }
             }
             else
             {
                 const Time time = fromIce<Time>(query.timestamp);
-                try
+                if (const ResultSnapshotT* snapshot = entity.findSnapshot(time))
                 {
-                    auto snapshot = entity.getSnapshot(time);
-                    addResultSnapshot(result, snapshot);
+                    addResultSnapshot(result, *snapshot);
                 }
-                catch (const armem::error::MissingEntry&)
+                else
                 {
                     // Leave empty.
 #if 0
@@ -178,8 +172,8 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::entity::BeforeOrAtTime& query,
                      const EntityT& entity) const
         {
-            const auto referenceTimestamp = fromIce<Time>(query.timestamp);
-            ARMARX_CHECK(referenceTimestamp.toMicroSeconds() >= 0) << "Reference timestamp is negative!";
+            const Time referenceTimestamp = fromIce<Time>(query.timestamp);
+            detail::checkReferenceTimestampNonNegative(referenceTimestamp);
 
             if (auto* beforeOrAt = entity.findLatestSnapshotBeforeOrAt(referenceTimestamp))
             {
@@ -192,8 +186,8 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::entity::BeforeTime& query,
                      const EntityT& entity) const
         {
-            const armem::Time referenceTimestamp = fromIce<Time>(query.timestamp);
-            ARMARX_CHECK(referenceTimestamp.toMicroSeconds() >= 0) << "Reference timestamp must be non-negative.";
+            const Time referenceTimestamp = fromIce<Time>(query.timestamp);
+            detail::checkReferenceTimestampNonNegative(referenceTimestamp);
 
             std::vector<const EntitySnapshotT*> befores;
             entity.forEachSnapshotBefore(referenceTimestamp, [&befores](const EntitySnapshotT & s)
@@ -224,7 +218,7 @@ namespace armarx::armem::server::query_proc::base
                      const EntityT& entity) const
         {
             const Time referenceTimestamp = fromIce<Time>(query.timestamp);
-            ARMARX_CHECK(referenceTimestamp.toMicroSeconds() >= 0) << "Reference timestamp is negative!";
+            detail::checkReferenceTimestampNonNegative(referenceTimestamp);
 
             const float referenceTimestampMicroSeconds = referenceTimestamp.toMicroSeconds();
             const float epsDuration = fromIce<Time>(query.eps).toMicroSeconds();
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 ecc3ebe511610a0fc3cbb27d3fb93a9e203eb573..91c41d9f54cb762654db9763dfe6d9c3af1aa60d 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/MemoryQueryProcessorBase.h
@@ -73,7 +73,7 @@ namespace armarx::armem::server::query_proc::base
         {
             memory.forEachCoreSegment([this, &result, &query](const CoreSegmentT & coreSegment)
             {
-                childProcessor.process(result.addCoreSegment(coreSegment.name(), coreSegment.aronType()), query.coreSegmentQueries, coreSegment);
+                this->_processResult(result, coreSegment, query);
             });
         }
 
@@ -81,13 +81,9 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::memory::Single& query,
                      const MemoryT& memory) const
         {
-            try
-            {
-                const CoreSegmentT& coreSegment = memory.getCoreSegment(query.coreSegmentName);
-                childProcessor.process(result.addCoreSegment(coreSegment.name(), coreSegment.aronType()), query.coreSegmentQueries, coreSegment);
-            }
-            catch (const error::MissingEntry&)
+            if (const CoreSegmentT* coreSegment = memory.findCoreSegment(query.coreSegmentName))
             {
+                this->_processResult(result, *coreSegment, query);
             }
         }
 
@@ -100,12 +96,23 @@ namespace armarx::armem::server::query_proc::base
             {
                 if (std::regex_search(coreSegment.name(), regex))
                 {
-                    childProcessor.process(result.addCoreSegment(coreSegment.name(), coreSegment.aronType()), query.coreSegmentQueries, coreSegment);
+                    this->_processResult(result, coreSegment, query);
                 }
             });
         }
 
 
+    private:
+
+        void _processResult(ResultMemoryT& result,
+                            const CoreSegmentT& coreSegment,
+                            const armem::query::data::MemoryQuery& query) const
+        {
+            ResultCoreSegmentT& added = result.addCoreSegment(coreSegment.name(), coreSegment.aronType());
+            childProcessor.process(added, query.coreSegmentQueries, coreSegment);
+        }
+
+
     protected:
 
         ChildProcessorT childProcessor;
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/ProviderSegmentQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/ProviderSegmentQueryProcessorBase.h
index 5102a12829c106e58159e7dcc35a7df0890f93d5..46f146694825936d4834b579093881e8452db3ca 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/base/ProviderSegmentQueryProcessorBase.h
+++ b/source/RobotAPI/libraries/armem/server/query_proc/base/ProviderSegmentQueryProcessorBase.h
@@ -70,7 +70,7 @@ namespace armarx::armem::server::query_proc::base
         {
             providerSegment.forEachEntity([this, &result, &query](const EntityT & entity)
             {
-                childProcessor.process(result.addEntity(entity.name()), query.entityQueries, entity);
+                this->_processResult(result, entity, query);
             });
         }
 
@@ -78,14 +78,9 @@ namespace armarx::armem::server::query_proc::base
                      const armem::query::data::provider::Single& query,
                      const ProviderSegmentT& providerSegment) const
         {
-            try
+            if (const EntityT* entity = providerSegment.findEntity(query.entityName))
             {
-                const EntityT& entity = providerSegment.getEntity(query.entityName);
-                childProcessor.process(result.addEntity(entity.name()), query.entityQueries, entity);
-            }
-            catch (const error::MissingEntry&)
-            {
-                // Leave empty.
+                this->_processResult(result, *entity, query);
             }
         }
 
@@ -98,13 +93,24 @@ namespace armarx::armem::server::query_proc::base
             {
                 if (std::regex_search(entity.name(), regex))
                 {
-                    childProcessor.process(result.addEntity(entity.name()), query.entityQueries, entity);
+                    this->_processResult(result, entity, query);
                 }
                 return true;
             });
         }
 
 
+    private:
+
+        void _processResult(ResultProviderSegmentT& result,
+                            const EntityT& entity,
+                            const armem::query::data::ProviderSegmentQuery& query) const
+        {
+            ResultEntityT& added = result.addEntity(entity.name());
+            childProcessor.process(added, query.entityQueries, entity);
+        }
+
+
     protected:
 
         ChildProcessorT childProcessor;