just keep a copy of the ui. doesn't need to be a thread local