added cache feature