Download with callback