This seems to be a pattern potentially worth extracting?

Should avoid self where its not required.