new design, major refactoring