support progress events closes #2 closes #3 closes #4