main thread!  updates from callback must be on the main thread