Refactoring design: part 2