         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

          .fail (msg) ->
            deferred.reject msg
        else if response.statusCode is 400
          humanReadable = JSON.stringify body, null, '  '
          deferred.reject "[row #{rowIndex}] Problem on creating new product:\n" + humanReadable
        else
          humanReadable = JSON.stringify body, null, '  '
          deferred.reject "[row #{rowIndex}] Error on creating new product: " + 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
