diff --git a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
index c2716d4e77d6f65edf848be6ed8a842d4452c754..aac48df35df27422b09764275b0f623ed89c26a8 100644
--- a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
+++ b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
@@ -29,6 +29,8 @@
 
 #include <RobotAPI/libraries/armem/component/MemoryRemoteGui.h>
 #include <RobotAPI/libraries/armem/client/MemoryWriter.h>
+#include <RobotAPI/libraries/armem/client/MemoryReader.h>
+#include <RobotAPI/libraries/armem/client/QueryBuilder.h>
 #include <RobotAPI/libraries/armem/memory/ice_conversions.h>
 
 #include <RobotAPI/components/armem/ArMemExampleMemory/aron/Primitive.aron.generated.h>
@@ -156,58 +158,13 @@ namespace armarx
             ARMARX_CHECK_EQUAL(commitResult.results.size(), commit.updates.size());
         }
 
-        /*
-         * ToDo: Recreate with raw and new query syntax.
-        {
-            armem::data::EntitySnapshotQuery query;
-            query.snapshotID = snapshotID.str();
-
-            ARMARX_IMPORTANT
-                    << "Querying snapshot:"
-                    << "\n- snapshotID:     \t'" << query.snapshotID << "'"
-                    ;
-
-            armem::data::EntitySnapshotQueryResultList results = memory->getEntitySnapshots({query});
-
-            ARMARX_CHECK_EQUAL(results.size(), 1);
-            armem::data::EntitySnapshotQueryResult& result = results.at(0);
-
-            ARMARX_INFO << "Result: "
-                        << "\n- success:       \t" << result.success
-                        << "\n- # instances:   \t" << result.instances.size()
-                        << "\n- time created:  \t" << armem::Time::microSeconds(result.timeCreatedMicroSeconds).toDateTime()
-                        << "\n- error message: \t" << result.errorMessage
-                        ;
-        }
-
         if (true)
         {
-            armem::data::EntitySnapshotQuery query;
-            snapshotID.clearTimestamp();
-            query.snapshotID = snapshotID.str();
-
-            ARMARX_IMPORTANT
-                    << "Querying latest snapshot:"
-                    << "\n- entityID:     \t'" << query.snapshotID << "'"
-                    ;
-
-            armem::data::EntitySnapshotQueryResultList results = memory->getEntitySnapshots({query});
-
-            ARMARX_CHECK_EQUAL(results.size(), 1);
-            armem::data::EntitySnapshotQueryResult& result = results.at(0);
-
-            ARMARX_INFO << "Result: "
-                        << "\n- success:       \t" << result.success
-                        << "\n- # instances:   \t" << result.instances.size()
-                        << "\n- time created:  \t" << armem::Time::microSeconds(result.timeCreatedMicroSeconds).toDateTime()
-                        << "\n- error message: \t" << result.errorMessage
-                        ;
+            queryLatestRawIce(snapshotID.getEntityID());
         }
-        */
-
         if (true)
         {
-            rawIceQuery(snapshotID);
+            querySnapshot(snapshotID);
         }
         if (true)
         {
@@ -225,79 +182,115 @@ namespace armarx
     {
     }
 
-    bool ArMemExampleClient::rawIceQuery(const armem::MemoryID& snapshotID)
+    bool ArMemExampleClient::queryLatestRawIce(const armem::MemoryID& entityID)
     {
         ARMARX_IMPORTANT
-                << "Querying latest snapshot:"
-                << "\n- entityID:     \t'" << snapshotID << "'"
-                // << "\n" << *memoryQuery
+                << "Querying latest snapshot (via raw ice query types):"
+                << "\n- entityID:     \t'" << entityID << "'"
                 ;
 
         armem::data::query::EntityQueryPtr entityQuery =
-            // new armem::data::query::entity::Single();
-            new armem::data::query::entity::All();
+            new armem::data::query::entity::Single();
         armem::data::query::ProviderSegmentQueryPtr providerQuery =
-            new armem::data::query::provider::Single({entityQuery}, snapshotID.entityName);
-        // new armem::data::query::provider::All({entityQuery});
+            new armem::data::query::provider::Single({entityQuery}, entityID.entityName);
         armem::data::query::CoreSegmentQueryPtr coreQuery =
-            new armem::data::query::core::Single({providerQuery}, snapshotID.providerSegmentName);
+            new armem::data::query::core::Single({providerQuery}, entityID.providerSegmentName);
         armem::data::query::MemoryQueryPtr memoryQuery =
-            new armem::data::query::memory::Single({coreQuery}, snapshotID.coreSegmentName);
+            new armem::data::query::memory::Single({coreQuery}, entityID.coreSegmentName);
 
 
-        armem::data::QueryInput input;
-        input.memoryQueries = {memoryQuery};
+        armem::data::QueryInput qInput;
+        qInput.memoryQueries = {memoryQuery};
 
-        armem::data::QueryResult iceResult = memory->query(input);
+        armem::data::QueryResult qResult = memory->query(qInput);
         ARMARX_INFO << "Result: "
-                    << "\n- success:       \t" << iceResult.success
-                    << "\n- error message: \t" << iceResult.errorMessage
+                    << "\n- success:       \t" << qResult.success
+                    << "\n- error message: \t" << qResult.errorMessage
                     ;
 
-        if (!iceResult.success)
+        if (qResult.success)
         {
-            ARMARX_ERROR << iceResult.errorMessage;
-            return false;
-        }
+            armem::MemoryPtr result = armem::fromIce<armem::MemoryPtr>(qResult.memory);
 
-        armem::MemoryPtr result = armem::fromIce<armem::MemoryPtr>(iceResult.memory);
+            ARMARX_CHECK_EQUAL(result->coreSegments.size(), 1);
+            armem::CoreSegmentPtr& coreSeg = result->coreSegments.begin()->second;
 
-        ARMARX_CHECK_EQUAL(result->coreSegments.size(), 1);
+            ARMARX_CHECK_EQUAL(coreSeg->providerSegments.size(), 1);
+            armem::ProviderSegmentPtr& provSeg = coreSeg->providerSegments.begin()->second;
 
-        armem::CoreSegmentPtr& coreSeg = result->coreSegments.begin()->second;
-        ARMARX_CHECK_EQUAL(coreSeg->providerSegments.size(), 1);
+            ARMARX_CHECK_EQUAL(provSeg->entities.size(), 1);
+            armem::EntityPtr& entity = provSeg->entities.begin()->second;
 
-        armem::ProviderSegmentPtr& provSeg = coreSeg->providerSegments.begin()->second;
-        ARMARX_CHECK_EQUAL(provSeg->entities.size(), 1);
+            ARMARX_CHECK_GREATER_EQUAL(entity->history.size(), 1);
+            armem::EntitySnapshotPtr& snapshot = entity->history.begin()->second;
 
-        armem::EntityPtr& entity = provSeg->entities.begin()->second;
-        ARMARX_CHECK_GREATER_EQUAL(entity->history.size(), 1);
+            ARMARX_INFO << "Result: "
+                        << "\n- memory:       \t" << result->name()
+                        << "\n- core segment: \t" << coreSeg->name()
+                        << "\n- prov segment: \t" << provSeg->name()
+                        << "\n- entity:       \t" << entity->name()
+                        << "\n- snapshot:     \t" << snapshot->time()
+                        << "\n- #instances:   \t" << snapshot->instances.size()
+                        ;
 
-        armem::EntitySnapshotPtr& snapshot = entity->history.begin()->second;
+            ARMARX_IMPORTANT << "Getting entity from snapshot ID";
+            const armem::Entity& e = result->getEntity(entityID);
+            ARMARX_INFO << "Result: "
+                        << "\n- entity:       \t" << e.name()
+                        << "\n- snapshot:     \t" << e.getLatestSnapshot().time()
+                        << "\n- #instances:   \t" << e.getLatestSnapshot().instances.size()
+                        ;
 
-        ARMARX_INFO << "Result: "
-                    << "\n- memory:       \t" << result->name()
-                    << "\n- core segment: \t" << coreSeg->name()
-                    << "\n- prov segment: \t" << provSeg->name()
-                    << "\n- entity:       \t" << entity->name()
-                    << "\n- snapshot:     \t" << snapshot->time()
-                    << "\n- #instances:   \t" << snapshot->instances.size()
-                    ;
+            tab.queryResult = std::move(result);
+            tab.rebuild = true;
+        }
+        else
+        {
+            ARMARX_ERROR << qResult.errorMessage;
+        }
+
+        return qResult.success;
+    }
+
+    bool ArMemExampleClient::querySnapshot(const armem::MemoryID& snapshotID)
+    {
+        ARMARX_IMPORTANT
+                << "Querying exact snapshot of entity: (via query builder)"
+                << "\n- snapshotID:     \t'" << snapshotID << "'"
+                ;
+
+        armem::MemoryReader reader(memory);
 
+        armem::client::QueryBuilder qb;
+        qb
+        .coreSegments().withID(snapshotID)
+        .providerSegments().withID(snapshotID)
+        .entities().withID(snapshotID)
+        .snapshots().withID(snapshotID);
 
-        ARMARX_IMPORTANT << "Getting entity from snapshot ID";
-        const armem::Entity& e = result->getEntity(snapshotID);
+        armem::data::QueryResult qResult = reader.query(qb.buildQueryInput());
         ARMARX_INFO << "Result: "
-                    << "\n- entity:       \t" << e.name()
-                    << "\n- snapshot:     \t" << e.getLatestSnapshot().time()
-                    << "\n- #instances:   \t" << e.getLatestSnapshot().instances.size()
+                    << "\n- success:       \t" << qResult.success
+                    << "\n- error message: \t" << qResult.errorMessage
                     ;
 
+        if (qResult.success)
+        {
+            armem::MemoryPtr memory;
+            fromIce(qResult.memory, memory);
+            armem::EntitySnapshot& entitySnapshot = memory->getEntity(snapshotID).getLatestSnapshot();
 
-        tab.queryResult = std::move(result);
-        tab.rebuild = true;
+            ARMARX_INFO << "Result snapshot: "
+                        << "\n- time:        \t" << entitySnapshot.time()
+                        << "\n- # instances: \t" << entitySnapshot.instances.size()
+                        ;
+        }
+        else
+        {
+            ARMARX_ERROR << qResult.errorMessage;
+        }
 
-        return true;
+        return qResult.success;
     }
 
     bool ArMemExampleClient::primitives(armem::MemoryWriter& writer)
@@ -347,21 +340,16 @@ namespace armarx
             return false;
         }
 
-        // Query.
-
-        armem::data::query::EntityQueryPtr entityQuery = new armem::data::query::entity::All();
-        armem::data::query::ProviderSegmentQueryPtr providerQuery =
-            new armem::data::query::provider::All({entityQuery});
-        armem::data::query::CoreSegmentQueryPtr coreQuery =
-            new armem::data::query::core::Single({providerQuery}, providerID.providerSegmentName);
-        armem::data::query::MemoryQueryPtr memoryQuery =
-            new armem::data::query::memory::Single({coreQuery}, providerID.coreSegmentName);
-
-
-        armem::data::QueryInput input;
-        input.memoryQueries = {memoryQuery};
+        // Query all entities from provider.
+        armem::client::QueryBuilder qb;
+        qb
+        .coreSegments().withID(providerID)
+        .providerSegments().withID(providerID)
+        .entities().all()
+        .snapshots().all();
 
-        armem::data::QueryResult result = memory->query(input);
+        armem::MemoryReader reader(memory);
+        armem::data::QueryResult result = reader.query(qb.buildQueryInput());
         if (result.success)
         {
             armem::MemoryPtr resultMemory = armem::fromIce<armem::MemoryPtr>(result.memory);
diff --git a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h
index bbf97094fd93c248deacbb907d515e5ea8d6eda8..00f0fc269a20bd4eedb927abe6d864872217e01c 100644
--- a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h
+++ b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h
@@ -102,7 +102,9 @@ namespace armarx
     private:
         // Examples
 
-        bool rawIceQuery(const armem::MemoryID& snapshotID);
+        bool queryLatestRawIce(const armem::MemoryID& entityID);
+        bool querySnapshot(const armem::MemoryID& snapshotID);
+
         bool primitives(armem::MemoryWriter& writer);