diff --git a/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php b/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php
index 6688648a3c4fd6fabbc010e8440be6c6813a12b3..7f21d9e69c6e0eeee63ce6a2a44a3aa9d66d65bc 100644
--- a/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php
+++ b/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php
@@ -127,7 +127,7 @@ class Bundle
         }
         $options = [];
         foreach ($bundleOptionsData as $key => $optionData) {
-            if ((bool)$optionData['delete']) {
+            if (!empty($optionData['delete'])) {
                 continue;
             }
 
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php
index aec6549f400fc5742eb0a64612572039f4a1a878..683a96133ad3005beeea1812744da6496bd84ae2 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php
@@ -182,6 +182,11 @@ class Attributes extends AbstractModifier
                                                 . '.create_new_attribute_modal',
                                             'actionName' => 'toggleModal',
                                         ],
+                                        [
+                                            'targetName' => 'product_form.product_form.add_attribute_modal'
+                                                . '.create_new_attribute_modal.product_attribute_add_form',
+                                            'actionName' => 'destroyInserted'
+                                        ],
                                         [
                                             'targetName'
                                             => 'product_form.product_form.add_attribute_modal'
diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_attribute_add_form.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_attribute_add_form.xml
index 772bc1e6ec5d721b45a48b2ab1cfade000af6b09..f795fcabe701c0298e8362db57a0af372c0535e9 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_attribute_add_form.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_attribute_add_form.xml
@@ -147,7 +147,6 @@
                         <item name="isTemplate" xsi:type="boolean">true</item>
                         <item name="is_collection" xsi:type="boolean">true</item>
                         <item name="componentType" xsi:type="string">container</item>
-                        <item name="positionProvider" xsi:type="string">attribute_options.position</item>
                     </item>
                 </argument>
                 <field name="is_default" component="Magento_Catalog/js/form/element/checkbox" sortOrder="0" formElement="checkbox">
@@ -184,12 +183,8 @@
                         </item>
                     </argument>
                     <settings>
-                        <additionalClasses>
-                            <class name="_hidden">true</class>
-                        </additionalClasses>
                         <dataType>text</dataType>
                         <visible>false</visible>
-                        <dataScope>position</dataScope>
                     </settings>
                 </field>
             </container>
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js b/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js
index 51ffeaea0fc0ccda677a9648ee3b501a2562b207..2f6703cc92eac405dfb0763b47f1e5f08bd1d60a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js
@@ -54,9 +54,16 @@ define([
             if (!_.isEmpty(this.suffixName) || _.isNumber(this.suffixName)) {
                 suffixName = '.' + this.suffixName;
             }
-            this.dataScope = 'data.' + this.prefixName + '.' + this.elementName + suffixName;
 
-            this.links.value = this.provider + ':' + this.dataScope;
+            this.exportDataLink = 'data.' + this.prefixName + '.' + this.elementName + suffixName;
+            this.exports.value = this.provider + ':' + this.exportDataLink;
+        },
+
+        /** @inheritdoc */
+        destroy: function () {
+            this._super();
+
+            this.source.remove(this.exportDataLink);
         },
 
         /**
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html b/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html
index d4cfb02611416ae32b7e142e523058288245c9d5..9a52dcefa304281e71099b9d29f51a7a335752f9 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html
+++ b/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html
@@ -7,7 +7,7 @@
 <button class="action-delete"
         attr="{'data-action': 'remove_row'}"
         data-bind="
-            click: function(){ $data.processingDeleteRecord($parents); },
+            click: function(){ $parent.processingDeleteRecord($record().index, $record.recordId); },
             attr: {
                 title: $parent.deleteButtonLabel
             }
diff --git a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
index 7686de1d45c5dad276775c7ae624db0b6cac8365..eb54d8af001b3b338080cfa0d71f4478535bd330 100644
--- a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
+++ b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
@@ -97,7 +97,7 @@ define([
                 success: function (res) {
                     var eventData, parameters;
 
-                    $(document).trigger('ajax:addToCart', form.data().productSku);
+                    $(document).trigger('ajax:addToCart', form.data().productSku, form, res);
 
                     if (self.isLoaderEnabled()) {
                         $('body').trigger(self.options.processStop);
diff --git a/app/code/Magento/Config/Model/Config/Structure/Reader.php b/app/code/Magento/Config/Model/Config/Structure/Reader.php
index 5916649588bcb271c25ba13d368e62e22602b345..c83c2e1ae13207d29ecea5d51daf46ee99ed82d8 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Reader.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Reader.php
@@ -124,6 +124,7 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
      * Processing nodes of the document before merging
      *
      * @param string $content
+     * @throws \Magento\Framework\Config\Dom\ValidationException
      * @return string
      */
     protected function processingDocument($content)
@@ -131,7 +132,12 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
         $object = new DataObject();
         $document = new \DOMDocument();
 
-        $document->loadXML($content);
+        try {
+            $document->loadXML($content);
+        } catch (\Exception $e) {
+            throw new \Magento\Framework\Config\Dom\ValidationException($e->getMessage());
+        }
+
         $this->compiler->compile($document->documentElement, $object, $object);
 
         return $document->saveXML();
diff --git a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
index ad3d62f6c1c2796038cc7c969316eff4c7996edd..6b3a232cd3e3912473bc5e7619c2c2cecf006a09 100644
--- a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
+++ b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html
@@ -54,10 +54,10 @@
                   id="login-form">
                 <div class="fieldset login" data-bind="attr: {'data-hasrequired': $t('* Required Fields')}">
                     <div class="field email required">
-                        <label class="label" for="email"><span data-bind="i18n: 'Email Address'"></span></label>
+                        <label class="label" for="customer-email"><span data-bind="i18n: 'Email Address'"></span></label>
                         <div class="control">
                             <input name="username"
-                                   id="email"
+                                   id="customer-email"
                                    type="email"
                                    class="input-text"
                                    data-bind="attr: {autocomplete: autocomplete}"
diff --git a/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml b/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml
index 4152c06fa3ddc5d153f93da6b9c2c6c278b8152c..2fdf5f3cd0ea92b56d7cf4413c59d72fc9b29425 100644
--- a/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml
+++ b/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml
@@ -87,7 +87,6 @@
                 <additionalClasses>
                     <class name="admin__field-wide">true</class>
                 </additionalClasses>
-                <dataScope>text_swatch</dataScope>
                 <componentType>dynamicRows</componentType>
             </settings>
             <container name="record" component="Magento_Ui/js/dynamic-rows/record">
@@ -96,8 +95,6 @@
                         <item name="isTemplate" xsi:type="boolean">true</item>
                         <item name="is_collection" xsi:type="boolean">true</item>
                         <item name="componentType" xsi:type="string">container</item>
-                        <item name="positionProvider" xsi:type="string">text_swatch.position</item>
-                        <item name="dataScope" xsi:type="string"/>
                     </item>
                 </argument>
                 <field name="defaulttext" component="Magento_Catalog/js/form/element/checkbox" sortOrder="0" formElement="checkbox">
@@ -183,15 +180,11 @@
                         </item>
                     </argument>
                     <settings>
-                        <additionalClasses>
-                            <class name="_hidden">true</class>
-                        </additionalClasses>
                         <dataType>text</dataType>
                         <visible>false</visible>
-                        <dataScope>position</dataScope>
                     </settings>
                 </field>
-                <actionDelete name="action_delete" component="Magento_Catalog/js/form/element/action-delete" template="Magento_Catalog/form/element/action-delete">
+                <actionDelete name="action_delete">
                     <argument name="data" xsi:type="array">
                         <item name="config" xsi:type="array">
                             <item name="fit" xsi:type="boolean">true</item>
@@ -227,7 +220,6 @@
                     <class name="swatch-visual-options-container">true</class>
                     <class name="admin__field-wide">true</class>
                 </additionalClasses>
-                <dataScope>visual_swatch</dataScope>
                 <componentType>dynamicRows</componentType>
             </settings>
             <container name="record" component="Magento_Ui/js/dynamic-rows/record">
@@ -236,8 +228,6 @@
                         <item name="isTemplate" xsi:type="boolean">true</item>
                         <item name="is_collection" xsi:type="boolean">true</item>
                         <item name="componentType" xsi:type="string">container</item>
-                        <item name="positionProvider" xsi:type="string">text_swatch.position</item>
-                        <item name="dataScope" xsi:type="string"/>
                     </item>
                 </argument>
                 <field name="defaultvisual" component="Magento_Catalog/js/form/element/checkbox" sortOrder="0" formElement="checkbox">
@@ -276,7 +266,6 @@
                             <class name="swatches-visual-col">true</class>
                         </additionalClasses>
                         <label translate="true">Swatch</label>
-                        <dataScope>swatchvisual</dataScope>
                     </settings>
                 </field>
                 <field name="optionvisual_default_store_view" component="Magento_Catalog/js/form/element/input" template="Magento_Catalog/form/element/input" formElement="input">
@@ -290,7 +279,6 @@
                     <settings>
                         <dataType>text</dataType>
                         <label translate="true">Default Store View</label>
-                        <dataScope>optionvisual_default_store_view</dataScope>
                     </settings>
                 </field>
                 <field name="optionvisual_admin" component="Magento_Catalog/js/form/element/input" template="Magento_Catalog/form/element/input" formElement="input">
@@ -304,7 +292,6 @@
                     <settings>
                         <dataType>text</dataType>
                         <label translate="true">Admin</label>
-                        <dataScope>optionvisual_admin</dataScope>
                     </settings>
                 </field>
                 <field name="position" component="Magento_Catalog/js/form/element/input" formElement="input">
@@ -315,15 +302,10 @@
                         </item>
                     </argument>
                     <settings>
-                        <additionalClasses>
-                            <class name="_hidden">true</class>
-                        </additionalClasses>
-                        <dataType>text</dataType>
-                        <visible>false</visible>
-                        <dataScope>position</dataScope>
+                         <visible>false</visible>
                     </settings>
                 </field>
-                <actionDelete name="action_delete" component="Magento_Catalog/js/form/element/action-delete" template="Magento_Catalog/form/element/action-delete">
+                <actionDelete name="action_delete">
                     <argument name="data" xsi:type="array">
                         <item name="config" xsi:type="array">
                             <item name="fit" xsi:type="boolean">true</item>
diff --git a/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js b/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js
index e63c9a2138a3627671343e11a02908b1d4799653..2fbce5aefbdebe34e025a71e4062cd2a22361140 100644
--- a/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js
+++ b/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js
@@ -305,18 +305,30 @@ define([
          */
         initialize: function () {
             this._super()
-                .initOldCode();
+                .initOldCode()
+                .on('value', this.onChangeColor.bind(this));
 
             return this;
         },
 
+        /**
+         * Handler function that execute when color changes.
+         *
+         * @param {String} data - color
+         */
+        onChangeColor: function (data) {
+            if (!data) {
+                jQuery('.' + this.elementName).parent().removeClass('unavailable');
+            }
+        },
+
         /**
          * Initialize wrapped former implementation.
          *
          * @returns {Object} Chainable.
          */
         initOldCode: function () {
-            jQuery.async('.' + this.elementName, function (elem) {
+            jQuery.async('.' + this.elementName, this.name, function (elem) {
                 oldCode(this.value(), elem.parentElement, this.uploadUrl, this.elementName);
             }.bind(this));
 
@@ -336,9 +348,15 @@ define([
             this.elementName = this.prefixElementName + recordId;
 
             this.inputName = prefixName + '[' + this.elementName + ']';
-            this.dataScope = 'data.' + this.prefixName + '.' + this.elementName;
+            this.exportDataLink = 'data.' + this.prefixName + '.' + this.elementName;
+            this.exports.value = this.provider + ':' + this.exportDataLink;
+        },
+
+        /** @inheritdoc */
+        destroy: function () {
+            this._super();
 
-            this.links.value = this.provider + ':' + this.dataScope;
+            this.source.remove(this.exportDataLink);
         },
 
         /**
diff --git a/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html b/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html
index 271cea918b7be2087d49e16161bb08e2f5a6c04f..8296e944a8ed3f7c2311c2eb75e4593545d0bc66 100644
--- a/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html
+++ b/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html
@@ -11,7 +11,7 @@
     },
     value: value
 "/>
-<div data-bind="attr: {class: 'swatch_window ' + elementName}"></div>
+<div attr="class: 'swatch_window ' + elementName" ko-style="backgroundColor: $data.value"></div>
 <div class="swatch_sub-menu_container">
     <div class="swatch_row position-relative">
         <div class="swatch_row_name colorpicker_handler">
diff --git a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js
index 01fa03d1b4b67cb71427240a54af4b4e560cb73c..94a05e5fcde33efe26b2817d21fecfea403c21c6 100644
--- a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js
+++ b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js
@@ -224,6 +224,14 @@ define([
             return this;
         },
 
+        /** @inheritdoc */
+        destroy: function () {
+            if (this.dnd()) {
+                this.dnd().destroy();
+            }
+            this._super();
+        },
+
         /**
          * Calls 'initObservable' of parent
          *