+ added observer mechanism