implement the observer mode