add Observer pattern.