add cache feature