modify Observer pattern