   processProducts: (products) ->
     console.warn "Mapping done. About to process existing product(s) ..."
     filterInput = QueryUtils.mapMatchFunction(@matchBy)(products)
-    @client.productProjections.staged().filter(filterInput).fetch()
+    @client.productProjections.staged().where(filterInput).fetch()
     .then (payload) =>
       existingProducts = payload.body.results
-      console.warn "Comparing against #{payload.body.total} existing product(s) ..."
-      @initMatcher existingProducts
+      console.warn "Comparing against #{payload.body.count} existing product(s) ..."
+      matchFn = @initMatcher @matchBy, existingProducts
       productsToUpdate =
       if @validator.updateVariantsOnly
         @mapVariantsBasedOnSKUs existingProducts, products
       else
         products
       console.warn "Processing #{_.size productsToUpdate} product(s) ..."
-      @createOrUpdate(productsToUpdate, @validator.types)
+      @createOrUpdate(productsToUpdate, @validator.types, matchFn)
     .then (result) ->
       # TODO: resolve with a summary of the import
       console.warn "Finished processing #{_.size result} product(s)"

          Promise.resolve() # will retry in case of Gateway Timeout
        else
          Promise.reject e


  _isBlackListedForUpdate: (attributeName) ->
    if _.isEmpty @blackListedCustomAttributesForUpdate

      else
        Promise.resolve filteredResult

  initMatcher: (matchBy, existingProducts) ->
    temp = existingProducts
    match = (matchBy, entry) ->
      map = {}
      _.each temp, (p, index) ->
        switch matchBy
          when 'id' then map[p.id] = p
          when 'slug' then map[p.slug[GLOBALS.DEFAULT_LANGUAGE]] = p
          when 'sku'
            p.variants or= []
            variants = [p.masterVariant].concat(p.variants)
            _.each variants, (v) ->
              map[v.sku] = p

      identifier = switch matchBy
        when 'id' then entry.product.id
        when 'slug' then entry.product.slug[GLOBALS.DEFAULT_LANGUAGE]
        when 'sku' then entry.product.masterVariant.sku

      map[identifier]

  createOrUpdate: (products, types, matchFn) ->
    Promise.all _.map products, (entry) =>
      @repeater.execute =>
        existingProduct = matchFn(@matchBy, entry)
        if existingProduct?
          @update(entry.product, existingProduct, types, entry.header, entry.rowIndex)
        else
