diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/ChildrenUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/ChildrenUrlRewriteGenerator.php
index 6080c14ee2469410b7e7d195cd1c55cf8ada738f..59353c595c4ba97c1ce2e616c1a42512dbffe243 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/ChildrenUrlRewriteGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/ChildrenUrlRewriteGenerator.php
@@ -20,7 +20,7 @@ class ChildrenUrlRewriteGenerator
     protected $categoryUrlRewriteGeneratorFactory;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider
@@ -36,7 +36,7 @@ class ChildrenUrlRewriteGenerator
         $this->categoryUrlRewriteGeneratorFactory = $categoryUrlRewriteGeneratorFactory;
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -49,7 +49,7 @@ class ChildrenUrlRewriteGenerator
      */
     public function generate($storeId, Category $category, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         foreach ($this->childrenCategoriesProvider->getChildren($category, true) as $childCategory) {
             $childCategory->setStoreId($storeId);
             $childCategory->setData('save_rewrites_history', $category->getData('save_rewrites_history'));
@@ -60,8 +60,6 @@ class ChildrenUrlRewriteGenerator
             );
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/CurrentUrlRewritesRegenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/CurrentUrlRewritesRegenerator.php
index c2adf7bb7a3ffe658e0c708c2256a06efaab2454..b9936fa73d5ba2e1fb52edf7ed4ef2d01d3b2333 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/CurrentUrlRewritesRegenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/CurrentUrlRewritesRegenerator.php
@@ -17,7 +17,13 @@ class CurrentUrlRewritesRegenerator
     protected $urlRewriteFactory;
 
     /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite */
-    private $urlRewritePlaceholder;
+    private $urlRewritePrototype;
+
+    /**
+     * @var \Magento\Catalog\Model\Category
+     * @deprecated
+     */
+    protected $category;
 
     /**
      * @var \Magento\UrlRewrite\Model\UrlFinderInterface
@@ -29,7 +35,7 @@ class CurrentUrlRewritesRegenerator
     private $urlRewriteMap;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator
@@ -47,13 +53,13 @@ class CurrentUrlRewritesRegenerator
     ) {
         $this->categoryUrlPathGenerator = $categoryUrlPathGenerator;
         $this->urlRewriteFactory = $urlRewriteFactory;
-        $this->urlRewritePlaceholder = $urlRewriteFactory->create();
+        $this->urlRewritePrototype = $urlRewriteFactory->create();
         $this->urlFinder = $urlFinder;
         $this->urlRewriteMap = $urlRewriteMap ?: \Magento\Framework\App\ObjectManager::getInstance()
             ->get(\Magento\CatalogUrlRewrite\Model\Map\UrlRewriteMap::class);
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
             ->get(\Magento\UrlRewrite\Model\UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -66,7 +72,7 @@ class CurrentUrlRewritesRegenerator
      */
     public function generate($storeId, \Magento\Catalog\Model\Category $category, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $currentUrlRewrites = $this->urlRewriteMap->getByIdentifiers(
             $category->getEntityId(),
             $storeId,
@@ -82,9 +88,7 @@ class CurrentUrlRewritesRegenerator
             );
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
@@ -98,7 +102,7 @@ class CurrentUrlRewritesRegenerator
         if ($category->getData('save_rewrites_history')) {
             $targetPath = $this->categoryUrlPathGenerator->getUrlPathWithSuffix($category, $storeId);
             if ($url->getRequestPath() !== $targetPath) {
-                $generatedUrl = clone $this->urlRewritePlaceholder;
+                $generatedUrl = clone $this->urlRewritePrototype;
                 $generatedUrl->setEntityType(CategoryUrlRewriteGenerator::ENTITY_TYPE)
                     ->setEntityId($category->getEntityId())
                     ->setRequestPath($url->getRequestPath())
@@ -124,7 +128,7 @@ class CurrentUrlRewritesRegenerator
             ? $url->getTargetPath()
             : $this->categoryUrlPathGenerator->getUrlPathWithSuffix($category, $storeId);
         if ($url->getRequestPath() !== $targetPath) {
-            $generatedUrl = clone $this->urlRewritePlaceholder;
+            $generatedUrl = clone $this->urlRewritePrototype;
             $generatedUrl->setEntityType(CategoryUrlRewriteGenerator::ENTITY_TYPE)
                 ->setEntityId($category->getEntityId())
                 ->setRequestPath($url->getRequestPath())
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php
index e3916f991d1ba8f1ddbfa147e2bfd4e14bb3617c..be48210298231e759195bd65b1b0e428a1939317 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php
@@ -62,7 +62,7 @@ class Storage
      */
     public function beforeDeleteByData(StorageInterface $object, array $data)
     {
-        $this->productResource->removeMultipleByFilter($data);
+        $this->productResource->removeMultipleByProductCategory($data);
     }
 
     /**
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php
index fcf434fdb53de95cfd37f44a40855784e599e869..ff3e4198332e43e44e94f08d0881342551153e8b 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php
@@ -23,6 +23,12 @@ class CategoryUrlRewriteGenerator
     /** @var StoreViewService */
     protected $storeViewService;
 
+    /**
+     * @var \Magento\Catalog\Model\Category
+     * @deprecated
+     */
+    protected $category;
+
     /** @var \Magento\CatalogUrlRewrite\Model\Category\CanonicalUrlRewriteGenerator */
     protected $canonicalUrlRewriteGenerator;
 
@@ -33,7 +39,7 @@ class CategoryUrlRewriteGenerator
     protected $childrenUrlRewriteGenerator;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @var bool
@@ -63,7 +69,7 @@ class CategoryUrlRewriteGenerator
         $this->categoryRepository = $categoryRepository;
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -96,7 +102,7 @@ class CategoryUrlRewriteGenerator
      */
     protected function generateForGlobalScope(Category $category, $overrideStoreUrls, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $categoryId = $category->getId();
         foreach ($category->getStoreIds() as $storeId) {
             if (!$this->isGlobalScope($storeId)
@@ -107,7 +113,6 @@ class CategoryUrlRewriteGenerator
             }
         }
         $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
         return $result;
     }
 
@@ -165,7 +170,7 @@ class CategoryUrlRewriteGenerator
      */
     protected function generateForSpecificStoreView(Category $category, $storeId, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $urlRewritesSet->merge(
             $this->canonicalUrlRewriteGenerator->generate($storeId, $category)
         );
@@ -175,8 +180,6 @@ class CategoryUrlRewriteGenerator
         $urlRewritesSet->merge(
             $this->currentUrlRewritesRegenerator->generate($storeId, $category, $rootCategoryId)
         );
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Map/UrlRewriteMap.php b/app/code/Magento/CatalogUrlRewrite/Model/Map/UrlRewriteMap.php
index 17ec499f753638122a42221a9841572b401c36f2..70bb44c75b8f4cef9927fdc7216ccfc320140da7 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Map/UrlRewriteMap.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Map/UrlRewriteMap.php
@@ -25,7 +25,7 @@ class UrlRewriteMap
     private $urlFinder;
 
     /** @var UrlRewrite */
-    private $urlRewritePlaceholder;
+    private $urlRewritePrototype;
 
     /**
      * @param DataMapPoolInterface $dataMapPool
@@ -39,7 +39,7 @@ class UrlRewriteMap
     ) {
         $this->dataMapPool = $dataMapPool;
         $this->urlFinder = $urlFinder;
-        $this->urlRewritePlaceholder = $urlRewriteFactory->create();
+        $this->urlRewritePrototype = $urlRewriteFactory->create();
     }
 
     /**
@@ -98,7 +98,7 @@ class UrlRewriteMap
      */
     private function createUrlRewrite($data)
     {
-        $dataObject = clone $this->urlRewritePlaceholder;
+        $dataObject = clone $this->urlRewritePrototype;
         $dataObject->setUrlRewriteId($data['url_rewrite_id']);
         $dataObject->setEntityType($data['entity_type']);
         $dataObject->setEntityId($data['entity_id']);
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Product/CurrentUrlRewritesRegenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/Product/CurrentUrlRewritesRegenerator.php
index 1f85f5a3d2766e130c281b736bc898727c8edf10..ddb91986f249d7edd07576f5a27337172d7967ce 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Product/CurrentUrlRewritesRegenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Product/CurrentUrlRewritesRegenerator.php
@@ -23,6 +23,18 @@ use Magento\UrlRewrite\Model\UrlRewritesSetFactory;
  */
 class CurrentUrlRewritesRegenerator
 {
+    /**
+     * @var Product
+     * @deprecated
+     */
+    protected $product;
+
+    /**
+     * @var ObjectRegistry
+     * @deprecated
+     */
+    protected $productCategories;
+
     /**
      * @var UrlFinderInterface
      * @deprecated
@@ -36,13 +48,13 @@ class CurrentUrlRewritesRegenerator
     protected $urlRewriteFactory;
 
     /** @var UrlRewrite */
-    private $urlRewritePlaceholder;
+    private $urlRewritePrototype;
 
     /** @var UrlRewriteMap */
     private $urlRewriteMap;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param UrlFinderInterface $urlFinder
@@ -61,11 +73,11 @@ class CurrentUrlRewritesRegenerator
         $this->urlFinder = $urlFinder;
         $this->productUrlPathGenerator = $productUrlPathGenerator;
         $this->urlRewriteFactory = $urlRewriteFactory;
-        $this->urlRewritePlaceholder = $urlRewriteFactory->create();
+        $this->urlRewritePrototype = $urlRewriteFactory->create();
         $this->urlRewriteMap = $urlRewriteMap ?: ObjectManager::getInstance()->get(UrlRewriteMap::class);
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -79,7 +91,7 @@ class CurrentUrlRewritesRegenerator
      */
     public function generate($storeId, Product $product, ObjectRegistry $productCategories, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $currentUrlRewrites = $this->urlRewriteMap->getByIdentifiers(
             $product->getEntityId(),
             $storeId,
@@ -99,9 +111,7 @@ class CurrentUrlRewritesRegenerator
             );
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
@@ -116,7 +126,7 @@ class CurrentUrlRewritesRegenerator
         if ($product->getData('save_rewrites_history')) {
             $targetPath = $this->productUrlPathGenerator->getUrlPathWithSuffix($product, $storeId, $category);
             if ($url->getRequestPath() !== $targetPath) {
-                $generatedUrl = clone $this->urlRewritePlaceholder;
+                $generatedUrl = clone $this->urlRewritePrototype;
                 $generatedUrl->setEntityType(ProductUrlRewriteGenerator::ENTITY_TYPE)
                     ->setEntityId($product->getEntityId())
                     ->setRequestPath($url->getRequestPath())
@@ -145,7 +155,7 @@ class CurrentUrlRewritesRegenerator
             ? $this->productUrlPathGenerator->getUrlPathWithSuffix($product, $storeId, $category)
             : $url->getTargetPath();
         if ($url->getRequestPath() !== $targetPath) {
-            $generatedUrl = clone $this->urlRewritePlaceholder;
+            $generatedUrl = clone $this->urlRewritePrototype;
             $generatedUrl->setEntityType(ProductUrlRewriteGenerator::ENTITY_TYPE)
                 ->setEntityId($product->getEntityId())
                 ->setRequestPath($url->getRequestPath())
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ProductScopeRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/ProductScopeRewriteGenerator.php
index cc64dc99962d3e8287d38466b4962275d8e11723..a586e8433f9d3e7776a3a186b497447b1b9c9229 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ProductScopeRewriteGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ProductScopeRewriteGenerator.php
@@ -59,7 +59,7 @@ class ProductScopeRewriteGenerator
     private $canonicalUrlRewriteGenerator;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param StoreViewService $storeViewService
@@ -90,7 +90,7 @@ class ProductScopeRewriteGenerator
         $this->anchorUrlRewriteGenerator = $anchorUrlRewriteGenerator;
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -115,7 +115,7 @@ class ProductScopeRewriteGenerator
     public function generateForGlobalScope($productCategories, Product $product, $rootCategoryId = null)
     {
         $productId = $product->getEntityId();
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
 
         foreach ($product->getStoreIds() as $id) {
             if (!$this->isGlobalScope($id) &&
@@ -130,9 +130,7 @@ class ProductScopeRewriteGenerator
             }
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
@@ -146,7 +144,7 @@ class ProductScopeRewriteGenerator
      */
     public function generateForSpecificStoreView($storeId, $productCategories, Product $product, $rootCategoryId = null)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $categories = [];
         foreach ($productCategories as $category) {
             if ($this->isCategoryProperForGenerating($category, $storeId)) {
@@ -173,9 +171,7 @@ class ProductScopeRewriteGenerator
             $this->anchorUrlRewriteGenerator->generate($storeId, $product, $productCategories)
         );
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlRewriteGenerator.php
index c13dcee6bfa09bcee2c7bb5cc12e6b91a85d0c57..1b1fc472a7ab44309a2bb6a23741744ea6f077e4 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlRewriteGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlRewriteGenerator.php
@@ -31,6 +31,12 @@ class ProductUrlRewriteGenerator
      */
     protected $storeViewService;
 
+    /**
+     * @var \Magento\Catalog\Model\Product
+     * @deprecated
+     */
+    protected $product;
+
     /**
      * @deprecated
      * @var \Magento\CatalogUrlRewrite\Model\Product\CurrentUrlRewritesRegenerator
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
index 1605ad2643113b05a2c86d51537f0652b2e85b99..c90478af47676c070be49d9acd29954a9ace0c42 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
@@ -70,12 +70,13 @@ class Product extends AbstractDb
     }
 
     /**
-     * Removes data by entities from url_rewrite table using a select
+     * Removes multiple entities from url_rewrite table using entities from catalog_url_rewrite_product_category
+     * Example: $filter = ['category_id' => [1, 2, 3], 'product_id' => [1, 2, 3]]
      *
      * @param array $filter
      * @return int
      */
-    public function removeMultipleByFilter(array $filter)
+    public function removeMultipleByProductCategory(array $filter)
     {
         return $this->getConnection()->delete(
             $this->getTable(self::TABLE_NAME),
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
index 2d15d4f627359d30e8ae4488ece51987043a2da7..a9307ddd14f30eb972d7f3a85fb3a960f622708e 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
@@ -100,7 +100,7 @@ class AfterImportDataObserver implements ObserverInterface
     ];
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param \Magento\Catalog\Model\ProductFactory $catalogProductFactory
@@ -136,7 +136,7 @@ class AfterImportDataObserver implements ObserverInterface
         $this->urlFinder = $urlFinder;
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -269,7 +269,7 @@ class AfterImportDataObserver implements ObserverInterface
      */
     protected function generateUrls()
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $urlRewritesSet->merge($this->canonicalUrlRewriteGenerate());
         $urlRewritesSet->merge($this->categoriesUrlRewriteGenerate());
         $urlRewritesSet->merge($this->currentUrlRewritesRegenerate());
@@ -278,9 +278,7 @@ class AfterImportDataObserver implements ObserverInterface
         unset($this->products);
         $this->products = [];
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
index 4c52725e5e964cc9d883e8f5c26a0b8172f6931e..ca5ae2b5beba56031eadc0b4331e1c6f898a645d 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
@@ -41,7 +41,7 @@ class UrlRewriteHandler
     private $categoryBasedProductRewriteGenerator;
 
     /** @var \Magento\UrlRewrite\Model\UrlRewritesSet */
-    private $urlRewritesSetPlaceHolder;
+    private $urlRewritesSetPrototype;
 
     /**
      * @param \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider
@@ -66,7 +66,7 @@ class UrlRewriteHandler
         $this->productCollectionFactory = $productCollectionFactory;
         $urlRewritesSetFactory = $urlRewritesSetFactory ?: ObjectManager::getInstance()
             ->get(UrlRewritesSetFactory::class);
-        $this->urlRewritesSetPlaceHolder = $urlRewritesSetFactory->create();
+        $this->urlRewritesSetPrototype = $urlRewritesSetFactory->create();
     }
 
     /**
@@ -77,7 +77,7 @@ class UrlRewriteHandler
      */
     public function generateProductUrlRewrites(Category $category)
     {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         $this->isSkippedProduct = [];
         $saveRewriteHistory = $category->getData('save_rewrites_history');
         $storeId = $category->getStoreId();
@@ -118,9 +118,7 @@ class UrlRewriteHandler
             );
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
@@ -136,7 +134,7 @@ class UrlRewriteHandler
         $saveRewriteHistory,
         $rootCategoryId = null
     ) {
-        $urlRewritesSet = clone $this->urlRewritesSetPlaceHolder;
+        $urlRewritesSet = clone $this->urlRewritesSetPrototype;
         /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
         $productCollection = $category->getProductCollection()
             ->addAttributeToSelect('name')
@@ -155,9 +153,7 @@ class UrlRewriteHandler
             );
         }
 
-        $result = $urlRewritesSet->getData();
-        $urlRewritesSet->resetData();
-        return $result;
+        return $urlRewritesSet->getData();
     }
 
     /**
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/Plugin/StorageTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/Plugin/StorageTest.php
index 5c068cc59b7246e7033acfe76205f3b3c705e2d5..f2dad1e1035b5dfcc6112f17d569263d41cf578c 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/Plugin/StorageTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/Plugin/StorageTest.php
@@ -102,7 +102,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
     {
         $data = [1, 2, 3];
         $this->productResourceModel->expects(static::once())
-            ->method('removeMultipleByFilter')
+            ->method('removeMultipleByProductCategory')
             ->with($data)->willReturnSelf();
         $this->plugin->beforeDeleteByData($this->storage, $data);
     }
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/UrlRewriteMapTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/UrlRewriteMapTest.php
index a84fbc302bd9a0e40073fe0e17da91f83d9ce541..c6ea0f0ce444ce92dde13d8ee8c05ba43a08ca11 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/UrlRewriteMapTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/UrlRewriteMapTest.php
@@ -26,7 +26,7 @@ class UrlRewriteMapTest extends \PHPUnit_Framework_TestCase
     private $urlRewriteFactoryMock;
 
     /** @var UrlRewrite|\PHPUnit_Framework_MockObject_MockObject */
-    private $urlRewritePlaceholderMock;
+    private $urlRewritePrototypeMock;
 
     /** @var UrlFinderInterface|\PHPUnit_Framework_MockObject_MockObject */
     private $urlFinderMock;
@@ -39,11 +39,11 @@ class UrlRewriteMapTest extends \PHPUnit_Framework_TestCase
         $this->dataMapPoolMock = $this->getMock(DataMapPoolInterface::class);
         $this->urlFinderMock = $this->getMock(UrlFinderInterface::class);
         $this->urlRewriteFactoryMock = $this->getMock(UrlRewriteFactory::class, ['create'], [], '', false);
-        $this->urlRewritePlaceholderMock = new UrlRewrite();
+        $this->urlRewritePrototypeMock = new UrlRewrite();
 
         $this->urlRewriteFactoryMock->expects($this->any())
             ->method('create')
-            ->willReturn($this->urlRewritePlaceholderMock);
+            ->willReturn($this->urlRewritePrototypeMock);
 
         $this->model = (new ObjectManager($this))->getObject(
             UrlRewriteMap::class,
diff --git a/app/code/Magento/UrlRewrite/Model/UrlRewritesSet.php b/app/code/Magento/UrlRewrite/Model/UrlRewritesSet.php
index 480bfc5ddc354a1b60328a49bfe90b55fd4e6ad1..184eb9486a23507fdd0d3e580229213f2d230dac 100644
--- a/app/code/Magento/UrlRewrite/Model/UrlRewritesSet.php
+++ b/app/code/Magento/UrlRewrite/Model/UrlRewritesSet.php
@@ -8,7 +8,9 @@ namespace Magento\UrlRewrite\Model;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 
 /**
- * Removes duplicates for a set/array of Url Rewrites
+ * This class is to be used as a container for new generated url rewrites by adding new ones using merge method
+ * Removes duplicates for a set/array of Url Rewrites based on the unique key of the url_rewrites table
+ *
  */
 class UrlRewritesSet
 {
@@ -23,13 +25,13 @@ class UrlRewritesSet
      * @param UrlRewrite[] $urlRewritesArray
      * @return void
      */
-    public function merge($urlRewritesArray)
+    public function merge(array $urlRewritesArray)
     {
         $separator = '_';
         foreach ($urlRewritesArray as $urlRewrite) {
             $key = $urlRewrite->getRequestPath() . $separator . $urlRewrite->getStoreId();
             if ($key !== $separator) {
-                $this->data[$urlRewrite->getRequestPath() . $separator . $urlRewrite->getStoreId()] = $urlRewrite;
+                $this->data[$key] = $urlRewrite;
             } else {
                 $this->data[] = $urlRewrite;
             }
@@ -45,15 +47,4 @@ class UrlRewritesSet
     {
         return $this->data;
     }
-
-    /**
-     * Resets the container to an empty array
-     *
-     * @return void
-     */
-    public function resetData()
-    {
-        unset($this->data);
-        $this->data = [];
-    }
 }
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/UrlRewritesSetTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/UrlRewritesSetTest.php
index 131f8cbe1a739e602e71a76cbf1852dc9a21be55..ce5b944cb3b5ff3760dd47cb2b64b93632843e57 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/UrlRewritesSetTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/UrlRewritesSetTest.php
@@ -69,21 +69,6 @@ class UrlRewritesSetTest extends \PHPUnit_Framework_TestCase
         $this->assertNotEmpty($this->urlRewritesSet->getData());
     }
 
-    /**
-     * Run test resetData method
-     *
-     * @return void
-     */
-    public function testResetData()
-    {
-        $data = new \ReflectionProperty($this->urlRewritesSet, 'data');
-        $data->setAccessible(true);
-        $data->setValue($this->urlRewritesSet, [new UrlRewrite()]);
-        $data->setAccessible(false);
-        $this->urlRewritesSet->resetData();
-        $this->assertEmpty($this->urlRewritesSet->getData());
-    }
-
     /**
      * Data provider  for testMerge
      *