refactoring moving implementations