diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
index b32ec5faec9e3d8db71033a1c2a530a6095071a4..558b7d6585b91aad264a95389f12ea999463182a 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
@@ -11,9 +11,19 @@ define(
         '../model/address-converter',
         '../action/select-shipping-address',
         './postcode-validator',
-        'mage/translate'
+        'mage/translate',
+        'uiRegistry'
     ],
-    function ($, ko, shippingRatesValidationRules, addressConverter, selectShippingAddress, postcodeValidator, $t) {
+    function (
+        $,
+        ko,
+        shippingRatesValidationRules,
+        addressConverter,
+        selectShippingAddress,
+        postcodeValidator,
+        $t,
+        uiRegistry
+    ) {
         'use strict';
 
         var checkoutConfig = window.checkoutConfig,
@@ -45,26 +55,52 @@ define(
                 });
             },
 
+            /**
+             * Perform postponed binding for fieldset elements
+             *
+             * @param {String} formPath
+             */
+            initFields: function (formPath) {
+                var self = this,
+                    elements = shippingRatesValidationRules.getObservableFields();
+
+                $.each(elements, function (index, field) {
+                    uiRegistry.async(formPath + '.' + field)(self.doElementBinding.bind(self));
+                });
+            },
+
+            /**
+             * Bind shipping rates request to form element
+             *
+             * @param {Object} element
+             * @param {Boolean} force
+             * @param {Number} delay
+             */
+            doElementBinding: function (element, force, delay) {
+                var observableFields = shippingRatesValidationRules.getObservableFields();
+
+                if (element && (observableFields.indexOf(element.index) !== -1 || force)) {
+                    if (element.index !== 'postcode') {
+                        this.bindHandler(element, delay);
+                    }
+                }
+
+                if (element.index === 'postcode') {
+                    this.bindHandler(element, delay);
+                    postcodeElement = element;
+                }
+            },
+
             /**
              * @param {*} elements
              * @param {Boolean} force
              * @param {Number} delay
              */
             bindChangeHandlers: function (elements, force, delay) {
-                var self = this,
-                    observableFields = shippingRatesValidationRules.getObservableFields();
+                var self = this;
 
                 $.each(elements, function (index, elem) {
-                    if (elem && (observableFields.indexOf(elem.index) !== -1 || force)) {
-                        if (elem.index !== 'postcode') {
-                            self.bindHandler(elem, delay);
-                        }
-                    }
-
-                    if (elem.index === 'postcode') {
-                        self.bindHandler(elem, delay);
-                        postcodeElement = elem;
-                    }
+                    self.doElementBinding(elem, force, delay);
                 });
             },
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
index 7392072a37667632271911d1b6315c45405e20c2..5ca6c2bd5d87a8bcebff956eab09dc9a01e04cb2 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
@@ -75,9 +75,11 @@ define(
              */
             initialize: function () {
                 var self = this,
-                    hasNewAddress;
+                    hasNewAddress,
+                    fieldsetName = 'checkout.steps.shipping-step.shippingAddress.shipping-address-fieldset';
 
                 this._super();
+                shippingRatesValidator.initFields(fieldsetName);
 
                 if (!quote.isVirtual()) {
                     stepNavigator.registerStep(
@@ -130,15 +132,6 @@ define(
                 //load data from server for shipping step
             },
 
-            /**
-             * @param {Object} element
-             */
-            initElement: function (element) {
-                if (element.index === 'shipping-address-fieldset') {
-                    shippingRatesValidator.bindChangeHandlers(element.elems(), false);
-                }
-            },
-
             /**
              * @return {*}
              */
diff --git a/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php b/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
index 648a53388bdd623d900860a230f738b6e9912d68..ca520a6a0acafcf06033ec0b727439423fd8cc1a 100644
--- a/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
+++ b/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
@@ -32,7 +32,6 @@ class Validation
      * @param \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
      * @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
-     * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator,
@@ -48,7 +47,7 @@ class Validation
      * @param \Magento\Checkout\Api\PaymentInformationManagementInterface $subject
      * @param int $cartId
      * @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
-     * @param \Magento\Quote\Api\Data\AddressInterface $billingAddress
+     * @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -56,7 +55,7 @@ class Validation
         \Magento\Checkout\Api\PaymentInformationManagementInterface $subject,
         $cartId,
         \Magento\Quote\Api\Data\PaymentInterface $paymentMethod,
-        \Magento\Quote\Api\Data\AddressInterface $billingAddress
+        \Magento\Quote\Api\Data\AddressInterface $billingAddress = null
     ) {
         if ($this->isAgreementEnabled()) {
             $this->validateAgreements($paymentMethod->getExtensionAttributes()->getAgreementIds());
@@ -67,7 +66,7 @@ class Validation
      * @param \Magento\Checkout\Api\PaymentInformationManagementInterface $subject
      * @param int $cartId
      * @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
-     * @param \Magento\Quote\Api\Data\AddressInterface $billingAddress
+     * @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -75,7 +74,7 @@ class Validation
         \Magento\Checkout\Api\PaymentInformationManagementInterface $subject,
         $cartId,
         \Magento\Quote\Api\Data\PaymentInterface $paymentMethod,
-        \Magento\Quote\Api\Data\AddressInterface $billingAddress
+        \Magento\Quote\Api\Data\AddressInterface $billingAddress = null
     ) {
         if ($this->isAgreementEnabled()) {
             $this->validateAgreements($paymentMethod->getExtensionAttributes()->getAgreementIds());
diff --git a/app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php b/app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php
index a3d0507c394850f171d312467e4b5757a905bb02..f09195d0a34d650250dd4db2e84e7173b8ae9ac6 100644
--- a/app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php
+++ b/app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php
@@ -62,7 +62,7 @@ class SaveHandler
         /** @var \Magento\Quote\Model\Quote $quote */
         // Quote Item processing
         $items = $quote->getItems();
-        if ($items) {
+        if ($items && $quote->getIsActive()) {
             foreach ($items as $item) {
                 /** @var \Magento\Quote\Model\Quote\Item $item */
                 if (!$item->isDeleted()) {
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/SaveHandlerTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/SaveHandlerTest.php
index 76504b5064a2b987219c7df8dcf0ca61a18e9246..da6154bc9c1a69e9f454977442304069421e6872 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/SaveHandlerTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/SaveHandlerTest.php
@@ -120,7 +120,7 @@ class SaveHandlerTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->itemMock);
         $this->quoteMock->expects($this->once())->method('setLastAddedItem')->with($this->itemMock);
         $this->quoteMock->expects($this->once())->method('getBillingAddress')->willReturn($this->billingAddressMock);
-        $this->quoteMock->expects($this->once())->method('getIsActive')->willReturn(true);
+        $this->quoteMock->expects($this->exactly(2))->method('getIsActive')->willReturn(true);
         $this->billingAddressPersister
             ->expects($this->once())
             ->method('save')
diff --git a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
index a52cd4430228423831af97f368198c2179285361..65bba35bfa986566fdb7d0012181235b255fd5fe 100644
--- a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
@@ -17,7 +17,6 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
      */
     public function testSubmit()
     {
-        $this->markTestSkipped('MAGETWO-50989');
         /**
          * Preconditions:
          * Load quote with Bundle product that has at least to child products