         _start += partSize
         slice data, currStart, currEnd
 
-      _(_.range(1, parts.length + 1)).zip(parts)
+      _.zip _.range(1, parts.length + 1), parts
 
     signRequest = ({data, onSuccess, onError}) ->
       $.ajax

        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


    upload = (file) ->
      partSize = computePartSize file.size
      parts = _.map splitIntoParts(file, partSize), (part) -> key: part[0], data: part[1]

      sanitizedFileName = file.name.replace(/[^0-9a-z.]/gi, "_").toLowerCase()

