refactor, redesign part 2