changed reads to only happen in the beginning and then cache.