adding observer implementation