no anonymous closures anywhere in this function, so we don't need to alias `this` to `self`