added Observer pattern