continued on observer pattern