       Bacon.mergeAll(_queued, _progress, _success, _error, _signError).toProperty(waiting: true, start: _start)
 
     uploadParts = (parts, objectPath, uploadId) ->
-      uploads = _(parts).map (part) -> prepareForUpload(part, objectPath, uploadId)
+      uploads = _.map parts, (part) -> prepareForUpload(part, objectPath, uploadId)
 
       bitrateEstimator.init()
 

        concurrencyLevel = if concurrent then MAX_CONCURRENT_PARTS_UPLOAD else 1

        if failed.length
          _.delay _(failed).first().retry, 1000
        else if waiting.length and (queued.length + uploading.length) < concurrencyLevel
          _(waiting).first().start()

        if complete.length is parts.length
          complete: true
          parts: parts
        else if uploading.length
          uploaded = _(uploading).reduce(((s, x) -> s + x.uploaded), 0) + _(complete).reduce(((s,x) -> s + x.part.data.size), 0)
          total = _(parts).reduce(((s,x) -> s + x.data.size), 0)
          uploadSpeed = bitrateEstimator.compute uploaded

          uploading: true

      relativeUrl = "#{objectPath}?uploadId=#{uploadId}"
      absoluteUrl = "#{host}#{relativeUrl}"

      partsXml = _.chain(parts)
        .sortBy (p) ->
          p.key
        .map (p) ->
          "<Part><PartNumber>#{p.key}</PartNumber><ETag>#{p.etag}</ETag></Part>"
        .reduce ((s, xml) -> s + xml), ""
        .value()

      payload = "<CompleteMultipartUpload>#{partsXml}</CompleteMultipartUpload>"

