doesn't break when returning cached result