Implement enhancement #14, adding cache.