add new feature: disk cache