Rationalised refresh_or_fetch across sources