Improve progress reporting, add a final callback