diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
index 4b22ca0a2ace46b37dc21206fa1e2ebff0db4d9c..25358a07451459b59e22709cea42ce6e59f780f0 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
@@ -25,331 +25,329 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/lib/registry/registry",
     "jquery/jquery.hashchange",
     "mage/mage",
-    "prototype"
-], function(jQuery){
+    "prototype",
+    "domReady!"
+], function(jQuery, registry){
 
-    jQuery(function() {
-        window.configForm = jQuery('#config-edit-form').mage('form').mage('validation', {
-            submitHandler: function(form)
-            {
-                $$('.requires').each(function(element) {
-                    var scopeElement = adminSystemConfig.getScopeElement(element);
-                    if (!scopeElement || !scopeElement.checked) {
-                        Element.extend(element).disabled = false;
-                    }
-                });
-                jQuery(form).trigger('afterValidate');
-                form.submit();
+    var adminSystemConfig = {
+        getUp: function (element, tag) {
+            var $element = Element.extend(element);
+            if (typeof $element.upTag == 'undefined') {
+                $element.upTag = {};
             }
-        });
-
-        window.adminSystemConfig = {
-            getUp: function (element, tag) {
-                var $element = Element.extend(element);
-                if (typeof $element.upTag == 'undefined') {
-                    $element.upTag = {};
-                }
-                if (typeof $element.upTag[tag] == 'undefined') {
-                    $element.upTag[tag] = Element.extend($element.up(tag));
-                }
-                return $element.upTag[tag];
-            },
-            getUpTd: function (element) {
-                return this.getUp(element, 'td');
-            },
-            getUpTr: function (element) {
-                return this.getUp(element, 'tr');
-            },
-            getScopeElement: function(element) {
-                var $element = Element.extend(element);
+            if (typeof $element.upTag[tag] == 'undefined') {
+                $element.upTag[tag] = Element.extend($element.up(tag));
+            }
+            return $element.upTag[tag];
+        },
+        getUpTd: function (element) {
+            return this.getUp(element, 'td');
+        },
+        getUpTr: function (element) {
+            return this.getUp(element, 'tr');
+        },
+        getScopeElement: function(element) {
+            var $element = Element.extend(element);
+            if (typeof $element.scopeElement == 'undefined') {
+                var scopeElementName = element.getAttribute('name').replace(/\[value\]$/, '[inherit]');
+                $element.scopeElement = this.getUpTr(element).select('input[name="' + scopeElementName + '"]')[0];
                 if (typeof $element.scopeElement == 'undefined') {
-                    var scopeElementName = element.getAttribute('name').replace(/\[value\]$/, '[inherit]');
-                    $element.scopeElement = this.getUpTr(element).select('input[name="' + scopeElementName + '"]')[0];
-                    if (typeof $element.scopeElement == 'undefined') {
-                        $element.scopeElement = false;
-                    }
+                    $element.scopeElement = false;
                 }
-                return $element.scopeElement;
-            },
-            getDeleteElement: function(element) {
-                var $element = Element.extend(element);
+            }
+            return $element.scopeElement;
+        },
+        getDeleteElement: function(element) {
+            var $element = Element.extend(element);
+            if (typeof $element.deleteElement == 'undefined') {
+                $element.deleteElement = this.getUpTd(element)
+                    .select('input[name="'+ element.getAttribute('name') + '[delete]"]')[0];
                 if (typeof $element.deleteElement == 'undefined') {
-                    $element.deleteElement = this.getUpTd(element)
-                        .select('input[name="'+ element.getAttribute('name') + '[delete]"]')[0];
-                    if (typeof $element.deleteElement == 'undefined') {
-                        $element.deleteElement = false;
-                    }
+                    $element.deleteElement = false;
                 }
-                return $element.deleteElement;
-            },
-            mapClasses: function(element, full, callback, classPrefix) {
-                if (typeof classPrefix == 'undefined') {
-                    classPrefix = 'shared'
+            }
+            return $element.deleteElement;
+        },
+        mapClasses: function(element, full, callback, classPrefix) {
+            if (typeof classPrefix == 'undefined') {
+                classPrefix = 'shared'
+            }
+            element.classNames().each(function(className) {
+                if (className.indexOf(classPrefix + '-') == 0
+                    || (full && className.indexOf(classPrefix + '_') == 0)
+                    ) {
+                    callback(className);
                 }
-                element.classNames().each(function(className) {
-                    if (className.indexOf(classPrefix + '-') == 0
-                        || (full && className.indexOf(classPrefix + '_') == 0)
-                        ) {
-                        callback(className);
-                    }
-                });
-            },
-            getRegisteredEvents: function(element) {
-                var events = [];
-                var registry = Element.retrieve(Element.extend(element), 'prototype_event_registry');
-                if (!registry) {
-                    return events;
+            });
+        },
+        getRegisteredEvents: function(element) {
+            var events = [];
+            var registry = Element.retrieve(Element.extend(element), 'prototype_event_registry');
+            if (!registry) {
+                return events;
+            }
+            registry.each(function(pair) {
+                var eventName = pair.key;
+                if (!eventName) {
+                    return;
                 }
-                registry.each(function(pair) {
-                    var eventName = pair.key;
-                    if (!eventName) {
-                        return;
-                    }
-                    var responders = registry.get(eventName);
-                    if (!responders) {
+                var responders = registry.get(eventName);
+                if (!responders) {
+                    return;
+                }
+                responders.each(function(responder) {
+                    if (!responder.handler) {
                         return;
                     }
-                    responders.each(function(responder) {
-                        if (!responder.handler) {
-                            return;
-                        }
-                        events.push({
-                            'eventName': eventName,
-                            'handler': responder.handler
-                        });
+                    events.push({
+                        'eventName': eventName,
+                        'handler': responder.handler
                     });
                 });
-                return events;
-            },
-            onchangeSharedElement: function(event) {
-                var element = Element.extend(Event.element(event));
-                adminSystemConfig.mapClasses(element, true, function(className) {
-                    $$('.' + className).each(function(el) {
-                        if (element == el) {
-                            return;
-                        }
+            });
+            return events;
+        },
+        onchangeSharedElement: function(event) {
+            var element = Element.extend(Event.element(event));
+            adminSystemConfig.mapClasses(element, true, function(className) {
+                $$('.' + className).each(function(el) {
+                    if (element == el) {
+                        return;
+                    }
 
-                        var tagName = el.tagName.toLowerCase();
-                        if (tagName == 'input' && el.getAttribute('type') == 'file') {
+                    var tagName = el.tagName.toLowerCase();
+                    if (tagName == 'input' && el.getAttribute('type') == 'file') {
+                        var $el = Element.extend(el);
+                        var events = adminSystemConfig.getRegisteredEvents(el);
+                        $el.stopObserving('change');
+                        var elId = $el.id;
+                        $el.replace($el.outerHTML);
+                        events.each(function(event) {
+                            Event.observe(Element.extend(document.getElementById(elId)), event.eventName, event.handler);
+                        });
+                    } else {
+                        el.stopObserving('change', adminSystemConfig.onchangeSharedElement);
+                        if (tagName == 'input' && el.getAttribute('type') == 'checkbox') {
+                            if (el.checked != element.checked) {
+                                Element.extend(el).click();
+                            }
+                        } else if (tagName == 'select') {
                             var $el = Element.extend(el);
-                            var events = adminSystemConfig.getRegisteredEvents(el);
-                            $el.stopObserving('change');
-                            var elId = $el.id;
-                            $el.replace($el.outerHTML);
-                            events.each(function(event) {
-                                Event.observe(Element.extend(document.getElementById(elId)), event.eventName, event.handler);
+                            Element.extend(element).select('option').each(function(option) {
+                                var relatedOption = $el.select('option[value="' + option.value + '"]')[0];
+                                if (typeof relatedOption != 'undefined') {
+                                    relatedOption.selected = option.selected;
+                                }
                             });
                         } else {
-                            el.stopObserving('change', adminSystemConfig.onchangeSharedElement);
-                            if (tagName == 'input' && el.getAttribute('type') == 'checkbox') {
-                                if (el.checked != element.checked) {
-                                    Element.extend(el).click();
-                                }
-                            } else if (tagName == 'select') {
-                                var $el = Element.extend(el);
-                                Element.extend(element).select('option').each(function(option) {
-                                    var relatedOption = $el.select('option[value="' + option.value + '"]')[0];
-                                    if (typeof relatedOption != 'undefined') {
-                                        relatedOption.selected = option.selected;
-                                    }
-                                });
-                            } else {
-                                el.value = element.getValue();
-                            }
-                            if (Element.extend(el).requiresObj) {
-                                Element.extend(el).requiresObj.indicateEnabled();
-                            }
-                            fireEvent(el, 'change');
-                            Event.observe(el, 'change', adminSystemConfig.onchangeSharedElement);
+                            el.value = element.getValue();
                         }
-                    });
+                        if (Element.extend(el).requiresObj) {
+                            Element.extend(el).requiresObj.indicateEnabled();
+                        }
+                        fireEvent(el, 'change');
+                        Event.observe(el, 'change', adminSystemConfig.onchangeSharedElement);
+                    }
                 });
-            },
-            checkRequired: function(element, callback) {
-                var tagName = this.tagName.toLowerCase();
-                if (tagName != 'fieldset') {
-                    if (adminSystemConfig.getUpTr(this).visible()) {
+            });
+        },
+        checkRequired: function(element, callback) {
+            var tagName = this.tagName.toLowerCase();
+            if (tagName != 'fieldset') {
+                if (adminSystemConfig.getUpTr(this).visible()) {
 
-                        if (this.hasClassName('not-required')) {
-                            return;
-                        }
+                    if (this.hasClassName('not-required')) {
+                        return;
+                    }
 
-                        var typeAttr = null;
-                        if (tagName == 'input') {
-                            typeAttr = this.getAttribute('type').toLowerCase();
-                        }
-                        var valueIsEmpty = false;
-                        var scopeElement = adminSystemConfig.getScopeElement(this);
-                        if (!scopeElement || !scopeElement.checked) {
-                            if (typeAttr == 'file') {
-                                var deleteUploadedElement = adminSystemConfig.getDeleteElement(this);
-                                valueIsEmpty = !deleteUploadedElement && this.value == ''
-                                    || deleteUploadedElement && deleteUploadedElement.checked;
-                            }
-                            valueIsEmpty = valueIsEmpty
-                                || (typeAttr == 'text' || typeAttr == 'password') && this.value == ''
-                                || (tagName == 'select') && (this.getAttribute('multiple') != null)
-                                && this.getValue().length == 0
-                                || (tagName == 'select') && (this.getAttribute('multiple') == null)
-                                && this.getValue() == null;
+                    var typeAttr = null;
+                    if (tagName == 'input') {
+                        typeAttr = this.getAttribute('type').toLowerCase();
+                    }
+                    var valueIsEmpty = false;
+                    var scopeElement = adminSystemConfig.getScopeElement(this);
+                    if (!scopeElement || !scopeElement.checked) {
+                        if (typeAttr == 'file') {
+                            var deleteUploadedElement = adminSystemConfig.getDeleteElement(this);
+                            valueIsEmpty = !deleteUploadedElement && this.value == ''
+                                || deleteUploadedElement && deleteUploadedElement.checked;
                         }
+                        valueIsEmpty = valueIsEmpty
+                            || (typeAttr == 'text' || typeAttr == 'password') && this.value == ''
+                            || (tagName == 'select') && (this.getAttribute('multiple') != null)
+                            && this.getValue().length == 0
+                            || (tagName == 'select') && (this.getAttribute('multiple') == null)
+                            && this.getValue() == null;
+                    }
 
-                        if (valueIsEmpty) {
-                            if (element.value != 0) {
-                                element.value = 0;
-                                fireEvent(element, 'change');
-                            }
-                            element.disable();
+                    if (valueIsEmpty) {
+                        if (element.value != 0) {
+                            element.value = 0;
+                            fireEvent(element, 'change');
                         }
+                        element.disable();
                     }
-                } else {
-                    this.select('input,select').each(function(inputElement) {
-                        adminSystemConfig.checkRequired.call(Element.extend(inputElement), element, callback);
-                    });
                 }
-                callback(this);
+            } else {
+                this.select('input,select').each(function(inputElement) {
+                    adminSystemConfig.checkRequired.call(Element.extend(inputElement), element, callback);
+                });
             }
-        };
+            callback(this);
+        }
+    };
+
+    window.configForm = jQuery('#config-edit-form').mage('form').mage('validation', {
+        submitHandler: function(form)
+        {
+            $$('.requires').each(function(element) {
+                var scopeElement = adminSystemConfig.getScopeElement(element);
+                if (!scopeElement || !scopeElement.checked) {
+                    Element.extend(element).disabled = false;
+                }
+            });
+            jQuery(form).trigger('afterValidate');
+            form.submit();
+        }
+    });
 
+    $$('.shared').each(function(element){
+        Event.observe(element, 'change', adminSystemConfig.onchangeSharedElement);
 
-        $$('.shared').each(function(element){
-            Event.observe(element, 'change', adminSystemConfig.onchangeSharedElement);
+        // scope should be shared together with the field
+        var scopeElement = adminSystemConfig.getScopeElement(element);
+        if (scopeElement) {
+            adminSystemConfig.mapClasses(element, false, function(className) {
+                scopeElement.addClassName('shared_scope-' + className.substr(7));
+            });
+            Event.observe(scopeElement, 'change', adminSystemConfig.onchangeSharedElement);
+        }
 
-            // scope should be shared together with the field
-            var scopeElement = adminSystemConfig.getScopeElement(element);
-            if (scopeElement) {
+        // file fields should share deletion
+        if (element.tagName.toLowerCase() == 'input' && element.getAttribute('type') == 'file') {
+            var deleteUploadedElement = adminSystemConfig.getDeleteElement(element);
+            if (deleteUploadedElement) {
                 adminSystemConfig.mapClasses(element, false, function(className) {
-                    scopeElement.addClassName('shared_scope-' + className.substr(7));
+                    deleteUploadedElement.addClassName('shared_delete-' + className.substr(7));
                 });
-                Event.observe(scopeElement, 'change', adminSystemConfig.onchangeSharedElement);
+                Event.observe(deleteUploadedElement, 'change', adminSystemConfig.onchangeSharedElement);
             }
+        }
 
-            // file fields should share deletion
-            if (element.tagName.toLowerCase() == 'input' && element.getAttribute('type') == 'file') {
-                var deleteUploadedElement = adminSystemConfig.getDeleteElement(element);
-                if (deleteUploadedElement) {
-                    adminSystemConfig.mapClasses(element, false, function(className) {
-                        deleteUploadedElement.addClassName('shared_delete-' + className.substr(7));
-                    });
-                    Event.observe(deleteUploadedElement, 'change', adminSystemConfig.onchangeSharedElement);
-                }
+        // process situation, when control is complex
+        adminSystemConfig.mapClasses(element, true, function(className) {
+            var controls = adminSystemConfig.getUpTd(element).select('.' + className);
+            if (controls.length < 2) {
+                return;
             }
 
-            // process situation, when control is complex
-            adminSystemConfig.mapClasses(element, true, function(className) {
-                var controls = adminSystemConfig.getUpTd(element).select('.' + className);
-                if (controls.length < 2) {
-                    return;
-                }
-
-                var counter = 0;
-                controls.each(function(controlElement) {
-                    controlElement.removeClassName(className);
-                    controlElement.addClassName('shared_' + counter + className.substr(6));
-                    counter++;
-                });
+            var counter = 0;
+            controls.each(function(controlElement) {
+                controlElement.removeClassName(className);
+                controlElement.addClassName('shared_' + counter + className.substr(6));
+                counter++;
             });
         });
+    });
 
-        $$('.requires').each(function(element) {
-            var eventObj = {
-                'element': Element.extend(element),
-                'requires': [],
-                'callback': function(required) {},
-                checkRequirements: function() {
-                    var scopeElement = adminSystemConfig.getScopeElement(eventObj.element);
-                    if (!scopeElement || !scopeElement.checked) {
-                        eventObj.element.enable();
-                        eventObj.requires.each(function(required) {
-                            adminSystemConfig.checkRequired.call(Element.extend(required), eventObj.element, eventObj.callback);
-                        }.bind(this));
+    $$('.requires').each(function(element) {
+        var eventObj = {
+            'element': Element.extend(element),
+            'requires': [],
+            'callback': function(required) {},
+            checkRequirements: function() {
+                var scopeElement = adminSystemConfig.getScopeElement(eventObj.element);
+                if (!scopeElement || !scopeElement.checked) {
+                    eventObj.element.enable();
+                    eventObj.requires.each(function(required) {
+                        adminSystemConfig.checkRequired.call(Element.extend(required), eventObj.element, eventObj.callback);
+                    }.bind(this));
+                }
+            },
+            keydownCheckRequirements: function() {
+                window.setTimeout(eventObj.checkRequirements, 1);
+            },
+            bindCheckingObserver: function(element) {
+                if (element.tagName.toLowerCase() == 'fieldset') {
+                    Element.extend(element).select('input,select').each(function(subElement) {
+                        eventObj.bindCheckingObserver(subElement);
+                    })
+                } else {
+                    var scopeElement = adminSystemConfig.getScopeElement(element);
+                    if (scopeElement) {
+                        Event.observe(scopeElement, 'click', eventObj.checkRequirements);
                     }
-                },
-                keydownCheckRequirements: function() {
-                    window.setTimeout(eventObj.checkRequirements, 1);
-                },
-                bindCheckingObserver: function(element) {
-                    if (element.tagName.toLowerCase() == 'fieldset') {
-                        Element.extend(element).select('input,select').each(function(subElement) {
-                            eventObj.bindCheckingObserver(subElement);
-                        })
+                    Event.observe(element, 'change', eventObj.checkRequirements);
+                    Event.observe(element, 'keydown', eventObj.keydownCheckRequirements);
+                }
+            },
+            indicateEnabled: function() {
+                var labelElement = adminSystemConfig.getUpTr(eventObj.element).select('td.label label')[0];
+                if (typeof labelElement != 'undefined') {
+                    if (eventObj.element.value == 1) {
+                        labelElement.addClassName('enabled');
                     } else {
-                        var scopeElement = adminSystemConfig.getScopeElement(element);
-                        if (scopeElement) {
-                            Event.observe(scopeElement, 'click', eventObj.checkRequirements);
-                        }
-                        Event.observe(element, 'change', eventObj.checkRequirements);
-                        Event.observe(element, 'keydown', eventObj.keydownCheckRequirements);
-                    }
-                },
-                indicateEnabled: function() {
-                    var labelElement = adminSystemConfig.getUpTr(eventObj.element).select('td.label label')[0];
-                    if (typeof labelElement != 'undefined') {
-                        if (eventObj.element.value == 1) {
-                            labelElement.addClassName('enabled');
-                        } else {
-                            labelElement.removeClassName('enabled');
-                        }
+                        labelElement.removeClassName('enabled');
                     }
                 }
-            };
-
-            // fill eventObj with required elements
-            adminSystemConfig.mapClasses(element, false, function(className) {
-                var requiredElement = Element.extend(document.getElementById(className.substr(9)));
-                if (requiredElement) {
-                    eventObj.requires.push(requiredElement);
-                }
-            }, 'requires');
-            Element.extend(element).requiresObj = eventObj;
+            }
+        };
 
-            // replacing "Use Default" action with checking requirements
-            var scopeElement = adminSystemConfig.getScopeElement(element);
-            if (scopeElement) {
-                Event.stopObserving(scopeElement, 'click');
-                Event.observe(scopeElement, 'click', function(event) {
-                    toggleValueElements(scopeElement, Element.previous(scopeElement.parentNode));
-                    eventObj.checkRequirements();
-                });
+        // fill eventObj with required elements
+        adminSystemConfig.mapClasses(element, false, function(className) {
+            var requiredElement = Element.extend(document.getElementById(className.substr(9)));
+            if (requiredElement) {
+                eventObj.requires.push(requiredElement);
             }
+        }, 'requires');
+        Element.extend(element).requiresObj = eventObj;
 
-            // binding events
-            eventObj.requires.each(function(required) {
-                eventObj.bindCheckingObserver(required);
+        // replacing "Use Default" action with checking requirements
+        var scopeElement = adminSystemConfig.getScopeElement(element);
+        if (scopeElement) {
+            Event.stopObserving(scopeElement, 'click');
+            Event.observe(scopeElement, 'click', function(event) {
+                toggleValueElements(scopeElement, Element.previous(scopeElement.parentNode));
+                eventObj.checkRequirements();
             });
-            Event.observe(eventObj.element, 'change', eventObj.indicateEnabled);
-            eventObj.checkRequirements();
-            eventObj.indicateEnabled();
+        }
+
+        // binding events
+        eventObj.requires.each(function(required) {
+            eventObj.bindCheckingObserver(required);
         });
+        Event.observe(eventObj.element, 'change', eventObj.indicateEnabled);
+        eventObj.checkRequirements();
+        eventObj.indicateEnabled();
+    });
 
-        var handleHash = function () {
-            if (window.location.hash == '') {
-                return false;
+    var handleHash = function () {
+        if (window.location.hash == '') {
+            return false;
+        }
+        try {
+            var hashString = window.location.hash.replace('#', ''),
+                containerId = hashString.replace('-link', ''),
+                state = jQuery('#' + containerId + '-state'),
+                head = jQuery('#' + containerId + '-head');
+            if (state.length) {
+                state.val(1);
             }
-            try {
-                var hashString = window.location.hash.replace('#', ''),
-                    containerId = hashString.replace('-link', ''),
-                    state = jQuery('#' + containerId + '-state'),
-                    head = jQuery('#' + containerId + '-head');
-                if (state.length) {
-                    state.val(1);
-                }
-                if (head.length) {
-                    head.collapsed = 0;
-                }
-                Fieldset.applyCollapse(containerId);
-            } catch(err) {
+            if (head.length) {
+                head.collapsed = 0;
             }
-            return false;
-        };
+            Fieldset.applyCollapse(containerId);
+        } catch(err) {
+        }
+        return false;
+    };
 
-        jQuery(window).hashchange(handleHash);
-        handleHash();
+    jQuery(window).hashchange(handleHash);
+    handleHash();
 
-    });
-    
-    jQuery(window).load(function(){jQuery('body').trigger('adminConfigDefined')})
+    registry.set('adminSystemConfig', adminSystemConfig);
 });
 </script>