initial observer implementation