Refactoring to move some responsibility out of the observer