re-implement image provider