VP: reworked the global Program cache to use observers