Refactoring to support mutual observer