refactor observer manager