Create full-functionality download() method