added observer interface