Whoops (not sharing cache across 'Iterator's)
'Option.getOrElse' needs to evaluate its arg lazily (d'oh!)