rework fetching operations and the entire API to be non-mutating
rework tests