diff --git a/source/RobotAPI/libraries/armem/client/Writer.cpp b/source/RobotAPI/libraries/armem/client/Writer.cpp
index 9b841c6d12f5caa2349f5a7bac763ac2315ecc80..2021f3a189367dc9134d60ce1dd597cb8513dfaf 100644
--- a/source/RobotAPI/libraries/armem/client/Writer.cpp
+++ b/source/RobotAPI/libraries/armem/client/Writer.cpp
@@ -48,7 +48,7 @@ namespace armarx::armem::client
         data::Commit commitIce;
         toIce(commitIce, commit);
 
-        data::CommitResult resultIce = this->commit(commitIce);
+        data::CommitResult resultIce = this->_commit(commitIce);
 
         armem::CommitResult result;
         fromIce(resultIce, result);
@@ -58,15 +58,57 @@ namespace armarx::armem::client
 
 
     data::CommitResult Writer::commit(const data::Commit& _commit)
+    {
+        data::Commit commit = _commit;
+        return this->_commit(commit);
+    }
+
+
+    EntityUpdateResult Writer::commit(const EntityUpdate& update)
+    {
+        armem::Commit commit;
+        commit.updates.push_back(update);
+
+        armem::CommitResult result = this->commit(commit);
+        ARMARX_CHECK_EQUAL(result.results.size(), 1);
+        return result.results.at(0);
+    }
+
+    EntityUpdateResult Writer::commit(
+        const MemoryID& entityID,
+        const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData,
+        Time timeCreated)
+    {
+        EntityUpdate update;
+        update.entityID = entityID;
+        update.instancesData = instancesData;
+        update.timeCreated = timeCreated;
+        return commit(update);
+    }
+
+    void
+    Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory)
+    {
+        this->memory = memory;
+    }
+
+    data::CommitResult Writer::_commit(data::Commit& commit)
     {
         ARMARX_CHECK_NOT_NULL(memory);
 
-        data::Commit commit = _commit;
+        /*
+         * This function sets the `timeSent` of each `EntityUpdate` before
+         * sending the data. To allow that, `commit` needs to bo non-const.
+         * Otherwise, the function would need to make a copy of `commit`,
+         * which is not necessary in all cases; e.g. when called by
+         * `commit(Const Commit&)`, which converts the commit to ice types
+         * anyway.
+         */
 
-        Time timeSent = armem::Time::now();
+        const Time timeSent = armem::Time::now();
         for (data::EntityUpdate& update : commit.updates)
         {
-            update.timeCreatedMicroSeconds = timeSent.toMicroSeconds();
+            update.timeSentMicroSeconds = timeSent.toMicroSeconds();
         }
 
         data::CommitResult result;
@@ -100,35 +142,6 @@ namespace armarx::armem::client
 
         return result;
     }
-
-
-    EntityUpdateResult Writer::commit(const EntityUpdate& update)
-    {
-        armem::Commit commit;
-        commit.updates.push_back(update);
-
-        armem::CommitResult result = this->commit(commit);
-        ARMARX_CHECK_EQUAL(result.results.size(), 1);
-        return result.results.at(0);
-    }
-
-    EntityUpdateResult Writer::commit(
-        const MemoryID& entityID,
-        const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData,
-        Time timeCreated)
-    {
-        EntityUpdate update;
-        update.entityID = entityID;
-        update.instancesData = instancesData;
-        update.timeCreated = timeCreated;
-        return commit(update);
-    }
-
-    void
-    Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory)
-    {
-        this->memory = memory;
-    }
 }
 
 
diff --git a/source/RobotAPI/libraries/armem/client/Writer.h b/source/RobotAPI/libraries/armem/client/Writer.h
index 9c6e8851e4fe3792ad728e90eaa9319a88568e0c..dd953fa368d9a46363677d3bc39bc71f8da2a9ce 100644
--- a/source/RobotAPI/libraries/armem/client/Writer.h
+++ b/source/RobotAPI/libraries/armem/client/Writer.h
@@ -50,6 +50,10 @@ namespace armarx::armem::client
             const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData,
             Time timeCreated);
 
+        // with bare-ice types
+        data::CommitResult commit(const data::Commit& commit);
+
+
         void setWritingMemory(server::WritingMemoryInterfacePrx memory);
 
         operator bool() const
@@ -59,7 +63,9 @@ namespace armarx::armem::client
 
     private:
 
-        data::CommitResult commit(const data::Commit& commit);
+        /// Sets `timeSent` on all entity updates and performs the commit,
+        data::CommitResult _commit(data::Commit& commit);
+
 
     public: