diff --git a/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Captcha/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Captcha/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Checkout/Block/Cart.php b/app/code/Magento/Checkout/Block/Cart.php
index f2a8c2fda5df15e3099520ef593bdea6a4a1c5ee..4a788f5725a1a7516f662d351674d943dae4f20f 100644
--- a/app/code/Magento/Checkout/Block/Cart.php
+++ b/app/code/Magento/Checkout/Block/Cart.php
@@ -144,7 +144,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart
      */
     public function getCheckoutUrl()
     {
-        return $this->getUrl('checkout/onepage', ['_secure' => true]);
+        return $this->getUrl('checkout', ['_secure' => true]);
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Block/Cart/Sidebar.php b/app/code/Magento/Checkout/Block/Cart/Sidebar.php
index a754a3c6582c58f3a1dcd4ec8f90f234a2ffaeff..73446f90f7b0152fe43c0313f90a26bbcc465ec6 100644
--- a/app/code/Magento/Checkout/Block/Cart/Sidebar.php
+++ b/app/code/Magento/Checkout/Block/Cart/Sidebar.php
@@ -88,7 +88,7 @@ class Sidebar extends AbstractCart
      */
     public function getCheckoutUrl()
     {
-        return $this->getUrl('checkout/onepage');
+        return $this->getUrl('checkout');
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Block/Checkout/LayoutProcessor.php b/app/code/Magento/Checkout/Block/Checkout/LayoutProcessor.php
index 20332513a009f078db5fc7cd3468894ccaaac593..688fd6e2ef48f99374570f391979522fc69d97dd 100644
--- a/app/code/Magento/Checkout/Block/Checkout/LayoutProcessor.php
+++ b/app/code/Magento/Checkout/Block/Checkout/LayoutProcessor.php
@@ -48,7 +48,7 @@ class LayoutProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcesso
         /** @var \Magento\Eav\Api\Data\AttributeInterface[] $attributes */
         $attributes = $this->attributeMetadataDataProvider->loadAttributesCollection(
             'customer_address',
-            'customer_register_address'
+            'customer_address_edit'
         );
 
         $elements = [];
@@ -63,6 +63,12 @@ class LayoutProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcesso
         if (isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
             ['payment']['children']
         )) {
+            if (!isset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
+                ['payment']['children']['payments-list']['children'])) {
+                $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
+                ['payment']['children']['payments-list']['children'] = [];
+            }
+
             $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
             ['payment']['children']['payments-list']['children'] =
                 array_merge_recursive(
@@ -111,6 +117,7 @@ class LayoutProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcesso
                     'component' => 'Magento_Checkout/js/view/billing-address',
                     'displayArea' => 'billing-address-form-' . $paymentCode,
                     'provider' => 'checkoutProvider',
+                    'deps' => 'checkoutProvider',
                     'dataScopePrefix' => 'billingAddress' . $paymentCode,
                     'sortOrder' => 1,
                     'children' => [
diff --git a/app/code/Magento/Checkout/Block/Onepage/Link.php b/app/code/Magento/Checkout/Block/Onepage/Link.php
index b6b6c0f841e7efd10f9396e936af8416957b5f98..6274b03cd942a684aff9439989d198b2fd2b4d05 100644
--- a/app/code/Magento/Checkout/Block/Onepage/Link.php
+++ b/app/code/Magento/Checkout/Block/Onepage/Link.php
@@ -45,7 +45,7 @@ class Link extends \Magento\Framework\View\Element\Template
      */
     public function getCheckoutUrl()
     {
-        return $this->getUrl('checkout/onepage');
+        return $this->getUrl('checkout');
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Controller/Onepage/Index.php b/app/code/Magento/Checkout/Controller/Index/Index.php
similarity index 97%
rename from app/code/Magento/Checkout/Controller/Onepage/Index.php
rename to app/code/Magento/Checkout/Controller/Index/Index.php
index 7fa9fa794c5fb5ab4441324cc716e26bec15c987..518ae5e30eba92474f64ef5c3561dbd43b375a98 100644
--- a/app/code/Magento/Checkout/Controller/Onepage/Index.php
+++ b/app/code/Magento/Checkout/Controller/Index/Index.php
@@ -4,7 +4,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Checkout\Controller\Onepage;
+namespace Magento\Checkout\Controller\Index;
 
 class Index extends \Magento\Checkout\Controller\Onepage
 {
diff --git a/app/code/Magento/Checkout/Controller/Onepage.php b/app/code/Magento/Checkout/Controller/Onepage.php
index 2257347e9150ba0993f4b04e12a59019744152c1..0830d37486b33d6e0173d44b35a2700329718b19 100644
--- a/app/code/Magento/Checkout/Controller/Onepage.php
+++ b/app/code/Magento/Checkout/Controller/Onepage.php
@@ -180,14 +180,14 @@ class Onepage extends Action
     {
         $quote = $this->getOnepage()->getQuote();
         if (!$quote->hasItems() || $quote->getHasError() || !$quote->validateMinimumAmount()) {
-            return false;
+            return true;
         }
         $action = $this->getRequest()->getActionName();
         if ($this->_objectManager->get('Magento\Checkout\Model\Session')->getCartWasUpdated(true)
             &&
             !in_array($action, ['index', 'progress'])
         ) {
-            return false;
+            return true;
         }
 
         return false;
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
similarity index 97%
rename from app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php
rename to app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
index 5159d70026cbc5c902e6adc3c3b80d21e22ea64e..c0f13dc40942fb901ec9722a0d1da841398463f4 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
@@ -1,12 +1,12 @@
 <?php
 /**
- * Test for \Magento\Checkout\Controller\Onepage\Index
+ * Test for \Magento\Checkout\Controller\Index\Index
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Checkout\Test\Unit\Controller\Onepage;
+namespace Magento\Checkout\Test\Unit\Controller\Index;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManager;
 
@@ -71,7 +71,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     private $redirectMock;
 
     /**
-     * @var \Magento\Checkout\Controller\Onepage\Index
+     * @var \Magento\Checkout\Controller\Index\Index
      */
     private $model;
 
@@ -171,7 +171,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
         // SUT
         $this->model = $this->objectManager->getObject(
-            'Magento\Checkout\Controller\Onepage\Index',
+            'Magento\Checkout\Controller\Index\Index',
             [
                 'context' => $this->contextMock,
                 'customerSession' => $this->sessionMock,
diff --git a/app/code/Magento/Checkout/etc/frontend/di.xml b/app/code/Magento/Checkout/etc/frontend/di.xml
index 20f146cc353ce63add45e00f3fc083c28cdb2768..7afa91b1a8bbdebc03e2000313237bdbea622b34 100644
--- a/app/code/Magento/Checkout/etc/frontend/di.xml
+++ b/app/code/Magento/Checkout/etc/frontend/di.xml
@@ -10,7 +10,7 @@
     <type name="Magento\Framework\Url\SecurityInfo">
         <arguments>
             <argument name="secureUrlList" xsi:type="array">
-                <item name="checkout_onepage" xsi:type="string">/checkout/onepage</item>
+                <item name="checkout_index" xsi:type="string">/checkout</item>
             </argument>
         </arguments>
     </type>
diff --git a/app/code/Magento/Checkout/etc/frontend/page_types.xml b/app/code/Magento/Checkout/etc/frontend/page_types.xml
index dc770ab1d1bb794e1de7d404ce9ea6a132badb4f..88d2dc95d584c0b24057cb04835c42bb980e5055 100644
--- a/app/code/Magento/Checkout/etc/frontend/page_types.xml
+++ b/app/code/Magento/Checkout/etc/frontend/page_types.xml
@@ -9,7 +9,7 @@
     <type id="checkout_cart_configure" label="Configure Cart Item (Any)"/>
     <type id="checkout_cart_index" label="Shopping Cart"/>
     <type id="checkout_onepage_failure" label="One Page Checkout Failure"/>
-    <type id="checkout_onepage_index" label="One Page Checkout"/>
+    <type id="checkout_index_index" label="One Page Checkout"/>
     <type id="checkout_onepage_paymentmethod" label="One Page Checkout Choose Payment Method"/>
     <type id="checkout_onepage_review" label="One Page Checkout Overview"/>
     <type id="checkout_onepage_shippingmethod" label="One Page Checkout Choose Shipping Method"/>
diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
similarity index 94%
rename from app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
index a40e65477410eef2cfebf8e9c39203ed88070605..53e7f188ab0f6ddcd0a5f8b56aa960b3db8f489b 100644
--- a/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_index.xml
+++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
@@ -16,6 +16,9 @@
                                 <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>
                                 <item name="config" xsi:type="array">
                                     <item name="provider" xsi:type="string">checkoutProvider</item>
+                                    <item name="deps" xsi:type="array">
+                                        <item name="0" xsi:type="string">checkoutProvider</item>
+                                    </item>
                                     <item name="template" xsi:type="string">ui/form/field</item>
                                     <item name="elementTmpl" xsi:type="string">ui/form/element/input</item>
                                 </item>
@@ -46,6 +49,14 @@
                                         <item name="component" xsi:type="string">Magento_Checkout/js/view/progress-bar</item>
                                         <item name="displayArea" xsi:type="string">progressBar</item>
                                     </item>
+                                    <item name="estimation" xsi:type="array">
+                                        <item name="sortOrder" xsi:type="string">10</item>
+                                        <item name="component" xsi:type="string">Magento_Checkout/js/view/estimation</item>
+                                        <item name="displayArea" xsi:type="string">estimation</item>
+                                        <item name="config" xsi:type="array">
+                                            <item name="template" xsi:type="string">Magento_Checkout/estimation</item>
+                                        </item>
+                                    </item>
                                     <item name="steps" xsi:type="array">
                                         <item name="component" xsi:type="string">uiComponent</item>
                                         <item name="displayArea" xsi:type="string">steps</item>
@@ -66,7 +77,10 @@
                                                     </item>
                                                     <item name="shippingAddress" xsi:type="array">
                                                         <item name="config" xsi:type="array">
-                                                            <item name="deps" xsi:type="string">checkout.steps.shipping-step.step-config</item>
+                                                            <item name="deps" xsi:type="array">
+                                                                <item name="0" xsi:type="string">checkout.steps.shipping-step.step-config</item>
+                                                                <item name="1" xsi:type="string">checkoutProvider</item>
+                                                            </item>
                                                             <item name="popUpForm" xsi:type="array">
                                                                 <item name="element" xsi:type="string">#opc-new-shipping-address</item>
                                                                 <item name="options" xsi:type="array">
@@ -149,6 +163,11 @@
                                                             </item>
                                                             <item name="shipping-address-fieldset" xsi:type="array">
                                                                 <item name="component" xsi:type="string">uiComponent</item>
+                                                                <item name="config" xsi:type="array">
+                                                                    <item name="deps" xsi:type="array">
+                                                                        <item name="0" xsi:type="string">checkoutProvider</item>
+                                                                    </item>
+                                                                </item>
                                                                 <item name="displayArea" xsi:type="string">additional-fieldsets</item>
                                                                 <item name="children" xsi:type="array">
                                                                      <!-- The following items override configuration of corresponding address attributes -->
@@ -353,6 +372,9 @@
                                     </item>
                                     <item name="shipping-information" xsi:type="array">
                                         <item name="component" xsi:type="string">Magento_Checkout/js/view/shipping-information</item>
+                                        <item name="config" xsi:type="array">
+                                            <item name="deps" xsi:type="string">checkout.steps.shipping-step.shippingAddress</item>
+                                        </item>
                                         <item name="displayArea" xsi:type="string">shipping-information</item>
                                         <item name="children" xsi:type="array">
                                             <item name="ship-to" xsi:type="array">
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/select-shipping-address.js b/app/code/Magento/Checkout/view/frontend/web/js/action/select-shipping-address.js
index 5247cef00fb03ac61bf36e29f7e6655fee7605cd..a8d1e6d38be27d054ca80636f988009ff66e87fb 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/select-shipping-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/select-shipping-address.js
@@ -14,6 +14,10 @@ define(
         });
         return function(shippingAddress) {
             quote.shippingAddress(shippingAddress);
+            //set billing address same as shipping by default if it is not empty
+            if (shippingAddress.countryId != undefined && shippingAddress.canUseForBilling()) {
+                quote.billingAddress(shippingAddress);
+            }
         };
     }
 );
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
index 2ca86001d726002b81df9f2c6adc83bac7443080..5f6dbfed0b8daf38953cd4d3b389fbe5668de728 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
@@ -18,7 +18,8 @@ define(
     function (ko, Component, customer, addressList, quote, createBillingAddress, selectBillingAddress, $t) {
         "use strict";
 
-        var newAddressOption = {
+        var lastSelectedBillingAddress = null,
+            newAddressOption = {
             getAddressInline: function() {
                 return $t('New Address');
             },
@@ -71,6 +72,8 @@ define(
                     selectBillingAddress(quote.shippingAddress());
                     this.isAddressDetailsVisible(true);
                 } else {
+                    lastSelectedBillingAddress = quote.billingAddress();
+                    quote.billingAddress(null);
                     this.isAddressDetailsVisible(false);
                 }
                 return true;
@@ -97,10 +100,13 @@ define(
             },
 
             editAddress: function () {
+                lastSelectedBillingAddress = quote.billingAddress();
+                quote.billingAddress(null);
                 this.isAddressDetailsVisible(false);
             },
 
             cancelAddressEdit: function () {
+                this.restoreBillingAddress();
                 if (quote.billingAddress()) {
                     // restore 'Same As Shipping' checkbox state
                     this.isAddressSameAsShipping(
@@ -110,6 +116,12 @@ define(
                 }
             },
 
+            restoreBillingAddress: function() {
+                if (lastSelectedBillingAddress != null) {
+                    selectBillingAddress(lastSelectedBillingAddress);
+                }
+            },
+
             onAddressChange: function (address) {
                 this.isAddressFormVisible(address == newAddressOption);
             }
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/authentication.js b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/authentication.js
index 0985d990a697bde35a780beb7d318895548e9103..5120078c77dedaf030e49eabe90b24f1333ab504 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/authentication.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/authentication.js
@@ -63,7 +63,7 @@ define(
                     && $(loginForm).validation('isValid')
                 ) {
                     this.isLoading(true);
-                    loginAction(loginData);
+                    loginAction(loginData, null, false);
                 }
             }
         });
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
new file mode 100644
index 0000000000000000000000000000000000000000..23babcd44d8f9f1f7d870db9683ea771b6ab477d
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
@@ -0,0 +1,32 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define(
+    [
+        'Magento_Checkout/js/view/summary/abstract-total',
+        'Magento_Checkout/js/model/totals'
+    ],
+    function (Component, totals) {
+        'use strict';
+        return Component.extend({
+            getQuantity: function() {
+                if (totals.totals()) {
+                    return parseFloat(totals.totals().items_qty);
+                }
+                return 0;
+            },
+            getPureValue: function() {
+                if (totals.totals()) {
+                    return parseFloat(totals.getSegment('grand_total').value);
+                }
+                return 0;
+            },
+            getValue: function () {
+                return this.getFormattedPrice(this.getPureValue());
+            }
+
+        });
+    }
+);
+
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
index 7fa9e10b69a781d1f9afc86bc79ae7cc39c388d7..1734a79d09f5490d746e13a4d60eb524ba60f664 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
@@ -17,6 +17,7 @@ define(
         'use strict';
         return Component.extend({
             redirectAfterPlaceOrder: true,
+            isPlaceOrderActionAllowed: ko.observable(true),
             /**
              * Initialize view.
              *
@@ -24,6 +25,11 @@ define(
              */
             initialize: function () {
                 this._super().initChildren();
+
+                quote.billingAddress.subscribe(function(address) {
+                    this.isPlaceOrderActionAllowed((address !== null));
+                }, this);
+
                 return this;
             },
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/summary/cart-items.js b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/cart-items.js
index 0a41d2b46f2bfe4ec67d75d470b261e7fe7f3626..27c2030062bd11d4c81ce4cfc46a07de1930957e 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/summary/cart-items.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/cart-items.js
@@ -21,7 +21,7 @@ define(
             totals: totals.totals(),
             getItems: totals.getItems(),
             getItemsQty: function() {
-                return parseInt(this.totals.items_qty) || 0;
+                return parseFloat(this.totals.items_qty);
             },
             isItemsBlockExpanded: function () {
                 return quote.isVirtual() || stepNavigator.isProcessed('shipping');
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/summary/item/details.js b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/item/details.js
index 1c965b0d5701be6269b412b9e825d1499531acca..a28a6bb32d4b119a410d9898b09597eebba25e9d 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/summary/item/details.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/item/details.js
@@ -6,11 +6,9 @@
 /*global alert*/
 define(
     [
-        'uiComponent',
-        '../../../model/quote',
-        'Magento_Catalog/js/price-utils'
+        'uiComponent'
     ],
-    function (Component, quote, priceUtils) {
+    function (Component) {
         "use strict";
         return Component.extend({
             defaults: {
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
new file mode 100644
index 0000000000000000000000000000000000000000..cf7da50e0af9248969c207b40e64788af554f8cd
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
@@ -0,0 +1,19 @@
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<div class="opc-estimated-wrapper">
+    <div class="estimated-block">
+        <span class="estimated-label" data-bind="text: $t('Estimated Total')"></span>
+        <span class="estimated-price" data-bind="text: getValue()">$120.00</span>
+    </div>
+    <div class="minicart-wrapper">
+        <button type="button" class="action showcart" data-toggle="opc-summary">
+            <span class="counter qty">
+                <span class="counter-number" data-bind="text: getQuantity()"></span>
+            </span>
+        </button>
+    </div>
+</div>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/onepage.html b/app/code/Magento/Checkout/view/frontend/web/template/onepage.html
index 51b80426e5dd4a8fc930916241602f4d28da9681..13e7c4933c0def245a4a8047455518df29fdbbc1 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/onepage.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/onepage.html
@@ -12,29 +12,9 @@
 <!-- ko template: getTemplate() --><!-- /ko -->
 <!--/ko-->
 
-<!-- Temp MAGETWO-36025 markup -->
-<div class="opc-estimated-wrapper">
-<!-- Markup for MAGETWO-38644 -->
-    <div class="estimated-block">
-        <span class="estimated-label" data-bind="text: $t('Estimated Total')"></span>
-        <span class="estimated-price">$100.00</span>
-    </div>
-    <div class="minicart-wrapper">
-        <button type="button" class="action showcart" data-toggle="opc-summary">
-            <span class="counter qty">
-                <span class="counter-number">6</span>
-            </span>
-        </button>
-    </div>
-    <!-- Temp MAGETWO-36025 markup
-    <button
-        type="button"
-        class="action showcart"
-        data-toggle="opc-summary">
-        <span data-bind="text: $t('View order summary')"></span>
-    </button>-->
-</div>
-<!-- /Temp MAGETWO-36025 markup -->
+<!-- ko foreach: getRegion('estimation') -->
+    <!-- ko template: getTemplate() --><!-- /ko -->
+<!--/ko-->
 
 <!-- ko foreach: getRegion('messages') -->
     <!-- ko template: getTemplate() --><!-- /ko -->
diff --git a/app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_onepage_original.xml b/app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_onepage_original.xml
deleted file mode 100644
index 89eb6278a7646836ff461eb6955899faae9b5fb9..0000000000000000000000000000000000000000
--- a/app/code/Magento/CheckoutAgreements/view/frontend/layout/checkout_onepage_original.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<!-- TODO remove this file as soon as enhanced checkout is implemented -->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
-    <body>
-        <referenceBlock name="checkout.root">
-            <arguments>
-                <argument name="jsLayout" xsi:type="array">
-                    <item name="components" xsi:type="array">
-                        <item name="checkout" xsi:type="array">
-                            <item name="children" xsi:type="array">
-                                <item name="steps" xsi:type="array">
-                                    <item name="children" xsi:type="array">
-                                        <item name="review" xsi:type="array">
-                                            <item name="children" xsi:type="array">
-                                                <item name="beforePlaceOrder" xsi:type="array">
-                                                    <item name="children" xsi:type="array">
-                                                        <item name="checkoutAgreements" xsi:type="array">
-                                                            <item name="component"  xsi:type="string">Magento_CheckoutAgreements/js/view/checkoutAgreements</item>
-                                                            <item name="dataScope" xsi:type="string">checkoutAgreements</item>
-                                                            <item name="displayArea" xsi:type="string">checkoutAgreements</item>
-                                                            <item name="provider" xsi:type="string">checkoutProvider</item>
-                                                            <item name="children" xsi:type="array">
-                                                            </item>
-                                                        </item>
-                                                    </item>
-                                                </item>
-                                            </item>
-                                        </item>
-                                    </item>
-                                </item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </arguments>
-        </referenceBlock>
-    </body>
-</page>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/action/login.js b/app/code/Magento/Customer/view/frontend/web/js/action/login.js
index 31d928825415b94304ca8b6f57fb912f6760a8cd..b4edd94739491b9b09e6216147cd7751ae90b76d 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/action/login.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/action/login.js
@@ -13,10 +13,11 @@ define(
     function($, storage, messageList, customerData) {
         'use strict';
         var callbacks = [],
-            action = function(loginData, redirectUrl) {
+            action = function(loginData, redirectUrl, isGlobal) {
                 return storage.post(
                     'customer/ajax/login',
-                    JSON.stringify(loginData)
+                    JSON.stringify(loginData),
+                    isGlobal
                 ).done(function (response) {
                     if (response.errors) {
                         messageList.addErrorMessage(response);
diff --git a/app/code/Magento/Dhl/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Dhl/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Dhl/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Dhl/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Fedex/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Fedex/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Fedex/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Fedex/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
index ac15a45ececeab8a6caa7d464e633ed7d41414c8..9cfb6a0c75f553e05f6710099bed558608eb02d3 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
@@ -41,7 +41,7 @@ class PluginTest extends \PHPUnit_Framework_TestCase
 
     public function testExecuteTurnsOffMultishippingModeOnQuote()
     {
-        $subject = $this->getMock('Magento\Checkout\Controller\Onepage\Index', [], [], '', false);
+        $subject = $this->getMock('Magento\Checkout\Controller\Index\Index', [], [], '', false);
         $this->quoteMock->expects($this->once())->method('setIsMultiShipping')->with(0);
         $this->object->beforeExecute($subject);
     }
diff --git a/app/code/Magento/Multishipping/etc/frontend/di.xml b/app/code/Magento/Multishipping/etc/frontend/di.xml
index 0320b5cc341c4b6bd030ae4afffdb2248c00cb1e..61d72838f9ee3b28d606a80928262098d4c351b7 100644
--- a/app/code/Magento/Multishipping/etc/frontend/di.xml
+++ b/app/code/Magento/Multishipping/etc/frontend/di.xml
@@ -36,7 +36,7 @@
     <type name="Magento\Checkout\Controller\Cart\UpdatePost">
         <plugin name="multishipping_disabler" type="Magento\Multishipping\Controller\Checkout\Plugin" sortOrder="50" />
     </type>
-    <type name="Magento\Checkout\Controller\Onepage\Index">
+    <type name="Magento\Checkout\Controller\Index\Index">
         <plugin name="multishipping_disabler" type="Magento\Multishipping\Controller\Checkout\Plugin" sortOrder="50" />
     </type>
     <type name="Magento\Checkout\Model\Cart">
diff --git a/app/code/Magento/OfflinePayments/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/OfflinePayments/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/OfflinePayments/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/OfflinePayments/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html
index dfcbf3131970749bfec9ab0537c3ef12f689fae7..66cf873c311eb639b8ce0bfba6e43228c5cb915e 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/banktransfer.html
@@ -29,7 +29,12 @@
             <div class="primary">
                 <button class="action primary checkout"
                         type="submit"
-                        data-bind="click: placeOrder, attr: {'title': $t('Place Order')}, enable: (getCode() == isChecked())"
+                        data-bind="
+                        click: placeOrder,
+                        attr: {'title': $t('Place Order')},
+                        enable: (getCode() == isChecked()),
+                        css: {disabled: !isPlaceOrderActionAllowed()}
+                        "
                         disabled>
                     <span data-bind="text: $t('Place Order')"></span>
                 </button>
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html
index 569d5b0a48eb368622fee51306a8d9c30b075cf7..10287d8090d4129e8ddc02880e42c704354478d3 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/cashondelivery.html
@@ -29,7 +29,12 @@
             <div class="primary">
                 <button class="action primary checkout"
                         type="submit"
-                        data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())"
+                        data-bind="
+                        click: placeOrder,
+                        attr: {title: $t('Place Order')},
+                        enable: (getCode() == isChecked()),
+                        css: {disabled: !isPlaceOrderActionAllowed()}
+                        "
                         disabled>
                     <span data-bind="text: $t('Place Order')"></span>
                 </button>
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
index 58f85845434792ab778b177461ac493a743d649d..ba6c374417b49b5477cf92a5c040e5c2ac732767 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
@@ -41,7 +41,12 @@
             <div class="primary">
                 <button class="action primary checkout"
                         type="submit"
-                        data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())"
+                        data-bind="
+                        click: placeOrder,
+                        attr: {title: $t('Place Order')},
+                        css: {disabled: !isPlaceOrderActionAllowed()},
+                        enable: (getCode() == isChecked())
+                        "
                         disabled>
                     <span data-bind="text: $t('Place Order')"></span>
                 </button>
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html
index 585d61feae7d7c7423285c3db12f5351adc2d385..ab531080cdfde2b2bc9173afc8e0e257033fce52 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/purchaseorder-form.html
@@ -49,7 +49,12 @@
                     <div class="primary">
                         <button class="action primary checkout"
                                 type="submit"
-                                data-bind="click: placeOrder, attr: {title: $t('Place Order')}, enable: (getCode() == isChecked())"
+                                data-bind="
+                                click: placeOrder,
+                                attr: {title: $t('Place Order')},
+                                enable: (getCode() == isChecked()),
+                                css: {disabled: !isPlaceOrderActionAllowed()}
+                                "
                                 data-role="review-save">
                             <span data-bind="text: $t('Place Order')"></span>
                         </button>
diff --git a/app/code/Magento/OfflineShipping/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/OfflineShipping/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/OfflineShipping/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/OfflineShipping/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Payment/Model/CcConfig.php b/app/code/Magento/Payment/Model/CcConfig.php
index 59928e91953bb7889cb8a1b05fc2516af5aa84da..97921c769ea94ea813f1dd0b1b5f8fa62bdfe01e 100644
--- a/app/code/Magento/Payment/Model/CcConfig.php
+++ b/app/code/Magento/Payment/Model/CcConfig.php
@@ -152,4 +152,18 @@ class CcConfig
             return $this->urlBuilder->getUrl('', ['_direct' => 'core/index/notFound']);
         }
     }
+
+    /**
+     * Create a file asset that's subject of fallback system
+     *
+     * @param string $fileId
+     * @param array $params
+     * @return \Magento\Framework\View\Asset\File
+     */
+    public function createAsset($fileId, array $params = [])
+    {
+        $params = array_merge(['_secure' => $this->request->isSecure()], $params);
+        return $this->assetRepo->createAsset($fileId, $params);
+
+    }
 }
diff --git a/app/code/Magento/Payment/Model/CcConfigProvider.php b/app/code/Magento/Payment/Model/CcConfigProvider.php
new file mode 100644
index 0000000000000000000000000000000000000000..7792a2c29a046e785576c507e226177dd7ee918c
--- /dev/null
+++ b/app/code/Magento/Payment/Model/CcConfigProvider.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Payment\Model;
+
+use Magento\Checkout\Model\ConfigProviderInterface;
+use Magento\Framework\View\Asset\Source;
+
+class CcConfigProvider implements ConfigProviderInterface
+{
+    /**
+     * @var CcConfig
+     */
+    protected $ccConfig;
+
+    /**
+     * @var \Magento\Framework\View\Asset\Source
+     */
+    protected $assetSource;
+
+    /**
+     * @param CcConfig $ccConfig
+     * @param Source $assetSource
+     */
+    public function __construct(
+        CcConfig $ccConfig,
+        Source $assetSource
+    ) {
+        $this->ccConfig = $ccConfig;
+        $this->assetSource = $assetSource;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getConfig()
+    {
+        return [
+            'payment' => [
+                'ccform' => [
+                    'icons' => $this->getIcons()
+                ]
+            ]
+        ];
+    }
+
+    /**
+     * Get icons for available payment methods
+     *
+     * @return array
+     */
+    protected function getIcons()
+    {
+        $icons = [];
+        $types = $this->ccConfig->getCcAvailableTypes();
+        foreach (array_keys($types) as $code) {
+            if (!array_key_exists($code, $icons)) {
+                $asset = $this->ccConfig->createAsset('Magento_Payment::images/cc/' . strtolower($code) . '.png');
+                $placeholder = $this->assetSource->findRelativeSourceFilePath($asset);
+                if ($placeholder) {
+                    list($width, $height) = getimagesize($asset->getSourceFile());
+                    $icons[$code] = [
+                        'url' => $asset->getUrl(),
+                        'width' => $width,
+                        'height' => $height
+                    ];
+                }
+            }
+        }
+        return $icons;
+    }
+}
diff --git a/app/code/Magento/Payment/etc/frontend/di.xml b/app/code/Magento/Payment/etc/frontend/di.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fdfda8b2027921ab7c665bd94c27b802ec288d99
--- /dev/null
+++ b/app/code/Magento/Payment/etc/frontend/di.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
+    <type name="Magento\Checkout\Model\CompositeConfigProvider">
+        <arguments>
+            <argument name="configProviders" xsi:type="array">
+                <item name="cc_card_config_provider" xsi:type="object">Magento\Payment\Model\CcConfigProvider</item>
+            </argument>
+        </arguments>
+    </type>
+</config>
diff --git a/app/code/Magento/Payment/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Payment/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Payment/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Payment/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Payment/view/frontend/web/js/model/credit-card-validation/credit-card-number-validator/credit-card-type.js b/app/code/Magento/Payment/view/frontend/web/js/model/credit-card-validation/credit-card-number-validator/credit-card-type.js
index 71e0e57c5c16e71a394d1fa948f35ed807c75495..bd7d0772c0222af0de3a7903a7b1445402c55d40 100644
--- a/app/code/Magento/Payment/view/frontend/web/js/model/credit-card-validation/credit-card-number-validator/credit-card-type.js
+++ b/app/code/Magento/Payment/view/frontend/web/js/model/credit-card-validation/credit-card-number-validator/credit-card-type.js
@@ -70,7 +70,7 @@ define(
             },
             {
                 title: 'JCB',
-                type: 'JC',
+                type: 'JCB',
                 pattern: '^((2|21|213|2131\\d*)|(1|18|180|1800\\d*)|(3|35\\d*))$',
                 gaps: [4, 8, 12],
                 lengths: [16],
@@ -92,23 +92,8 @@ define(
             },
             {
                 title: 'Maestro',
-                type: 'SM',
-                pattern: '(^(5[0678])[0-9]{11,18}$)' +
-                '|(^(6[^05])[0-9]{11,18}$)' +
-                '|(^(601)[^1][0-9]{9,16}$)' +
-                '|(^(6011)[0-9]{9,11}$)' +
-                '|(^(6011)[0-9]{13,16}$)' +
-                '|(^(65)[0-9]{11,13}$)' +
-                '|(^(65)[0-9]{15,18}$)' +
-                '|(^(49030)[2-9]([0-9]{10}$' +
-                '|[0-9]{12,13}$))' +
-                '|(^(49033)[5-9]([0-9]{10}$' +
-                '|[0-9]{12,13}$))' +
-                '|(^(49110)[1-2]([0-9]{10}$' +
-                '|[0-9]{12,13}$))' +
-                '|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))' +
-                '|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))' +
-                '|(^(4936)([0-9]{12}$|[0-9]{14,15}$))',
+                type: 'MI',
+                pattern: '^((5((0|[6-9])\\d*)?)|(6|6[37]\\d*))$',
                 gaps: [4, 8, 12],
                 lengths: [12, 13, 14, 15, 16, 17, 18, 19],
                 code: {
diff --git a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
index 5c1abc1e3c75b1721a889badee6e364009bd448f..e957c254fb3719ca2e30319a01221fff7b27e227 100644
--- a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
+++ b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
@@ -104,6 +104,11 @@ define(
             getCcAvailableTypes: function() {
                 return window.checkoutConfig.payment.ccform.availableTypes[this.getCode()];
             },
+            getIcons: function (type) {
+                return window.checkoutConfig.payment.ccform.icons.hasOwnProperty(type)
+                    ? window.checkoutConfig.payment.ccform.icons[type]
+                    : false
+            },
             getCcMonths: function() {
                 return window.checkoutConfig.payment.ccform.months[this.getCode()];
             },
diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html b/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html
index 49d1d57f958bdd938284aaeaf11abf1ca926fb3d..eb7865ddf83c8151653159b59d8c3c725a4d65b8 100644
--- a/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html
+++ b/app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html
@@ -19,13 +19,14 @@
             <ul class="credit-card-types">
                 <!-- ko foreach: {data: getCcAvailableTypesValues(), as: 'item'} -->
                 <li class="item" data-bind="css: {_active: $parent.selectedCardType() == item.value} ">
-                    <!-- if picture -->
+                    <!--ko if: $parent.getIcons(item.value) -->
                     <img data-bind="attr: {
-                        'src': 'Magento_Payment::images/cc/'+ item.value + '.png',
-                        'alt': item.type
+                        'src': $parent.getIcons(item.value).url,
+                        'alt': item.type,
+                        'width': $parent.getIcons(item.value).width,
+                        'height': $parent.getIcons(item.value).height
                         }">
-                    <!-- if NOpicture -->
-                    <span><!-- ko text: item.type --><!-- /ko --></span>
+                    <!--/ko-->
                 </li>
                 <!--/ko-->
             </ul>
diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/free.html b/app/code/Magento/Payment/view/frontend/web/template/payment/free.html
index fb33eafd3cfbb59e8fffe9983692fe3d2fad1050..483920bbe980eb903a4fadaba0dca5695f3d8189 100644
--- a/app/code/Magento/Payment/view/frontend/web/template/payment/free.html
+++ b/app/code/Magento/Payment/view/frontend/web/template/payment/free.html
@@ -27,7 +27,11 @@
             <div class="primary">
                 <button class="action primary checkout"
                         type="submit"
-                        data-bind="click: placeOrder, attr: {title: $t('Place Order')}">
+                        data-bind="
+                        click: placeOrder,
+                        attr: {title: $t('Place Order')},
+                        css: {disabled: !isPlaceOrderActionAllowed()}
+                        ">
                     <span data-bind="text: $t('Place Order')"></span>
                 </button>
             </div>
diff --git a/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html b/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html
index 2fec488a491cb1787d622de53a3c4764c404c4c4..9e4d53bda7384775fecdc37eeecb63ba90664972 100644
--- a/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html
+++ b/app/code/Magento/Payment/view/frontend/web/template/payment/iframe.html
@@ -30,7 +30,9 @@
     <div class="primary">
         <button data-role="review-save" type="submit"
                 data-bind="attr: {title: $t('Place order')}"
-                class="button action primary checkout"><span data-bind="text: $t('Place order')"></span></button>
+                class="button action primary checkout">
+            <span data-bind="text: $t('Place order')"></span>
+        </button>
         <button type="submit" id="originalPlaceOrder" class="hidden"
                 data-bind="click: originalPlaceOrder($parents[1])"></button>
     </div>
diff --git a/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_original.xml b/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_original.xml
deleted file mode 100644
index 6d8cd9506b3907770cbb9e49e44996503a4337bd..0000000000000000000000000000000000000000
--- a/app/code/Magento/Persistent/view/frontend/layout/checkout_onepage_original.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<!-- TODO remove this file as soon as enhanced checkout is implemented -->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
-    <body>
-        <referenceBlock name="checkout.root">
-            <arguments>
-                <argument name="jsLayout" xsi:type="array">
-                    <item name="components" xsi:type="array">
-                        <item name="checkout" xsi:type="array">
-                            <item name="children" xsi:type="array">
-                                <item name="steps" xsi:type="array">
-                                    <item name="children" xsi:type="array">
-                                        <item name="authentication" xsi:type="array">
-                                            <item name="children" xsi:type="array">
-                                                <item name="remember-me" xsi:type="array">
-                                                    <item name="component" xsi:type="string">Magento_Persistent/js/view/remember-me</item>
-                                                    <item name="displayArea" xsi:type="string">additional-login-form-fields</item>
-                                                </item>
-                                            </item>
-                                        </item>
-                                        <item name="billingAddress" xsi:type="array">
-                                            <item name="children" xsi:type="array">
-                                                <item name="remember-me" xsi:type="array">
-                                                    <item name="component" xsi:type="string">Magento_Persistent/js/view/remember-me</item>
-                                                    <item name="dataScope" xsi:type="string">additionalAddressData</item>
-                                                    <item name="displayArea" xsi:type="string">additional-fieldsets</item>
-                                                </item>
-                                            </item>
-                                        </item>
-                                    </item>
-                                </item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </arguments>
-        </referenceBlock>
-    </body>
-</page>
diff --git a/app/code/Magento/Sales/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Sales/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Sales/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Sales/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/SalesRule/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/SalesRule/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/SalesRule/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/SalesRule/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Shipping/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Shipping/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Shipping/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Shipping/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Tax/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Tax/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Tax/view/frontend/layout/checkout_onepage_original.xml b/app/code/Magento/Tax/view/frontend/layout/checkout_onepage_original.xml
deleted file mode 100644
index 012d3de66d1ddaf42f7320f1cb3c064b9f2c4486..0000000000000000000000000000000000000000
--- a/app/code/Magento/Tax/view/frontend/layout/checkout_onepage_original.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<!-- TODO remove this file as soon as enhanced checkout is implemented -->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
-    <body>
-        <referenceBlock name="checkout.root">
-            <arguments>
-                <argument name="jsLayout" xsi:type="array">
-                    <item name="components" xsi:type="array">
-                        <item name="checkout" xsi:type="array">
-                            <item name="children" xsi:type="array">
-                                <item name="steps" xsi:type="array">
-                                    <item name="children" xsi:type="array">
-                                        <item name="shipping" xsi:type="array">
-                                            <item name="children" xsi:type="array">
-                                                <item name="price" xsi:type="array">
-                                                    <item name="component" xsi:type="string">Magento_Tax/js/view/checkout/shipping_method/price</item>
-                                                    <item name="displayArea" xsi:type="string">price</item>
-                                                </item>
-                                            </item>
-                                        </item>
-                                        <item name="review" xsi:type="array">
-                                            <item name="children" xsi:type="array">
-                                                <item name="columns" xsi:type="array">
-                                                    <item name="component" xsi:type="string">Magento_Checkout/js/view/columns</item>
-                                                    <item name="children" xsi:type="array">
-                                                        <item name="price" xsi:type="array">
-                                                            <item name="component" xsi:type="string">Magento_Tax/js/view/checkout/review/item/columns/price</item>
-                                                        </item>
-                                                        <item name="subtotal" xsi:type="array">
-                                                            <item name="component" xsi:type="string">Magento_Tax/js/view/checkout/review/item/columns/subtotal</item>
-                                                        </item>
-                                                    </item>
-                                                </item>
-                                                <item name="totals" xsi:type="array">
-                                                    <item name="children" xsi:type="array">
-                                                        <item name="subtotal" xsi:type="array">
-                                                            <item name="component"  xsi:type="string">Magento_Tax/js/view/checkout/review/subtotal</item>
-                                                            <item name="sortOrder" xsi:type="string">10</item>
-                                                        </item>
-                                                        <item name="shipping" xsi:type="array">
-                                                            <item name="component"  xsi:type="string">Magento_Tax/js/view/checkout/review/shipping</item>
-                                                            <item name="sortOrder" xsi:type="string">20</item>
-                                                        </item>
-                                                        <item name="before_grandtotal" xsi:type="array">
-                                                            <item name="component"  xsi:type="string">Magento_Tax/js/view/checkout/review/before_grandtotal</item>
-                                                            <item name="sortOrder" xsi:type="string">30</item>
-                                                            <item name="children" xsi:type="array">
-                                                                <!-- merge your components here -->
-                                                            </item>
-                                                        </item>
-                                                        <item name="grandtotal" xsi:type="array">
-                                                            <item name="component"  xsi:type="string">Magento_Tax/js/view/checkout/review/grandtotal</item>
-                                                            <item name="sortOrder" xsi:type="string">40</item>
-                                                            <item name="children" xsi:type="array">
-                                                                <item name="grandtotal_tax" xsi:type="array">
-                                                                    <item name="component"  xsi:type="string">Magento_Tax/js/view/checkout/review/tax_total</item>
-                                                                </item>
-                                                            </item>
-                                                        </item>
-                                                    </item>
-                                                </item>
-                                            </item>
-                                        </item>
-                                    </item>
-                                </item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </arguments>
-        </referenceBlock>
-    </body>
-</page>
\ No newline at end of file
diff --git a/app/code/Magento/Ups/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Ups/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Ups/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Ups/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Usps/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Usps/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Usps/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Usps/view/frontend/layout/checkout_index_index.xml
diff --git a/app/code/Magento/Weee/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Weee/view/frontend/layout/checkout_index_index.xml
similarity index 100%
rename from app/code/Magento/Weee/view/frontend/layout/checkout_onepage_index.xml
rename to app/code/Magento/Weee/view/frontend/layout/checkout_index_index.xml
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/layout/checkout_onepage_index.xml b/app/design/frontend/Magento/blank/Magento_Checkout/layout/checkout_index_index.xml
similarity index 100%
rename from app/design/frontend/Magento/blank/Magento_Checkout/layout/checkout_onepage_index.xml
rename to app/design/frontend/Magento/blank/Magento_Checkout/layout/checkout_index_index.xml
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
index 253de1616fe69d4483674100af98bce7b60b7dc0..5f5d95e511ddf4129135cac084abb17d546c018b 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
@@ -6,7 +6,7 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CheckoutOnepage" mca="checkout/onepage" module="Magento_Checkout">
+  <page name="CheckoutOnepage" mca="checkout/index" module="Magento_Checkout">
     <block name="loginBlock" class="Magento\Checkout\Test\Block\Onepage\Login" locator="#checkout-step-authentication" strategy="css selector"/>
     <block name="billingBlock" class="Magento\Checkout\Test\Block\Onepage\Billing" locator="#checkout-step-billing" strategy="css selector"/>
     <block name="shippingBlock" class="Magento\Checkout\Test\Block\Onepage\Shipping" locator="#checkout-step-shipping" strategy="css selector"/>
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/CheckoutOnepage.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/CheckoutOnepage.xml
index e083ee46d7f673bea8595d09650a7081fcaa2d20..db078d6fe33320be59c41868d4036f795be70fa1 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/CheckoutOnepage.xml
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/CheckoutOnepage.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd">
-    <page name="CheckoutOnepage" mca="checkout/onepage" module="Magento_Checkout">
+    <page name="CheckoutOnepage" mca="checkout/index" module="Magento_Checkout">
         <block name="agreementReview" class="Magento\CheckoutAgreements\Test\Block\Onepage\AgreementReview" locator="#checkout-step-review" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/performance/benchmark.jmx b/dev/tests/performance/benchmark.jmx
index 92ac0e689898c76a1dd489ec125330ad1f4d3c61..e1c9c005646cd2224210e5c0aea7312b4173f0d3 100644
--- a/dev/tests/performance/benchmark.jmx
+++ b/dev/tests/performance/benchmark.jmx
@@ -765,7 +765,7 @@
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol"></stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/</stringProp>
+          <stringProp name="HTTPSampler.path">${base_path}checkout/index/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -926,7 +926,7 @@
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="Content-Type" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -992,7 +992,7 @@
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
diff --git a/dev/tests/performance/testsuite/checkout.jmx b/dev/tests/performance/testsuite/checkout.jmx
index 6306e47f71ab4d71d780ea77e958cfea918d27c8..f69598bbb50bfbc9558ddeea9f63ce5eb406cea1 100644
--- a/dev/tests/performance/testsuite/checkout.jmx
+++ b/dev/tests/performance/testsuite/checkout.jmx
@@ -296,7 +296,7 @@
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol"></stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${PATH}checkout/onepage/</stringProp>
+          <stringProp name="HTTPSampler.path">${PATH}checkout/index/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
index 281bb8ac0519d7f345fbe8d264cb0834a9ca4f40..119fd12fdfc488f09e63d09098ecd16ced7d9dee 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
@@ -191,11 +191,11 @@ class MergeTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(array_merge($nonPageHandles, $expectedPageHandles), $this->_model->getHandles());
 
         /* test that new handles override the previous ones */
-        $expectedPageHandles = ['default', 'checkout_onepage_index'];
+        $expectedPageHandles = ['default', 'checkout_index_index'];
         $this->_model->removeHandle('catalog_category_default');
         $this->_model->removeHandle('catalog_product_view');
         $this->_model->removeHandle('catalog_product_view_type_simple');
-        $this->assertTrue($this->_model->addPageHandles(['default', 'checkout_onepage_index']));
+        $this->assertTrue($this->_model->addPageHandles(['default', 'checkout_index_index']));
         $this->assertEquals($expectedPageHandles, $this->_model->getPageHandles());
         $this->assertEquals(array_merge($nonPageHandles, $expectedPageHandles), $this->_model->getHandles());
     }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/layout/checkout_onepage_index.xml b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/layout/checkout_index_index.xml
similarity index 100%
rename from lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/layout/checkout_onepage_index.xml
rename to lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/layout/checkout_index_index.xml
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/merged.xml b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/merged.xml
index 8553d5f68dbdf5a0378c67f0df53b54b865877c7..bcee531b78f53be68e80706853bd826571fe143b 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/merged.xml
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/_files/merged.xml
@@ -21,7 +21,7 @@
         </body>
     </handle>
     <handle id="catalog_product_view_type_simple"/>
-    <handle id="checkout_onepage_index"/>
+    <handle id="checkout_index_index"/>
     <handle id="customer_account" label="Customer My Account (All Pages)" design_abstraction="custom"/>
     <handle id="default">
         <body>
diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx
index 21a247514cb106d408b9305951dff3f39742d3d0..b5c7b55cac60a29745da1ec3771e16ab23bbe2d9 100644
--- a/setup/performance-toolkit/benchmark.jmx
+++ b/setup/performance-toolkit/benchmark.jmx
@@ -2321,7 +2321,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/</stringProp>
+          <stringProp name="HTTPSampler.path">${base_path}checkout/index/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -2432,7 +2432,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="Content-Type" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -2497,7 +2497,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -2560,7 +2560,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -3196,7 +3196,7 @@ if (emailsCount &lt; 1) {
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/</stringProp>
+          <stringProp name="HTTPSampler.path">${base_path}checkout/index/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -3361,7 +3361,7 @@ if (emailsCount &lt; 1) {
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="Content-Type" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -3426,7 +3426,7 @@ if (emailsCount &lt; 1) {
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>
@@ -3489,7 +3489,7 @@ if (emailsCount &lt; 1) {
             <collectionProp name="HeaderManager.headers">
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/onepage/</stringProp>
+                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
               </elementProp>
               <elementProp name="" elementType="Header">
                 <stringProp name="Header.name">Content-Type</stringProp>