Add Cache, Refactor