diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
index 493230e498b61323ca0f228d62a58396057b75a3..6ba35fd2042b04540721c95c1b48d566ad9d3d5a 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
@@ -151,6 +151,10 @@ namespace armarx::armem::server::obj::instance
         // Build new poses.
         objpose::ObjectPoseSeq newObjectPoses;
         stats.numUpdated = 0;
+
+        // timestamp used to reduce the rpc calls for robot sync 
+        Time robotSyncTimestamp = -1;
+
         for (const objpose::data::ProvidedObjectPose& provided : providedPoses)
         {
             const Time timestamp = armarx::fromIce<Time>(provided.timestamp);
@@ -191,7 +195,12 @@ namespace armarx::armem::server::obj::instance
                 // Update the entity.
                 stats.numUpdated++;
 
-                ARMARX_CHECK(virtualRobotReader->synchronizeRobot(*robot, timestamp));
+                // update the robot to obtain correct local -> global transformation
+                if(robotSyncTimestamp != timestamp)
+                {
+                    ARMARX_CHECK(virtualRobotReader->synchronizeRobot(*robot, timestamp));
+                    robotSyncTimestamp = timestamp;
+                }
 
                 objpose::ObjectPose& newPose = newObjectPoses.emplace_back();
                 if (provided.objectPoseFrame.empty())