Very clean!
I hope you will forgive me, my original code worked similar but I kept being puzzled by nuances of the implementation, I was never quite certain if the code was doing what I thought it was doing.
Going to try to drop this in to see if it works, thanks again.