redesign struct