wrap UI into the run() func to fix some scope ish