refactoring: extract user actions into re-usable classes