 					dir: @savePath
 					base: projInfo.title
 
-				@saveImage x.image_url, savePath
+				@saveImage x.image_url, savePath, callback
 
-		downloadAllUserLikes: () ->
+		downloadAllUserLikes: (callback) =>
 			for user in @usernames
 				@getUserLikes user, (likes) =>
-					like = likes[0]
-					@downloadProjectImage like.hash_id
+					i = 0
+					likes = (like.hash_id for like in likes)
+					if @limit > 0 and likes.length > @limit
+						likes = likes.slice 0, @limit
+					async.eachLimit likes, 5, @downloadProjectImage, (err) =>
+						if @debug
+							console.log 'Downloading done'
+						if callback?
+							callback err

						console.log 'json resp: ' + resp + ':' + body
					callback body

		getProjectInfo: (projectSlug, callback) ->
			@getJson base + artwork + projectSlug + '.json', callback

		getUserInfo: (user, callback) ->
			@getJson base + users + user + '.json', callback

		getUserLikePage: (user, page, callback) ->
			# Get page #[page] of [user]'s likes
			url = base + users + user + '/' + likes + '?page=' + page

			@getJson url, (resp) =>
				callback resp.data

		getUserLikes: (user, callback) ->
			@getUserInfo user, (resp) =>
				# limit the number of projects we consider
				count = resp.liked_projects_count

						result = result.concat x
					callback result

		saveImage: (url, savePath, callback) =>
			if @debug
				console.log 'saving image: ' + savePath
			req = request url
			req.pipe fs.createWriteStream savePath
			if callback?
				callback()

		downloadProjectImage: (projectHash, callback) =>
			@getProjectInfo projectHash, (projInfo) =>
				asset = null
				for x in projInfo.assets when x.has_image
