new design refactor