diff --git a/app/code/Magento/Bundle/Model/Plugin/QuoteItem.php b/app/code/Magento/Bundle/Model/Plugin/QuoteItem.php
index 0ed1f9390ce3db6548fd52874fd16254023d17bd..2b75f6081ea37c968f74866dadf1021ca7058b5e 100644
--- a/app/code/Magento/Bundle/Model/Plugin/QuoteItem.php
+++ b/app/code/Magento/Bundle/Model/Plugin/QuoteItem.php
@@ -23,7 +23,7 @@ class QuoteItem
         \Magento\Quote\Model\Quote\Item\ToOrderItem $subject,
         Closure $proceed,
         \Magento\Quote\Model\Quote\Item\AbstractItem $item,
-        $additional
+        $additional = []
     ) {
         /** @var $orderItem \Magento\Sales\Model\Order\Item */
         $orderItem = $proceed($item, $additional);
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/addtocart.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/addtocart.phtml
index d886aa4075423e5db4d1d22bb3eb70936cedb56f..c87b5550505d3cb4a8db06bbb3dda2a0cd2fd8b9 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/addtocart.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/addtocart.phtml
@@ -45,7 +45,8 @@
 <script>
 require([
     "jquery",
-    "mage/mage"
+    "mage/mage",
+    "Magento_Catalog/product/view/validation"
 ], function($){
     $('#product_addtocart_form').mage('validation', {
         radioCheckboxClosest: '.nested'
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-order-review.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-order-review.js
index c3c6b12819d96358cc13b4e61ceb3a1bb0dbab53..cda76773ef3c4ebe4f6b654886833425f5630486 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-order-review.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-order-review.js
@@ -37,8 +37,7 @@ define([
             var isAgreementValid = true;
             agreementFormsGroup.find('form').each(
                 function(){
-                    $(this).validation();
-                    isAgreementValid = isAgreementValid && $(this).validation && $(this).validation('isValid');
+                    isAgreementValid = $(this).validation() && $(this).validation('isValid') && isAgreementValid;
                 }
             );
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/overview.js b/app/code/Magento/Checkout/view/frontend/web/js/overview.js
index 4ce29e190e4e2b5211de126dd5c0bf36e5111a77..94f918b73e64335f4d1d624959083620151f9afe 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/overview.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/overview.js
@@ -11,13 +11,12 @@ define([
     "mage/translate"
 ], function($){
     "use strict";
-    
+
     $.widget('mage.orderOverview', {
         options: {
             opacity: 0.5, // CSS opacity for the 'Place Order' button when it's clicked and then disabled.
             pleaseWaitLoader: 'span.please-wait', // 'Submitting order information...' Ajax loader.
-            placeOrderSubmit: 'button[type="submit"]', // The 'Place Order' button.
-            agreements: '#checkout-agreements' // Container for all of the checkout agreements and terms/conditions
+            placeOrderSubmit: 'button[type="submit"]' // The 'Place Order' button.
         },
 
         /**
@@ -29,14 +28,12 @@ define([
         },
 
         /**
-         * Verify that all agreements and terms/conditions are checked. Show the Ajax loader. Disable
-         * the submit button (i.e. Place Order).
+         * Show the Ajax loader. Disable the submit button (i.e. Place Order).
          * @return {Boolean}
          * @private
          */
         _showLoader: function() {
-            if ($(this.options.agreements).find('input[type="checkbox"]:not(:checked)').length > 0) {
-                alert($.mage.__('Please agree to all Terms and Conditions before placing the orders.'));
+            if (!this.element.validation('isValid')) {
                 return false;
             }
             this.element.find(this.options.pleaseWaitLoader).show().end()
@@ -44,6 +41,6 @@ define([
             return true;
         }
     });
-    
+
     return $.mage.orderOverview;
 });
\ No newline at end of file
diff --git a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
index 50d342810398444f459099af8981fcd8dd34886b..88428925113461785c135c7a63fb0b08e670736c 100644
--- a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
+++ b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
@@ -604,10 +604,10 @@ class Multishipping extends \Magento\Framework\Object
         if ($address->getAddressType() == 'billing') {
             $order->setIsVirtual(1);
         } else {
-            $order->setShippingAddress($this->quoteAddressToOrderAddress->addressToOrderAddress($address));
+            $order->setShippingAddress($this->quoteAddressToOrderAddress->convert($address));
         }
 
-        $order->setPayment($this->quotePaymentToOrderPayment->paymentToOrderPayment($quote->getPayment()));
+        $order->setPayment($this->quotePaymentToOrderPayment->convert($quote->getPayment()));
         if ($this->priceCurrency->round($address->getGrandTotal()) == 0) {
             $order->getPayment()->setMethod('free');
         }
@@ -622,7 +622,7 @@ class Multishipping extends \Magento\Framework\Object
             )->setProductOptions(
                 $_quoteItem->getProduct()->getTypeInstance()->getOrderOptions($_quoteItem->getProduct())
             );
-            $orderItem = $this->quoteItemToOrderItem->itemToOrderItem($item);
+            $orderItem = $this->quoteItemToOrderItem->convert($_quoteItem);
             if ($item->getParentItem()) {
                 $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
             }
diff --git a/app/code/Magento/Multishipping/view/frontend/templates/checkout/overview.phtml b/app/code/Magento/Multishipping/view/frontend/templates/checkout/overview.phtml
index 79b0fb5b282c3333b8a6d08b934a28dd2c9dd9a5..2fe3cff1efe414ffe1c30721f2620ee3f1c85d30 100644
--- a/app/code/Magento/Multishipping/view/frontend/templates/checkout/overview.phtml
+++ b/app/code/Magento/Multishipping/view/frontend/templates/checkout/overview.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 ?>
-<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="review-order-form" data-mage-init='{"orderOverview": {}}' class="form multicheckout order-review">
+<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="review-order-form" data-mage-init='{"orderOverview": {}, "validation":{}}' class="form multicheckout order-review">
     <?php echo $this->getBlockHtml('formkey'); ?>
     <div class="block block-billing">
         <div class="block-title"><strong><?php echo __('Billing Information') ?></strong></div>
diff --git a/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php b/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
index 5db47dec6ea8fefee047dd95d3508c231f6f0db7..3bd9d085df8a3bf687e828f3c0d6a8cfb86eda32 100644
--- a/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
+++ b/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
@@ -22,7 +22,7 @@ class ToOrderConverter
      * @param array $additional
      * @return array
      */
-    public function beforeConvert(QuoteAddressToOrder $subject, QuoteAddress $address, $additional)
+    public function beforeConvert(QuoteAddressToOrder $subject, QuoteAddress $address, $additional = [])
     {
         $this->quoteAddress = $address;
         return [$address, $additional];
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/CustomerInjectable.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/CustomerInjectable.php
index 8154cf0f2186fa1755228078d7b1a21458e99e5e..1e369f4420ab02afef8680ab4a8d67ff18dd3a5c 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/CustomerInjectable.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/CustomerInjectable.php
@@ -19,6 +19,7 @@ class CustomerInjectable extends AbstractRepository
      * @param array $defaultData
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function __construct(array $defaultConfig = [], array $defaultData = [])
     {
@@ -116,5 +117,15 @@ class CustomerInjectable extends AbstractRepository
             'password_confirmation' => '123123q',
             'address' => ['presets' => 'US_address_TX'],
         ];
+
+        $this->_data['johndoe_with_multiple_addresses'] = [
+            'firstname' => 'John',
+            'lastname' => 'Doe',
+            'group_id' => ['dataSet' => 'General'],
+            'email' => 'JohnDoe_%isolation%@example.com',
+            'password' => '123123q',
+            'password_confirmation' => '123123q',
+            'address' => ['presets' => 'US_address_NY, US_address'],
+        ];
     }
 }