refactoring & redesign