observer rewrite