separate downloader from the rest