experimental: add cache code