redesign + refactoring