use a cache decorator