refactored to subscribe_observer