     @productExternalIdMapping = mappings.productImport.mapping.ProductId.to
     productIds = @_getProductExternalIDs(newProducts, @productExternalIdMapping) if newProducts
     @newVariants = @_transformToVariantsBySku(newProducts)
-    @logger.info "[ProductsUpdate] Product updates count: #{_.size productIds}"
+    @logger.info "[ProductsUpdate] Product updates: #{_.size productIds}"
     utils.batch(_.map(productIds, (id) => api.queryProductsByExternProductId(@rest, id, @productExternalIdMapping)))
     .then (fetchedProducts) =>
       priceUpdates = @_buildPriceUpdates(fetchedProducts, @newVariants, @productExternalIdMapping) if fetchedProducts
-      @logger.info "[ProductsUpdate] Product price updates count: #{_.size priceUpdates}"
-      utils.batch(_.map(priceUpdates, (p) => api.updateProduct(@rest, p))) if priceUpdates
+      @logger.info "[ProductsUpdate] Product price updates: #{_.size priceUpdates}"
+      Q.all(_.map(priceUpdates, (p) => @client.products.byId(p.id).update(p.payload))) if priceUpdates
     .then (priceUpdatesResult) =>
       @priceUpdatedCount = _.size(priceUpdatesResult)
       skus = _.keys(@newVariants)
       @logger.info "[ProductsUpdate] Inventories to fetch: #{_.size skus}"
-      utils.batch(_.map(skus, (sku) => api.queryInventoriesBySku(@rest, sku))) if skus
+      @createInventoryForSkus = []
+      @updateInventoryItems = []
+      if _.size(skus) > 0
+        Q.all _.map skus, (sku) =>
+          @client.inventoryEntries.where("sku=#{sku}").all().fetch()
+          .then (fetchedInventoryResult) =>
+            inventory = fetchedInventoryResult.body.results[0]
+            if inventory
+              @updateInventoryItems.push(inventory)
+            else
+              @createInventoryForSkus.push(sku)
     .then (fetchedInventories) =>
-      @logger.info "[ProductsUpdate] Fetched inventories count: #{_.size fetchedInventories}"
-      createInventoryForSkus = []
-      updateInventoryItems = []
-      _.each fetchedInventories, (i) -> if _.isObject(i) then updateInventoryItems.push(i) else createInventoryForSkus.push(i)
-      inventoryCreates = @_buildInventoryCreates(createInventoryForSkus, @newVariants) if _.size(createInventoryForSkus) > 0
-      inventoryUpdates = @_buildInventoryUpdates(updateInventoryItems, @newVariants) if _.size(updateInventoryItems) > 0
-      promises = []
-      promises.push utils.batch(_.map(inventoryUpdates, (inventory) => api.updateInventory(@inventorySync, inventory.newObj, inventory.oldObj))) if inventoryUpdates
-      promises.push utils.batch(_.map(inventoryCreates, (inventory) => api.createInventory(@rest, inventory))) if inventoryCreates
-      promises
-    .spread (updateInventoryResult, createInventoryResult) =>
+      inventoryUpdates = @_buildInventoryUpdates(@updateInventoryItems, @newVariants) if _.size(@updateInventoryItems) > 0
+      if inventoryUpdates
+        @logger.info "[ProductsUpdate] Inventories to update: #{_.size inventoryUpdates}"
+        Q.all(_.map(inventoryUpdates, (i) => @inventorySync.buildActions(i.newObj, i.oldObj).update()))
+    .then (updateInventoryResult) =>
+      @inventoriesUpdated = _.size(_.filter updateInventoryResult, (r) -> r.statusCode is 200)
+      @inventoriesUpdateSkipped = _.size(updateInventoryResult) - @inventoriesUpdated
+      inventoryCreates = @_buildInventoryCreates(@createInventoryForSkus, @newVariants) if _.size(@createInventoryForSkus) > 0
+      if inventoryCreates
+        @logger.info "[ProductsUpdate] Inventories to create: #{_.size inventoryCreates}"
+        Q.all(_.map(inventoryCreates, (i) => @client.inventoryEntries.save(i))) if inventoryCreates
+    .then (createInventoryResult) =>
       @inventoriesCreated = _.size(createInventoryResult)
-      # filter out responses where inventory was not updated (i.e.: value did not change)
-      @inventoriesUpdated = _.size(_.filter updateInventoryResult, (r) -> r is 200)
       @success = true
 
   outputSummary: ->

_ = require 'lodash-node'
_s = require 'underscore.string'
{InventorySync} = require 'sphere-node-sync'
{Rest} = require 'sphere-node-connect'
{_u} = require 'sphere-node-utils'
api = require '../../lib/sphere'

          productIDs.push att.value
    productIDs

  _buildPriceUpdates: (oldProducts, newVariants, productExternalIdMapping) =>
    updates = []
    _.each oldProducts, (p) =>
      actions = []
      results = _.size(p.body.results)
      externId = p[productExternalIdMapping]
