revert to use observers