only calling observe once per model