made a rudimentary caching system, because Nick is too busy to do it =(