use link instead of addObserver