Move download to background thread
Implement Cancel  button
Refactor