caching and gc are almost there, but gc is more aggressive than caching and is causing some minor quirks