move progress tracking to main thread