refactor fetchImpl