add cache decorator