use @SamSaffron's LRU cache, much performant