diff --git a/armarx_core/time/__init__.py b/armarx_core/time/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/armarx_core/time/date_time.py b/armarx_core/time/date_time.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3f633ed68ce78e0b28a515fd364f2e818357085
--- /dev/null
+++ b/armarx_core/time/date_time.py
@@ -0,0 +1,42 @@
+import socket
+import time
+
+import armarx
+from armarx.ice_conv.ice_converter import IceConverter
+from armarx_core import slice_loader
+
+slice_loader.load_armarx_slice("ArmarXCore", "core/time.ice")
+from armarx.core.time.dto import DateTime
+from armarx.core.time.dto.ClockType import ClockTypeEnum
+
+
+MIN_LONG_CPP = -9223372036854775808
+INVALID_TIME_USEC = MIN_LONG_CPP
+
+# TODO: Add DateTime type corresponding to C++ type.
+
+def time_usec() -> int:
+    return int(time.time() * 1e6)
+
+
+class DateTimeIceConverter(IceConverter):
+    @classmethod
+    def _import_dto(cls):
+        return DateTime
+
+    def _from_ice(self, dto: DateTime) -> int:
+        return dto.timeSinceEpoch.microSeconds
+
+    def _to_ice(self, bo: int) -> DateTime:
+        dto = DateTime()
+        dto.timeSinceEpoch.microSeconds = bo
+        dto.clockType = ClockTypeEnum.Monotonic
+        dto.hostname = socket.gethostname()
+        return dto
+
+
+if __name__ == "__main__":
+    c = DateTimeIceConverter()
+    bo = time_usec()
+    dto = c.to_ice(bo)
+    bo2 = c.from_ice(dto)
diff --git a/armarx_memory/aron/aron_dataclass.py b/armarx_memory/aron/aron_dataclass.py
index ee0ac5127edb3e2e7ea303e91f9eb1a86e409009..c370c2abfeb6ab2581eb9313517d56f058028076 100644
--- a/armarx_memory/aron/aron_dataclass.py
+++ b/armarx_memory/aron/aron_dataclass.py
@@ -1,9 +1,14 @@
 import dataclasses as dc
 import typing as ty
 
+from armarx_memory.aron.conversion.options import ConversionOptions
+
 
 @dc.dataclass
 class AronDataclass:
+    # Make ConversionOptions available to subclasses via cls.ConversionOptions.
+    ConversionOptions = ConversionOptions
+
     def to_dict(self) -> ty.Dict[str, ty.Any]:
         from armarx_memory.aron.conversion.dataclass_from_to_pythonic import (
             dataclass_to_dict,
diff --git a/armarx_memory/client/detail/SpecialClientBase.py b/armarx_memory/client/detail/SpecialClientBase.py
index 3e1c58d531a2aa37abbf809b1d901bd34ca1dd31..68ab5aee90c718878c3007d5fd77f3c433ecd228 100644
--- a/armarx_memory/client/detail/SpecialClientBase.py
+++ b/armarx_memory/client/detail/SpecialClientBase.py
@@ -79,7 +79,7 @@ class SpecialWriterBase(SpecialClientBase):
 
         if data is None:
             aron_class = self._get_aron_class()
-            data = [aron_class(**data_kwargs).to_aron()]
+            data = [aron_class(**data_kwargs).to_aron_ice()]
         if not isinstance(data, list):
             data = [data]
         for i in range(len(data)):
diff --git a/armarx_memory/core/MemoryID.py b/armarx_memory/core/MemoryID.py
index c1173ba98b40edf1dea7d91033ae07fe1dd9654c..7414c8a81c3d3bd40c1e21e6ca2f059b0e029aa7 100644
--- a/armarx_memory/core/MemoryID.py
+++ b/armarx_memory/core/MemoryID.py
@@ -7,6 +7,7 @@ from armarx_core import slice_loader
 slice_loader.load_armarx_slice("RobotAPI", "armem/memory.ice")
 from armarx import armem
 
+from armarx_core.time import date_time
 from armarx_memory.ice_conv import ice_twin
 from armarx_memory.core.time import DateTimeIceConverter
 
@@ -20,7 +21,7 @@ class MemoryID(ice_twin.IceTwin):
         core_segment_name: str = "",
         provider_segment_name: str = "",
         entity_name: str = "",
-        timestamp_usec: int = -1,
+        timestamp_usec: int = date_time.INVALID_TIME_USEC,
         instance_index: int = -1,
     ):
         self.memory_name = memory_name
@@ -234,7 +235,7 @@ class MemoryID(ice_twin.IceTwin):
         self.core_segment_name = data["coreSegmentName"]
         self.provider_segment_name = data["providerSegmentName"]
         self.entity_name = data["entityName"]
-        self.timestamp_usec = int(data["timestamp"])
+        self.timestamp_usec = int(data["timestamp"]["timeSinceEpoch"]["microSeconds"])
         self.instance_index = data["instanceIndex"]
         return self
 
diff --git a/armarx_memory/core/time.py b/armarx_memory/core/time.py
index 47ee1cc4dff104015d827e8b7506215f7ff1e711..c162ef851558f5a987ec20a33c62f024f0e6594f 100644
--- a/armarx_memory/core/time.py
+++ b/armarx_memory/core/time.py
@@ -1,37 +1,2 @@
-import socket
-import time
-
-import armarx
-from armarx.ice_conv.ice_converter import IceConverter
-from armarx_core import slice_loader
-
-slice_loader.load_armarx_slice("ArmarXCore", "core/time.ice")
-from armarx.core.time.dto import DateTime
-from armarx.core.time.dto.ClockType import ClockTypeEnum
-
-
-def time_usec() -> int:
-    return int(time.time() * 1e6)
-
-
-class DateTimeIceConverter(IceConverter):
-    @classmethod
-    def _import_dto(cls):
-        return DateTime
-
-    def _from_ice(self, dto: DateTime) -> int:
-        return dto.timeSinceEpoch.microSeconds
-
-    def _to_ice(self, bo: int) -> DateTime:
-        dto = DateTime()
-        dto.timeSinceEpoch.microSeconds = bo
-        dto.clockType = ClockTypeEnum.Monotonic
-        dto.hostname = socket.gethostname()
-        return dto
-
-
-if __name__ == "__main__":
-    c = DateTimeIceConverter()
-    bo = time_usec()
-    dto = c.to_ice(bo)
-    bo2 = c.from_ice(dto)
+# Legacy imports
+from armarx_core.time.date_time import INVALID_TIME_USEC, DateTimeIceConverter, time_usec
diff --git a/armarx_memory/ice_conv/RobotAPI/ObjectPose.py b/armarx_memory/ice_conv/RobotAPI/ObjectPose.py
index cda7cc1653d2676eed3bf61219be66c7490b58e7..2684d02af74be1ab7aee4470243b13906d89c00a 100644
--- a/armarx_memory/ice_conv/RobotAPI/ObjectPose.py
+++ b/armarx_memory/ice_conv/RobotAPI/ObjectPose.py
@@ -4,11 +4,17 @@ from typing import Dict, Optional
 
 from armarx_core import slice_loader
 
+from armarx_core.time import date_time
 from armarx_memory.ice_conv.ice_twin import IceTwin
 from armarx_memory.ice_conv.RobotAPI.Box import Box
 from armarx_memory.ice_conv.RobotAPI.ObjectID import ObjectID
 from armarx_memory.ice_conv.RobotAPI.PoseBase import PoseBaseConv
 
+slice_loader.load_armarx_slice("RobotAPI", "objectpose/object_pose_types.ice")
+
+
+date_time_conv = date_time.DateTimeIceConverter()
+
 
 class ObjectPose(IceTwin):
     """
@@ -28,6 +34,7 @@ class ObjectPose(IceTwin):
         object_pose_original_frame: str = "",
         robot_pose=None,
         local_oobb: Optional[Box] = None,
+        timestamp_usec: Optional[int] = None,
     ):
         self.provider_name = provider_name
         self.object_id = ObjectID() if object_id is None else object_id
@@ -53,7 +60,7 @@ class ObjectPose(IceTwin):
         # attachment
 
         self.confidence: float = 0.0
-        self.timestamp_usec: int = -1
+        self.timestamp_usec: int = timestamp_usec if timestamp_usec is not None else date_time.INVALID_TIME_USEC
 
         self.local_oobb = local_oobb
 
@@ -64,7 +71,6 @@ class ObjectPose(IceTwin):
 
     def viz_oobb_robot(self, id: str, size_factor=1.0, **kwargs) -> "armarx.arviz.Box":
         import armarx.arviz as viz
-
         return viz.Box(
             id,
             pose=self.object_pose_robot @ self.local_oobb.pose,
@@ -74,14 +80,12 @@ class ObjectPose(IceTwin):
 
     @classmethod
     def _get_ice_cls(cls):
-        slice_loader.load_armarx_slice("RobotAPI", "objectpose/object_pose_types.ice")
         from armarx.objpose.data import ObjectPose
-
         return ObjectPose
 
     def _set_from_ice(self, dto: "armarx.objpose.data.ObjectPose"):
         self.provider_name = dto.providerName
-        self.object_id = ObjectID(dto.objectID)
+        self.object_id = self.object_id.from_ice(dto.objectID)
         self.object_pose_robot = self._pose_conv.from_ice(dto.objectPoseRobot)
         self.object_pose_global = self._pose_conv.from_ice(dto.objectPoseGlobal)
         self.object_pose_original = self._pose_conv.from_ice(dto.objectPoseOriginal)
@@ -93,7 +97,8 @@ class ObjectPose(IceTwin):
         self.robot_pose = self._pose_conv.from_ice(dto.robotPose)
 
         self.confidence = dto.confidence
-        self.timestamp_usec = dto.timestamp.timeSinceEpoch.microSeconds
+
+        self.timestamp_usec = date_time_conv.from_ice(dto.timestamp)
 
         if all(
             [dto.localOOBB.position, dto.localOOBB.orientation, dto.localOOBB.extents]
@@ -116,7 +121,7 @@ class ObjectPose(IceTwin):
         dto.robotPose = self._pose_conv.to_ice(self.robot_pose)
 
         dto.confidence = self.confidence
-        dto.timestamp.timeSinceEpoch.microSeconds = self.timestamp_usec
+        dto.timestamp = date_time_conv.to_ice(self.timestamp_usec)
 
         if dto.localOOBB is not None and all(
             [dto.localOOBB.position, dto.localOOBB.orientation, dto.localOOBB.extents]