use addObserver