play with the observer pattern