refactor: push responsibility to superclass