rework dataset struct