Smarter updateProgress function