I've marked this as solved.
Whilst I didn't get a perfect / ideal answer, I Did some good responses and enough information to make a decision for my use case.
In the end I decided that a refactor would be too much work, and while i came up with other more elegant solutions, they really all just boiled down to an extra call to setGeometry, so i ended up going with the existing fix.
Thanks everyone though.