refactor & redesign