Apply observer pattern