         if _.size(@validator.map.errors) isnt 0
           @returnResult false, @validator.map.errors, callback
           return
+        console.log "Mapping done. Downloading existing products ..."
         @productService.getAllExistingProducts(@rest).then (existingProducts) =>
           console.log "Comparing against #{_.size existingProducts} existing product(s) ..."
           @initMatcher existingProducts

          if ignore400
            deferred.resolve "[row #{rowIndex}] Product is already #{action}ed."
          else
            humanReadable = JSON.stringify body, null, '  '
            deferred.reject "[row #{rowIndex}] Problem on #{action}ing product:\n" + humanReadable
        else
          humanReadable = JSON.stringify body, null, '  '
          deferred.reject "[row #{rowIndex}] Problem on #{action}ing product (code #{response.statusCode}): " + humanReadable

    deferred.promise


    deferred = Q.defer()
    allSameValueAttributes = types.id2SameForAllAttributes[product.productType.id]
    diff = @sync.buildActions(product, existingProduct, allSameValueAttributes)
    # console.log "ACTIONS %j", diff.get()
    diff.update (error, response, body) =>
      @tickProgress()
      if error
