This allocation is going to happen every frame, right?  Not good.  In general, I think we've add a bit more infrastructure than we need here.  I don't have any suggestions yet...give me a minute.