added cache layer