the backingCache is mutable, so I am worried about the correctness here. I think you get a concurrent modification exception if someone messes with that.

Is it worth calling: .toList.iterator at the end to force the materialization before the method returns?