adapted to explicity struct member types