diff --git a/ebpfcat/ethercat.py b/ebpfcat/ethercat.py
index 8e1c838ad5260b6cc34f379069b16b61031677f7..3e22b01f94db83acb716464c710941dce50f6892 100644
--- a/ebpfcat/ethercat.py
+++ b/ebpfcat/ethercat.py
@@ -684,11 +684,12 @@ class Terminal:
                 elif isinstance(v, StructDesc):
                     struct = getattr(self, k)
                     offset = struct.position_offset[None]
-                    for kk, vv in struct.__class__.__dict__.items():
-                        if isinstance(vv, ServiceDesc):
-                            setattr(struct, kk,
-                                    await self.read_object_entry(
-                                        vv.index + offset, vv.subidx))
+                    for ccls in struct.__class__.__mro__:
+                        for kk, vv in ccls.__dict__.items():
+                            if isinstance(vv, ServiceDesc):
+                                setattr(struct, kk,
+                                        await self.read_object_entry(
+                                            vv.index + offset, vv.subidx))
 
     async def set_state(self, state):
         """try to set the state, and return the new state"""