reduced Observer code; possible because of level 1 caching