         if @_options.safeCreate
           productIdMapping = mappings.productImport.mapping.ProductId.to
           Q.all _.map productCreates, (p) =>
-            @_findAttributeAndFetch(p, productIdMapping)
+            @_fetchProductByAttribute(@_findAttributeByName(p, productIdMapping, true))
             .then (fetchedProductResult) =>
               oldProduct = fetchedProductResult?.body?.results[0]
               if not oldProduct

      processingTimeInSec: (endTime - @startTime) / 1000
    @logger.info summary, "[Products]"

  _findAttributeAndFetch: (product, attributeName) ->
    attr = _.find product.masterVariant.attributes, (a) -> a.name is attributeName
    if not attr
      throw new Error "Attribute '#{attributeName}' not defined for Brickfox product: \n#{_u.prettify p}"
    @client.productProjections.where("masterVariant(attributes(name=\"#{attributeName}\" and value=\"#{attr.value}\"))").staged().fetch()

  ###
  # Processes product XML data and builds a list of Sphere product representations.

        @logger.info "[Products] Update count: '#{_.size productUpdates}'"
        productIdMapping = mappings.productImport.mapping.ProductId.to
        Q.all _.map productUpdates, (p) =>
          attr = @_findAttributeByName(p, productIdMapping, true)
          @_fetchProductByAttribute(attr)
          .then (fetchedProductResult) =>
            oldProduct = fetchedProductResult?.body?.results?[0]
            if not oldProduct
              throw new Error "Could not find product to update by attribute name: '#{productIdMapping}' and value: '#{attr.value}' in SPHERE.IO"
            update = @productSync.buildActions(p, oldProduct).get()
            # TODO: activate once SPHERE fixes delete and add variant with unique constraint attribute in one update action
            # TODO: make sure variants are not dropped and created from scratch but updated only.
