diff --git a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php
similarity index 50%
rename from app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php
rename to app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php
index 82a25531757a2fb3cd90da751467d69fe6037cfe..bc6de17f90cfede8926865e821652beb00ffb62d 100644
--- a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php
+++ b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php
@@ -4,50 +4,37 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository;
+namespace Magento\Catalog\Plugin\Model\AttributeSetRepository;
 
 use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
-use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 use Magento\Eav\Api\AttributeSetRepositoryInterface;
 use Magento\Eav\Api\Data\AttributeSetInterface;
-use Magento\UrlRewrite\Model\UrlPersistInterface;
-use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 
 /**
- * Remove url rewrites for products with given attribute set.
+ * Delete related products after attribute set successfully removed.
  */
-class RemoveProductUrlRewrite
+class RemoveProducts
 {
     /**
-     * @var int
-     */
-    private $chunkSize = 1000;
-
-    /**
-     * @var UrlPersistInterface
-     */
-    private $urlPersist;
-
-    /**
+     * Retrieve products related to specific attribute set.
+     *
      * @var CollectionFactory
      */
     private $collectionFactory;
 
     /**
-     * ProductUrlRewriteProcessor constructor.
+     * RemoveProducts constructor.
      *
-     * @param UrlPersistInterface $urlPersist
      * @param CollectionFactory $collectionFactory
      */
-    public function __construct(UrlPersistInterface $urlPersist, CollectionFactory $collectionFactory)
+    public function __construct(CollectionFactory $collectionFactory)
     {
-        $this->urlPersist = $urlPersist;
         $this->collectionFactory = $collectionFactory;
     }
 
     /**
-     * Remove url rewrites for products with given attribute set.
+     * Delete related to specific attribute set products, if attribute set was removed successfully.
      *
      * @param AttributeSetRepositoryInterface $subject
      * @param \Closure $proceed
@@ -64,19 +51,8 @@ class RemoveProductUrlRewrite
         /** @var Collection $productCollection */
         $productCollection = $this->collectionFactory->create();
         $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]);
-        $productIds = $productCollection->getAllIds();
         $result = $proceed($attributeSet);
-        if (!empty($productIds)) {
-            $productIds = array_chunk($productIds, $this->chunkSize);
-            foreach ($productIds as $ids) {
-                $this->urlPersist->deleteByData(
-                    [
-                        UrlRewrite::ENTITY_ID => $ids,
-                        UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
-                    ]
-                );
-            }
-        }
+        $productCollection->delete();
 
         return $result;
     }
diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
index 616bee43de00e521439cba4f2447c446bb0e7e03..ae09ff1113608509504f0405ce62207251bc72f5 100755
--- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
@@ -126,6 +126,10 @@ class UpgradeSchema implements UpgradeSchemaInterface
             $this->fixCustomerGroupIdColumn($setup);
         }
 
+        if (version_compare($context->getVersion(), '2.2.4', '<')) {
+            $this->removeAttributeSetRelation($setup);
+        }
+
         $setup->endSetup();
     }
 
@@ -699,4 +703,22 @@ class UpgradeSchema implements UpgradeSchemaInterface
         );
         $setup->getConnection()->query($sql);
     }
+
+    /**
+     * Remove foreign key between catalog_product_entity and eav_attribute_set tables.
+     * Drop foreign key to delegate cascade on delete to plugin.
+     * @see \Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts
+     *
+     * @param SchemaSetupInterface $setup
+     * @return void
+     */
+    private function removeAttributeSetRelation(SchemaSetupInterface $setup)
+    {
+        $productTable = $setup->getTable('catalog_product_entity');
+        $attributeSetTable = $setup->getTable('eav_attribute_set');
+        $setup->getConnection()->dropForeignKey(
+            $productTable,
+            $setup->getFkName($productTable, 'attribute_set_id', $attributeSetTable, 'attribute_set_id')
+        );
+    }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
similarity index 65%
rename from app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php
rename to app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
index cf2337bf7c76c76885d765c6da4fdbb634fbeb43..a8eb757646e7421f5ae913e3b8f61afbacc2e883 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
@@ -4,26 +4,23 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogUrlRewrite\Test\Unit\Plugin\Eav\AttributeSetRepository;
+namespace Magento\Catalog\Test\Unit\Plugin\Model\AttributeSetRepository;
 
 use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
-use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
-use Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite;
+use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts;
 use Magento\Eav\Api\AttributeSetRepositoryInterface;
 use Magento\Eav\Api\Data\AttributeSetInterface;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\UrlRewrite\Model\UrlPersistInterface;
-use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 use PHPUnit\Framework\TestCase;
 
 /**
- * Provide tests for RemoveProductUrlRewrite plugin.
+ * Provide tests for RemoveProducts plugin.
  */
-class RemoveProductUrlRewriteTest extends TestCase
+class RemoveProductsTest extends TestCase
 {
     /**
-     * @var RemoveProductUrlRewrite
+     * @var RemoveProducts
      */
     private $testSubject;
 
@@ -32,11 +29,6 @@ class RemoveProductUrlRewriteTest extends TestCase
      */
     private $collectionFactory;
 
-    /**
-     * @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $urlPersist;
-
     /**
      * @inheritdoc
      */
@@ -47,25 +39,20 @@ class RemoveProductUrlRewriteTest extends TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->urlPersist = $this->getMockBuilder(UrlPersistInterface::class)
-            ->disableOriginalConstructor()
-            ->getMockForAbstractClass();
         $this->testSubject = $objectManager->getObject(
-            RemoveProductUrlRewrite::class,
+            RemoveProducts::class,
             [
                 'collectionFactory' => $this->collectionFactory,
-                'urlPersist' => $this->urlPersist,
             ]
         );
     }
 
     /**
-     * Test plugin will delete all url rewrites for products with given attribute set.
+     * Test plugin will delete all related products for given attribute set.
      */
     public function testAroundDelete()
     {
         $attributeSetId = '1';
-        $productId = '1';
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collection */
         $collection = $this->getMockBuilder(Collection::class)
@@ -75,21 +62,12 @@ class RemoveProductUrlRewriteTest extends TestCase
             ->method('addFieldToFilter')
             ->with(self::identicalTo('attribute_set_id'), self::identicalTo(['eq' => $attributeSetId]));
         $collection->expects(self::once())
-            ->method('getAllIds')
-            ->willReturn([$productId]);
+            ->method('delete');
 
         $this->collectionFactory->expects(self::once())
             ->method('create')
             ->willReturn($collection);
 
-        $this->urlPersist->expects(self::once())
-            ->method('deleteByData')
-            ->with(self::identicalTo(
-                [
-                    UrlRewrite::ENTITY_ID => [$productId],
-                    UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
-                ]
-            ));
         /** @var AttributeSetRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSetRepository */
         $attributeSetRepository = $this->getMockBuilder(AttributeSetRepositoryInterface::class)
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Catalog/etc/adminhtml/di.xml b/app/code/Magento/Catalog/etc/adminhtml/di.xml
index b97e6fc1aa31891365a9eb901e80b456dab0b9a1..34d089580906f035f181e1b34cd85f77dfa59f70 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/di.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/di.xml
@@ -184,4 +184,7 @@
             <argument name="scopeOverriddenValue" xsi:type="object">Magento\Catalog\Model\Attribute\ScopeOverriddenValue</argument>
         </arguments>
     </type>
+    <type name="Magento\Eav\Api\AttributeSetRepositoryInterface">
+        <plugin name="remove_products" type="Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts"/>
+    </type>
 </config>
diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml
index 18671a32bb4fbc05cd08e5581649de3f11b423aa..26ed173420adb95491694389c71d2a0848bfb198 100644
--- a/app/code/Magento/Catalog/etc/module.xml
+++ b/app/code/Magento/Catalog/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Catalog" setup_version="2.2.3">
+    <module name="Magento_Catalog" setup_version="2.2.4">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Cms"/>
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
index ebac217df5fcbd0215a6d677e4ca13e5759a644f..32ecc97d0f85f0929f1f1f96d601d6899b21ff3c 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
@@ -25,9 +25,6 @@
     <type name="Magento\Catalog\Model\Category\DataProvider">
         <plugin name="category_ui_form_url_key_plugin" type="Magento\CatalogUrlRewrite\Plugin\Catalog\Block\Adminhtml\Category\Tab\Attributes"/>
     </type>
-    <type name="Magento\Eav\Api\AttributeSetRepositoryInterface">
-        <plugin name="attribute_set_delete_plugin" type="Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite"/>
-    </type>
     <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
         <arguments>
             <argument name="modifiers" xsi:type="array">
diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
similarity index 67%
rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
index da189b85932c74e04a6a128a37e67a39669d7961..724e2e62f230dac9d411862d833be9ae94d93915 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php
@@ -7,6 +7,8 @@
 namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
+use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts;
 use Magento\Eav\Api\AttributeSetRepositoryInterface;
 use Magento\Eav\Model\Entity\Attribute\Set;
 use Magento\TestFramework\Helper\Bootstrap;
@@ -15,25 +17,25 @@ use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollectionFactory;
 use PHPUnit\Framework\TestCase;
 
 /**
- * Provide tests for RemoveProductUrlRewrite plugin.
+ * Provide tests for RemoveProducts plugin.
  * @magentoAppArea adminhtml
  */
-class RemoveProductUrlRewriteTest extends TestCase
+class RemoveProductsTest extends TestCase
 {
     /**
      * @return void
      */
-    public function testRemoveProductUrlRewriteIsRegistered()
+    public function testRemoveProductsIsRegistered()
     {
         $pluginInfo = Bootstrap::getObjectManager()->get(PluginList::class)
             ->get(AttributeSetRepositoryInterface::class, []);
-        self::assertSame(RemoveProductUrlRewrite::class, $pluginInfo['attribute_set_delete_plugin']['instance']);
+        self::assertSame(RemoveProducts::class, $pluginInfo['remove_products']['instance']);
     }
 
     /**
-     * Test url rewrite will be removed for product with given attribute set, if one will be deleted.
+     * Test related to given attribute set products will be removed, if attribute set will be deleted.
      *
-     * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php
+     * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php
      * @magentoDbIsolation enabled
      */
     public function testAroundDelete()
@@ -44,19 +46,25 @@ class RemoveProductUrlRewriteTest extends TestCase
         $productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
         $product = $productRepository->get('simple');
 
+        $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create();
+        $productCollection->addIdFilter($product->getId());
         $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create();
         $urlRewriteCollection->addFieldToFilter('entity_type', 'product');
         $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId());
 
         self::assertSame(1, $urlRewriteCollection->getSize());
+        self::assertSame(1, $productCollection->getSize());
 
         $attributeSetRepository = Bootstrap::getObjectManager()->get(AttributeSetRepositoryInterface::class);
         $attributeSetRepository->deleteById($attributeSet->getAttributeSetId());
 
+        $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create();
+        $productCollection->addIdFilter($product->getId());
         $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create();
         $urlRewriteCollection->addFieldToFilter('entity_type', 'product');
         $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId());
 
         self::assertSame(0, $urlRewriteCollection->getSize());
+        self::assertSame(0, $productCollection->getSize());
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php
rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php
diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php
rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php