since you traverse for removal I think using an `immutable.Vector` would be preferable: storing the reference in a `var` solves the “concurrent” updates as well, I think it is cleaner that way because the processing is done on an immutable snapshot (to avoid endless loops)