Make defer logic overrideable
Split Callback and Progress out into separate files
Adjust thresholds