architecture refactoring again