diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
index 03a578fab3b9250f724efcd646c24400d8a898d2..30f3a489cc9b7b2e8bc8f6e80c76d7bbccf15142 100644
--- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
@@ -2,15 +2,15 @@
 
 #include <string>
 
-#include <IceUtil/Time.h>
-
 #include <ArmarXCore/core/logging/Logging.h>
+
 #include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/types.h>
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 
+
 namespace armarx::armem
 {
 
@@ -38,7 +38,7 @@ namespace armarx::armem
         aron::toAron(dto.parentFrame, bo.parentFrame);
         aron::toAron(dto.frame, bo.frame);
         aron::toAron(dto.agent, bo.agent);
-        dto.timestamp = bo.timestamp;
+        toAron(dto.timestamp, bo.timestamp);
     }
 
     void
@@ -47,7 +47,7 @@ namespace armarx::armem
         aron::fromAron(dto.parentFrame, bo.parentFrame);
         aron::fromAron(dto.frame, bo.frame);
         aron::fromAron(dto.agent, bo.agent);
-        bo.timestamp = dto.timestamp;
+        fromAron(dto.timestamp, bo.timestamp);
     }
 
     /* JointState */
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
index b3dee3440967cf79ae9feee73403116345a23cbf..3c59b2980191bdf4d560b5e0f303207d2f13e48e 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
@@ -9,6 +9,7 @@
 #include <ArmarXCore/core/exceptions/LocalException.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
+#include <ArmarXCore/core/time/Clock.h>
 
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
@@ -94,13 +95,13 @@ namespace armarx::armem::robot_state
     }
 
     void
-    RobotReader::setSyncTimeout(const armem::Time& duration)
+    RobotReader::setSyncTimeout(const armem::Duration& duration)
     {
         syncTimeout = duration;
     }
 
     void
-    RobotReader::setSleepAfterSyncFailure(const armem::Time& duration)
+    RobotReader::setSleepAfterSyncFailure(const armem::Duration& duration)
     {
         ARMARX_CHECK_NONNEGATIVE(duration.toMicroSeconds());
         sleepAfterFailure = duration;
@@ -109,8 +110,9 @@ namespace armarx::armem::robot_state
     bool
     RobotReader::synchronize(robot::Robot& obj, const armem::Time& timestamp)
     {
-        const auto tsStartFunctionInvokation = armem::Time::now();
+        const auto tsStartFunctionInvokation = armem::Time::Now();
 
+        Clock clock;
         while (true)
         {
             auto state = queryState(obj.description, timestamp);
@@ -120,7 +122,7 @@ namespace armarx::armem::robot_state
                 ARMARX_VERBOSE << "Could not synchronize object " << obj.description.name;
 
                 // if the syncTime is non-positive there will be no retry
-                const auto elapsedTime = armem::Time::now() - tsStartFunctionInvokation;
+                const auto elapsedTime = armem::Time::Now() - tsStartFunctionInvokation;
                 if (elapsedTime > syncTimeout)
                 {
                     ARMARX_WARNING << "Could not synchronize object " << obj.description.name;
@@ -128,8 +130,7 @@ namespace armarx::armem::robot_state
                 }
 
                 ARMARX_INFO << "Retrying to query robot state after failure";
-                std::this_thread::sleep_for(
-                    std::chrono::microseconds(sleepAfterFailure.toMicroSeconds()));
+                clock.waitFor(sleepAfterFailure);
             }
 
             obj.config = std::move(*state);
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
index 46b0924fc2cb06ebee34ff8b61174746939dd7dc..6682fcd79130501530d54f770d342d02676fd069 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
@@ -24,7 +24,7 @@
 #include <mutex>
 #include <optional>
 
-#include "RobotAPI/libraries/armem/core/Time.h"
+#include <RobotAPI/libraries/armem/core/Time.h>
 #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem/client/Reader.h>
 #include <RobotAPI/libraries/armem_robot/client/interfaces.h>
@@ -81,8 +81,8 @@ namespace armarx::armem::robot_state
         queryPlatformState(const robot::RobotDescription& description,
                            const armem::Time& timestamp) const;
 
-        void setSyncTimeout(const armem::Time& duration);
-        void setSleepAfterSyncFailure(const armem::Time& duration);
+        void setSyncTimeout(const armem::Duration& duration);
+        void setSleepAfterSyncFailure(const armem::Duration& duration);
 
         enum class Hand
         {
@@ -101,8 +101,8 @@ namespace armarx::armem::robot_state
 
     protected:
         // by default, no timeout mechanism
-        armem::Time syncTimeout = armem::Time::microSeconds(0);
-        armem::Time sleepAfterFailure = armem::Time::microSeconds(0);
+        armem::Duration syncTimeout  = armem::Duration::MicroSeconds(0);
+        armem::Duration sleepAfterFailure = armem::Duration::MicroSeconds(0);
 
     private:
         std::optional<robot::RobotState> getRobotState(const armarx::armem::wm::Memory& memory,
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
index 5ef7564f8a0e374060114d0391bfaeebf1df6198..b59eaad146c043c1b943a5589caa84c768549303 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
@@ -11,6 +11,7 @@
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
+#include <ArmarXCore/core/time/Clock.h>
 
 
 namespace armarx::armem::robot_state
@@ -91,6 +92,8 @@ namespace armarx::armem::robot_state
         const VirtualRobot::RobotIO::RobotDescription& loadMode,
         const bool blocking)
     {
+        Clock clock;
+
         while (blocking)
         {
             VirtualRobot::RobotPtr robot = getRobot(name, timestamp, loadMode);
@@ -100,8 +103,7 @@ namespace armarx::armem::robot_state
             }
 
             ARMARX_INFO << "Retrying to query robot after failure";
-            std::this_thread::sleep_for(
-                std::chrono::microseconds(sleepAfterFailure.toMicroSeconds()));
+            clock.waitFor(sleepAfterFailure);
         }
 
         ARMARX_WARNING << "Failed to get synchronized robot `" << name << "`";
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
index ba34586a1e77390efbecd18abba1e726db6f7467..932f55b0a6ea2ff74762a62ffa74f88d0ff18422 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
@@ -94,7 +94,7 @@ namespace armarx::armem::client::robot_state::localization
         // const auto& timestamp = transform.header.timestamp;
         const MemoryID entityID = providerId.withEntityName(
                                       transform.header.parentFrame + "," + transform.header.frame);
-        const Time timestamp = Time::now(); // FIXME remove
+        const Time timestamp = Time::Now();  // FIXME remove
 
         armem::EntityUpdate update;
         update.entityID = entityID;
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
index 67d537d19cf74af3da62dc72ae217f996977433f..e68119affae5664f232dba25c679a8cce9fbdd10 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
@@ -123,7 +123,7 @@ namespace armarx::armem::server::robot_state
         {
             if (p.enabled)
             {
-                const Time timestamp = Time::now();
+                const Time timestamp = Time::Now();
                 ARMARX_DEBUG << "Visu task at " << armem::toStringMilliSeconds(timestamp);
 
                 try
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
index 185356425ca3d657014f2b0e0b2e56631e443f4f..f6cba1d8c22086497f7eb537c6a3e16fa2e2faf4 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
@@ -44,7 +44,7 @@ namespace armarx::armem::server::robot_state::description
 
     void Segment::commitRobotDescription(const robot::RobotDescription& robotDescription)
     {
-        const Time now = TimeUtil::GetTime();
+        const Time now = Time::Now();
 
         const MemoryID providerID = segmentPtr->id().withProviderSegmentName(robotDescription.name);
         segmentPtr->addProviderSegment(providerID.providerSegmentName, arondto::RobotDescription::ToAronType());
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitReader.cpp b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitReader.cpp
index 12638d84e18a8a3439b560fb9e2287c3fe233c79..f50c4e5619d70b7910d6d3ef544c2ca4f9d7fdc9 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitReader.cpp
@@ -89,7 +89,7 @@ namespace armarx::armem::server::robot_state::proprioception
 
         RobotUnitData result;
         result.proprioception = converter->convert(data.value(), description);
-        result.timestamp = Time::microSeconds(data->timestampUSec);
+        result.timestamp = Time(Duration::MicroSeconds(data->timestampUSec));
 
         auto stop = std::chrono::high_resolution_clock::now();
         auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
index 9bf3f1e8129fe0d2f2194d1f9e223077678e93f0..ca9e43ed9d4a7022dd4c6a4eecba530e81bf7b21 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
@@ -78,7 +78,7 @@ namespace armarx::armem::server::robot_state::proprioception
         RobotJointPositionMap jointMap;
         int i = 0;
 
-        Duration tFindData = Duration::milliSeconds(0), tReadJointPositions = Duration::milliSeconds(0);
+        Duration tFindData = Duration::MilliSeconds(0), tReadJointPositions = Duration::MilliSeconds(0);
         TIMING_START(tProcessEntities)
         segmentPtr->forEachEntity([&](const wm::Entity & entity)
         {
@@ -97,8 +97,8 @@ namespace armarx::armem::server::robot_state::proprioception
                     data = snapshot->findInstanceData();
                 }
 
-                TIMING_END_COMMENT_STREAM(_tFindData, "tFindData " + std::to_string(i), ARMARX_DEBUG)
-                tFindData += _tFindData;
+                TIMING_END_COMMENT_STREAM(_tFindData, "tFindData " + std::to_string(i), ARMARX_DEBUG);
+                tFindData += Duration::MicroSeconds(_tFindData.toMicroSeconds());
             }
             if (data)
             {
@@ -107,7 +107,7 @@ namespace armarx::armem::server::robot_state::proprioception
                 jointMap.emplace(entity.id().providerSegmentName, readJointPositions(*data));
 
                 TIMING_END_COMMENT_STREAM(_tReadJointPositions, "tReadJointPositions " + std::to_string(i), ARMARX_DEBUG)
-                tReadJointPositions += _tReadJointPositions;
+                tReadJointPositions += Duration::MicroSeconds(_tReadJointPositions.toMicroSeconds());
             }
             ++i;
         });