diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment.php
index 9b7f329ab3dc340c906d1062880dffd70d3d6405..e318ddb44c98007dc19a07b25b2f15462bc7ade7 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment.php
@@ -130,8 +130,8 @@ abstract class Payment extends \Magento\Framework\App\Action\Action
             $order = $this->_objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($incrementId);
             if ($order->getId()) {
                 try {
-                    /** @var \Magento\Quote\Model\QuoteRepository $quoteRepository */
-                    $quoteRepository = $this->_objectManager->create('Magento\Quote\Model\QuoteRepository');
+                    /** @var \Magento\Quote\Api\CartRepositoryInterface $quoteRepository */
+                    $quoteRepository = $this->_objectManager->create('Magento\Quote\Api\CartRepositoryInterface');
                     /** @var \Magento\Quote\Model\Quote $quote */
                     $quote = $quoteRepository->get($order->getQuoteId());
 
diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php
index 68fd630f21f4593740fed6288e3821b87677d7db..3caaa53b59785a6f81bc69f4b6239067301d174d 100644
--- a/app/code/Magento/Authorizenet/Model/Directpost.php
+++ b/app/code/Magento/Authorizenet/Model/Directpost.php
@@ -93,7 +93,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
     protected $storeManager;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -136,7 +136,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
      * @param \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param OrderSender $orderSender
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
      * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
@@ -161,7 +161,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
         ZendClientFactory $httpClientFactory,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
diff --git a/app/code/Magento/Backend/Model/Session/Quote.php b/app/code/Magento/Backend/Model/Session/Quote.php
index 1427e1ad5ad570d5ea93c0f5cef3c5cdfd71c4cb..f1bea24b085a76a729b2bf92043ce615979d6065 100644
--- a/app/code/Magento/Backend/Model/Session/Quote.php
+++ b/app/code/Magento/Backend/Model/Session/Quote.php
@@ -60,7 +60,7 @@ class Quote extends \Magento\Framework\Session\SessionManager
     /**
      * Sales quote repository
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -74,6 +74,11 @@ class Quote extends \Magento\Framework\Session\SessionManager
      */
     protected $groupManagement;
 
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param \Magento\Framework\App\Request\Http $request
      * @param \Magento\Framework\Session\SidResolverInterface $sidResolver
@@ -85,11 +90,11 @@ class Quote extends \Magento\Framework\Session\SessionManager
      * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
      * @param \Magento\Framework\App\State $appState
      * @param CustomerRepositoryInterface $customerRepository
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param GroupManagementInterface $groupManagement
-     * @throws \Magento\Framework\Exception\SessionException
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -103,16 +108,18 @@ class Quote extends \Magento\Framework\Session\SessionManager
         \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
         \Magento\Framework\App\State $appState,
         CustomerRepositoryInterface $customerRepository,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        GroupManagementInterface $groupManagement
+        GroupManagementInterface $groupManagement,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory
     ) {
         $this->customerRepository = $customerRepository;
         $this->quoteRepository = $quoteRepository;
         $this->_orderFactory = $orderFactory;
         $this->_storeManager = $storeManager;
         $this->groupManagement = $groupManagement;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct(
             $request,
             $sidResolver,
@@ -137,7 +144,7 @@ class Quote extends \Magento\Framework\Session\SessionManager
     public function getQuote()
     {
         if ($this->_quote === null) {
-            $this->_quote = $this->quoteRepository->create();
+            $this->_quote = $this->quoteFactory->create();
             if ($this->getStoreId()) {
                 if (!$this->getQuoteId()) {
                     $this->_quote->setCustomerGroupId($this->groupManagement->getDefaultGroup()->getId())
diff --git a/app/code/Magento/Backend/Test/Unit/Model/Session/QuoteTest.php b/app/code/Magento/Backend/Test/Unit/Model/Session/QuoteTest.php
index 1c89077b1b161051562190ccd56c3ad66c0e19a6..b1888ef8fd6c507910f086bba365581b52ef2563 100644
--- a/app/code/Magento/Backend/Test/Unit/Model/Session/QuoteTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Model/Session/QuoteTest.php
@@ -8,6 +8,7 @@ namespace Magento\Backend\Test\Unit\Model\Session;
 /**
  * Class QuoteTest
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ * @SuppressWarnings(PHPMD.TooManyFields)
  */
 class QuoteTest extends \PHPUnit_Framework_TestCase
 {
@@ -86,6 +87,11 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
      */
     protected $groupManagementMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $quoteFactoryMock;
+
     /**
      * Set up
      *
@@ -122,13 +128,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             true,
             ['getValue']
         );
-        $this->quoteRepositoryMock = $this->getMock(
-            'Magento\Quote\Model\QuoteRepository',
-            ['create', 'save', 'get'],
-            [],
-            '',
-            false
-        );
+        $this->quoteRepositoryMock = $this->getMock('Magento\Quote\Api\CartRepositoryInterface');
 
         $this->requestMock = $this->getMock(
             'Magento\Framework\App\Request\Http',
@@ -196,6 +196,8 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             false
         );
 
+        $this->quoteFactoryMock = $this->getMock('\Magento\Quote\Model\QuoteFactory', ['create'], [], '', false);
+
         $this->quote = $this->getMock(
             'Magento\Backend\Model\Session\Quote',
             ['getStoreId', 'getQuoteId', 'setQuoteId', 'hasCustomerId', 'getCustomerId'],
@@ -214,6 +216,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
                 'orderFactory' => $this->orderFactoryMock,
                 'storeManager' => $this->storeManagerMock,
                 'groupManagement' => $this->groupManagementMock,
+                'quoteFactory' => $this->quoteFactoryMock
             ],
             '',
             true
@@ -302,7 +305,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('setIsSuperMode')
             ->with(true);
 
-        $this->quoteRepositoryMock->expects($this->once())
+        $this->quoteFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($quoteMock));
         $this->quoteRepositoryMock->expects($this->once())
@@ -377,7 +380,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('getCustomerId')
             ->will($this->returnValue($quoteCustomerId));
 
-        $this->quoteRepositoryMock->expects($this->once())
+        $this->quoteFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($quoteMock));
         $this->quoteRepositoryMock->expects($this->once())
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/CheckoutTest.php b/app/code/Magento/Braintree/Test/Unit/Model/CheckoutTest.php
index 560d8a14af0838c3381908b30aace672245ff5f8..f08572f2d27b6f4984b621614350881db00716c9 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/CheckoutTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/CheckoutTest.php
@@ -57,7 +57,7 @@ class CheckoutTest extends \PHPUnit_Framework_TestCase
     protected $shippingAddressMock;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Api\CartRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteRepositoryMock;
 
@@ -73,10 +73,7 @@ class CheckoutTest extends \PHPUnit_Framework_TestCase
         $this->quoteMock->expects($this->any())
             ->method('getShippingAddress')
             ->willReturn($this->shippingAddressMock);
-        $this->quoteRepositoryMock = $this->getMockBuilder('\Magento\Quote\Model\QuoteRepository')
-            ->disableOriginalConstructor()
-            ->getMock();
-
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $configMock = $this->getMockBuilder('\Magento\Paypal\Model\Config')
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Captcha/Block/Captcha.php b/app/code/Magento/Captcha/Block/Captcha.php
index 7daafd0ef14f6db39abe89e1bd370dca6ac37e76..228a530ad6596bdad4188ef7932caac77b42d28b 100644
--- a/app/code/Magento/Captcha/Block/Captcha.php
+++ b/app/code/Magento/Captcha/Block/Captcha.php
@@ -32,6 +32,7 @@ class Captcha extends \Magento\Framework\View\Element\Template
     ) {
         $this->_captchaData = $captchaData;
         parent::__construct($context, $data);
+        $this->_isScopePrivate = true;
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
index 421effe555299a64a9ee2ff0015758d8177258ee..cef967e3877d6fcfc9d1392878dd8d443e727bf1 100644
--- a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
@@ -10,7 +10,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
     /**
      * Sales quote repository
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -29,7 +29,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param \Magento\Checkout\Model\Cart $cart
      * @param \Magento\SalesRule\Model\CouponFactory $couponFactory
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -40,7 +40,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         \Magento\Checkout\Model\Cart $cart,
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         parent::__construct(
             $context,
diff --git a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
index e7808167252289e8b47763a0e934e56b5c55c2f6..d3baa8c7a62a09ea368c0bee0c8eddbb05cc72f0 100644
--- a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
@@ -11,7 +11,7 @@ use Magento\Checkout\Model\Cart as CustomerCart;
 class EstimatePost extends \Magento\Checkout\Controller\Cart
 {
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -22,7 +22,7 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param CustomerCart $cart
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -32,7 +32,7 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         CustomerCart $cart,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         $this->quoteRepository = $quoteRepository;
         parent::__construct(
diff --git a/app/code/Magento/Checkout/Controller/Onepage.php b/app/code/Magento/Checkout/Controller/Onepage.php
index 2bfbf61db7a7fa7ff4e0e5861139a904b010662e..f841096ffbe5ff988133aa67cf5c09ccffdec78a 100644
--- a/app/code/Magento/Checkout/Controller/Onepage.php
+++ b/app/code/Magento/Checkout/Controller/Onepage.php
@@ -57,7 +57,7 @@ abstract class Onepage extends Action
     protected $layoutFactory;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -91,7 +91,7 @@ abstract class Onepage extends Action
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
@@ -110,7 +110,7 @@ abstract class Onepage extends Action
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\View\LayoutFactory $layoutFactory,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php
index 470af073fef905af22d8d46d725631d1e112c9e1..29789f0942b9684b9a510e00ccb3a5564fdab287 100644
--- a/app/code/Magento/Checkout/Model/Cart.php
+++ b/app/code/Magento/Checkout/Model/Cart.php
@@ -81,7 +81,7 @@ class Cart extends DataObject implements CartInterface
     protected $stockState;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -100,7 +100,7 @@ class Cart extends DataObject implements CartInterface
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param \Magento\CatalogInventory\Api\StockStateInterface $stockState
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param ProductRepositoryInterface $productRepository
      * @param array $data
      * @codeCoverageIgnore
@@ -116,7 +116,7 @@ class Cart extends DataObject implements CartInterface
         \Magento\Framework\Message\ManagerInterface $messageManager,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         \Magento\CatalogInventory\Api\StockStateInterface $stockState,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         ProductRepositoryInterface $productRepository,
         array $data = []
     ) {
diff --git a/app/code/Magento/Checkout/Model/Cart/CollectQuote.php b/app/code/Magento/Checkout/Model/Cart/CollectQuote.php
index 5b3f7841635c70040d6ea37b31a574d36e3488a5..18fbe76167f88631cea7a18c7eaa1631f8c91fc3 100644
--- a/app/code/Magento/Checkout/Model/Cart/CollectQuote.php
+++ b/app/code/Magento/Checkout/Model/Cart/CollectQuote.php
@@ -33,7 +33,7 @@ class CollectQuote
     protected $shippingMethodManager;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -43,7 +43,7 @@ class CollectQuote
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
      * @param \Magento\Quote\Api\Data\EstimateAddressInterfaceFactory $estimatedAddressFactory
      * @param \Magento\Quote\Api\ShippingMethodManagementInterface $shippingMethodManager
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -52,7 +52,7 @@ class CollectQuote
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
         \Magento\Quote\Api\Data\EstimateAddressInterfaceFactory $estimatedAddressFactory,
         \Magento\Quote\Api\ShippingMethodManagementInterface $shippingMethodManager,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         $this->customerSession = $customerSession;
         $this->customerRepository = $customerRepository;
diff --git a/app/code/Magento/Checkout/Model/DefaultConfigProvider.php b/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
index 8e59581f351965123fb61dcc732fea2c1b6a6890..77f12a00bf0385188960871e2ee9ac3e86474966 100644
--- a/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
+++ b/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
@@ -15,7 +15,7 @@ use Magento\Customer\Model\Url as CustomerUrlManager;
 use Magento\Framework\App\Http\Context as HttpContext;
 use Magento\Framework\Data\Form\FormKey;
 use Magento\Framework\Locale\CurrencyInterface as CurrencyManager;
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Quote\Api\CartItemRepositoryInterface as QuoteItemRepository;
 use Magento\Quote\Api\ShippingMethodManagementInterface as ShippingMethodManager;
 use Magento\Catalog\Helper\Product\ConfigurationPool;
@@ -63,7 +63,7 @@ class DefaultConfigProvider implements ConfigProviderInterface
     private $httpContext;
 
     /**
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     private $quoteRepository;
 
@@ -169,7 +169,7 @@ class DefaultConfigProvider implements ConfigProviderInterface
      * @param CustomerSession $customerSession
      * @param CustomerUrlManager $customerUrlManager
      * @param HttpContext $httpContext
-     * @param QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param QuoteItemRepository $quoteItemRepository
      * @param ShippingMethodManager $shippingMethodManager
      * @param ConfigurationPool $configurationPool
@@ -199,7 +199,7 @@ class DefaultConfigProvider implements ConfigProviderInterface
         CustomerSession $customerSession,
         CustomerUrlManager $customerUrlManager,
         HttpContext $httpContext,
-        QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         QuoteItemRepository $quoteItemRepository,
         ShippingMethodManager $shippingMethodManager,
         ConfigurationPool $configurationPool,
diff --git a/app/code/Magento/Checkout/Model/GuestPaymentInformationManagement.php b/app/code/Magento/Checkout/Model/GuestPaymentInformationManagement.php
index 7da2c8f274b1a2a60c1342f3ed4cfc6859e04ee6..81ff1b2fd4382aab9cb988b98fa66a4e19f57b6a 100644
--- a/app/code/Magento/Checkout/Model/GuestPaymentInformationManagement.php
+++ b/app/code/Magento/Checkout/Model/GuestPaymentInformationManagement.php
@@ -27,7 +27,7 @@ class GuestPaymentInformationManagement implements \Magento\Checkout\Api\GuestPa
     protected $cartManagement;
 
     /**
-     * @var \Magento\Checkout\Model\PaymentInformationManagement
+     * @var \Magento\Checkout\Api\PaymentInformationManagementInterface
      */
     protected $paymentInformationManagement;
 
@@ -45,7 +45,7 @@ class GuestPaymentInformationManagement implements \Magento\Checkout\Api\GuestPa
      * @param \Magento\Quote\Api\GuestBillingAddressManagementInterface $billingAddressManagement
      * @param \Magento\Quote\Api\GuestPaymentMethodManagementInterface $paymentMethodManagement
      * @param \Magento\Quote\Api\GuestCartManagementInterface $cartManagement
-     * @param PaymentInformationManagement $paymentInformationManagement
+     * @param \Magento\Checkout\Api\PaymentInformationManagementInterface $paymentInformationManagement
      * @param \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
      * @param CartRepositoryInterface $cartRepository
      * @codeCoverageIgnore
@@ -54,7 +54,7 @@ class GuestPaymentInformationManagement implements \Magento\Checkout\Api\GuestPa
         \Magento\Quote\Api\GuestBillingAddressManagementInterface $billingAddressManagement,
         \Magento\Quote\Api\GuestPaymentMethodManagementInterface $paymentMethodManagement,
         \Magento\Quote\Api\GuestCartManagementInterface $cartManagement,
-        \Magento\Checkout\Model\PaymentInformationManagement $paymentInformationManagement,
+        \Magento\Checkout\Api\PaymentInformationManagementInterface $paymentInformationManagement,
         \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory,
         CartRepositoryInterface $cartRepository
     ) {
diff --git a/app/code/Magento/Checkout/Model/Session.php b/app/code/Magento/Checkout/Model/Session.php
index e988a2f93814eb70d8cccff668281b845d76b30e..ba51d052accb2a06586e3a4032be0f4d8f95e3ba 100644
--- a/app/code/Magento/Checkout/Model/Session.php
+++ b/app/code/Magento/Checkout/Model/Session.php
@@ -58,7 +58,7 @@ class Session extends \Magento\Framework\Session\SessionManager
     protected $_customerSession;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -92,6 +92,11 @@ class Session extends \Magento\Framework\Session\SessionManager
      */
     protected $isQuoteMasked;
 
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param \Magento\Framework\App\Request\Http $request
      * @param \Magento\Framework\Session\SidResolverInterface $sidResolver
@@ -104,14 +109,13 @@ class Session extends \Magento\Framework\Session\SessionManager
      * @param \Magento\Framework\App\State $appState
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Customer\Model\Session $customerSession
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
      * @param QuoteIdMaskFactory $quoteIdMaskFactory
-     * @throws \Magento\Framework\Exception\SessionException
-     * @codeCoverageIgnore
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -126,12 +130,13 @@ class Session extends \Magento\Framework\Session\SessionManager
         \Magento\Framework\App\State $appState,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Customer\Model\Session $customerSession,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
-        QuoteIdMaskFactory $quoteIdMaskFactory
+        QuoteIdMaskFactory $quoteIdMaskFactory,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory
     ) {
         $this->_orderFactory = $orderFactory;
         $this->_customerSession = $customerSession;
@@ -141,6 +146,7 @@ class Session extends \Magento\Framework\Session\SessionManager
         $this->_storeManager = $storeManager;
         $this->customerRepository = $customerRepository;
         $this->quoteIdMaskFactory = $quoteIdMaskFactory;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct(
             $request,
             $sidResolver,
@@ -203,7 +209,7 @@ class Session extends \Magento\Framework\Session\SessionManager
         $this->_eventManager->dispatch('custom_quote_process', ['checkout_session' => $this]);
 
         if ($this->_quote === null) {
-            $quote = $this->quoteRepository->create();
+            $quote = $this->quoteFactory->create();
             if ($this->getQuoteId()) {
                 try {
                     if ($this->_loadInactive) {
@@ -321,7 +327,7 @@ class Session extends \Magento\Framework\Session\SessionManager
         try {
             $customerQuote = $this->quoteRepository->getForCustomer($this->_customerSession->getCustomerId());
         } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
-            $customerQuote = $this->quoteRepository->create();
+            $customerQuote = $this->quoteFactory->create();
         }
         $customerQuote->setStoreId($this->_storeManager->getStore()->getId());
 
diff --git a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php
index 2858cc787163d0adb6528ad3042fe7df44353916..e8c5fc5589a91f2b404300587e996dade1b449e0 100644
--- a/app/code/Magento/Checkout/Model/ShippingInformationManagement.php
+++ b/app/code/Magento/Checkout/Model/ShippingInformationManagement.php
@@ -34,7 +34,7 @@ class ShippingInformationManagement implements \Magento\Checkout\Api\ShippingInf
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -71,7 +71,7 @@ class ShippingInformationManagement implements \Magento\Checkout\Api\ShippingInf
      * @param \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement
      * @param \Magento\Checkout\Model\PaymentDetailsFactory $paymentDetailsFactory
      * @param \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalsRepository
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Quote\Model\QuoteAddressValidator $addressValidator
      * @param Logger $logger
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
@@ -83,7 +83,7 @@ class ShippingInformationManagement implements \Magento\Checkout\Api\ShippingInf
         \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement,
         \Magento\Checkout\Model\PaymentDetailsFactory $paymentDetailsFactory,
         \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalsRepository,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         QuoteAddressValidator $addressValidator,
         Logger $logger,
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
diff --git a/app/code/Magento/Checkout/Model/Type/Onepage.php b/app/code/Magento/Checkout/Model/Type/Onepage.php
index 8d9f2ed620c1ab9c79059480f38ddb6006f5625a..b5edd78257aac60c2e4d0930cd84db3d25524c89 100644
--- a/app/code/Magento/Checkout/Model/Type/Onepage.php
+++ b/app/code/Magento/Checkout/Model/Type/Onepage.php
@@ -141,7 +141,7 @@ class Onepage
     protected $orderSender;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -156,7 +156,7 @@ class Onepage
     protected $extensibleDataObjectConverter;
 
     /**
-     * @var \Magento\Quote\Model\QuoteManagement
+     * @var \Magento\Quote\Api\CartManagementInterface
      */
     protected $quoteManagement;
 
@@ -193,9 +193,9 @@ class Onepage
      * @param AccountManagementInterface $accountManagement
      * @param OrderSender $orderSender
      * @param CustomerRepositoryInterface $customerRepository
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\Api\ExtensibleDataObjectConverter $extensibleDataObjectConverter
-     * @param \Magento\Quote\Model\QuoteManagement $quoteManagement
+     * @param \Magento\Quote\Api\CartManagementInterface $quoteManagement
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      * @param \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector
      * @codeCoverageIgnore
@@ -224,9 +224,9 @@ class Onepage
         AccountManagementInterface $accountManagement,
         OrderSender $orderSender,
         CustomerRepositoryInterface $customerRepository,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\Api\ExtensibleDataObjectConverter $extensibleDataObjectConverter,
-        \Magento\Quote\Model\QuoteManagement $quoteManagement,
+        \Magento\Quote\Api\CartManagementInterface $quoteManagement,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector
     ) {
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
index 42453493e5343939887789609f218820ca0266f3..fd32c48474f8813294ac4637f106dfb8254b48a7 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
@@ -142,7 +142,7 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->quoteRepository = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepository = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/GuestPaymentInformationManagementTest.php b/app/code/Magento/Checkout/Test/Unit/Model/GuestPaymentInformationManagementTest.php
index 756ab3e7861aaec98c14cfa6db6eb5c24ae8529f..a5e0a6ce00ecc8f9effeaca84e0931773d229710 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/GuestPaymentInformationManagementTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/GuestPaymentInformationManagementTest.php
@@ -47,8 +47,7 @@ class GuestPaymentInformationManagementTest extends \PHPUnit_Framework_TestCase
             '\Magento\Quote\Api\GuestPaymentMethodManagementInterface'
         );
         $this->cartManagementMock = $this->getMock('\Magento\Quote\Api\GuestCartManagementInterface');
-
-        $this->cartRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->cartRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
 
         $this->quoteIdMaskFactoryMock = $this->getMock(
             'Magento\Quote\Model\QuoteIdMaskFactory',
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/SessionTest.php b/app/code/Magento/Checkout/Test/Unit/Model/SessionTest.php
index 377365e9294d21c82a5c3c6840789caeeffcaa87..cb941b305d1498d8035933c5accce47aba624cf1 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/SessionTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/SessionTest.php
@@ -48,9 +48,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $quoteRepository = $this->getMockBuilder('Magento\Quote\Model\QuoteRepository')
-            ->disableOriginalConstructor()
-            ->getMock();
+        $quoteRepository = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
 
         $appState = $this->getMock('\Magento\Framework\App\State', [], [], '', false);
         $appState->expects($this->any())->method('isInstalled')->will($this->returnValue(true));
@@ -160,13 +158,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
         $order->expects($this->once())->method('getId')->will($this->returnValue($hasOrderId ? 'order id' : null));
         $orderFactory = $this->getMock('Magento\Sales\Model\OrderFactory', ['create'], [], '', false);
         $orderFactory->expects($this->once())->method('create')->will($this->returnValue($order));
-        $quoteRepository = $this->getMock(
-            'Magento\Quote\Model\QuoteRepository',
-            ['get', 'save'],
-            [],
-            '',
-            false
-        );
+        $quoteRepository = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $storage = $this->getMock('Magento\Framework\Session\Storage', null);
         $store = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
         $storeManager = $this->getMockForAbstractClass('Magento\Store\Model\StoreManagerInterface');
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/ShippingInformationManagementTest.php b/app/code/Magento/Checkout/Test/Unit/Model/ShippingInformationManagementTest.php
index 552acbb01097b9a30b83fabb3da8aa910c9e8226..714fb048ec5ba81570fe9dc4b0ee83930145e336 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/ShippingInformationManagementTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/ShippingInformationManagementTest.php
@@ -80,7 +80,7 @@ class ShippingInformationManagementTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->cartTotalsRepositoryMock = $this->getMock('\Magento\Quote\Api\CartTotalRepositoryInterface');
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->addressValidatorMock = $this->getMock('\Magento\Quote\Model\QuoteAddressValidator', [], [], '', false);
         $this->loggerMock = $this->getMock('\Psr\Log\LoggerInterface');
         $this->addressRepositoryMock = $this->getMock('\Magento\Customer\Api\AddressRepositoryInterface');
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php b/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
index 15275b9c11905052e18b7e4b776d2532bde7974e..2d5aaa1a8e120f771eeb0d1f75d5e678675cb495 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
@@ -87,7 +87,7 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Customer\Api\CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $customerRepositoryMock;
 
-    /** @var \Magento\Quote\Model\QuoteRepository|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Quote\Api\CartRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $quoteRepositoryMock;
 
     /**
@@ -142,7 +142,7 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
         $this->addressFactoryMock = $this->getMock('Magento\Customer\Model\AddressFactory', [], [], '', false);
         $this->formFactoryMock = $this->getMock('Magento\Customer\Model\Metadata\FormFactory', [], [], '', false);
         $this->customerFactoryMock = $this->getMock('Magento\Customer\Model\CustomerFactory', [], [], '', false);
-        $this->quoteManagementMock = $this->getMock('Magento\Quote\Model\QuoteManagement', [], [], '', false);
+        $this->quoteManagementMock = $this->getMock('\Magento\Quote\Api\CartManagementInterface');
         $this->orderFactoryMock = $this->getMock('Magento\Sales\Model\OrderFactory', ['create'], [], '', false);
         $this->copyMock = $this->getMock('Magento\Framework\DataObject\Copy', [], [], '', false);
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\ManagerInterface');
@@ -181,13 +181,7 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->quoteRepositoryMock = $this->getMock(
-            'Magento\Quote\Model\QuoteRepository',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
 
         $this->extensibleDataObjectConverterMock = $this->getMockBuilder(
             'Magento\Framework\Api\ExtensibleDataObjectConverter'
diff --git a/app/code/Magento/Checkout/etc/webapi.xml b/app/code/Magento/Checkout/etc/webapi.xml
index f0312ec1776cfa4ebcec86276e1c00b3a438c3f6..7b3b2864aa0f444ca948b1f148716755a7d37d3e 100644
--- a/app/code/Magento/Checkout/etc/webapi.xml
+++ b/app/code/Magento/Checkout/etc/webapi.xml
@@ -9,7 +9,7 @@
         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
 
     <!-- Managing shipping guest information -->
-    <route url="/V1/carts/:cartId/shipping-information" method="POST">
+    <route url="/V1/guest-carts/:cartId/shipping-information" method="POST">
         <service class="Magento\Checkout\Api\GuestShippingInformationManagementInterface" method="saveAddressInformation"/>
         <resources>
             <resource ref="anonymous" />
@@ -27,6 +27,14 @@
         </data>
     </route>
 
+    <!-- Managing shipping information-->
+    <route url="/V1/carts/:cartId/shipping-information" method="POST">
+        <service class="Magento\Checkout\Api\ShippingInformationManagementInterface" method="saveAddressInformation"/>
+        <resources>
+            <resource ref="Magento_Cart::manage" />
+        </resources>
+    </route>
+
     <!-- Managing totals information -->
     <route url="/V1/carts/:cartId/totals-information" method="POST">
         <service class="Magento\Checkout\Api\TotalsInformationManagementInterface" method="calculate"/>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/resource-url-manager.js b/app/code/Magento/Checkout/view/frontend/web/js/model/resource-url-manager.js
index cc67ebb0788734a67556885ca13ab0f38839e9e4..33407345ab57174949b245cedc4658939b7452e7 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/resource-url-manager.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/resource-url-manager.js
@@ -69,7 +69,7 @@ define(
             getUrlForSetShippingInformation: function(quote) {
                 var params = (this.getCheckoutMethod() == 'guest') ? {cartId: quote.getQuoteId()} : {};
                 var urls = {
-                    'guest': '/carts/:cartId/shipping-information',
+                    'guest': '/guest-carts/:cartId/shipping-information',
                     'customer': '/carts/mine/shipping-information'
                 };
                 return this.getUrl(urls, params);
diff --git a/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php b/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
index daab7a643e9f3d0805fd3ef08cd3f3dd0f6d1e07..e1c619332339fd1ca64bfa7e1db531fbe751307e 100644
--- a/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
+++ b/app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php
@@ -24,18 +24,18 @@ class Validation
     protected $checkoutAgreementsRepository;
 
     /**
-     * @var \Magento\CheckoutAgreements\Model\AgreementsValidator
+     * @var \Magento\Checkout\Api\AgreementsValidatorInterface
      */
     protected $agreementsValidator;
 
     /**
-     * @param \Magento\CheckoutAgreements\Model\AgreementsValidator $agreementsValidator
+     * @param \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
      * @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\CheckoutAgreements\Model\AgreementsValidator $agreementsValidator,
+        \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration,
         \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
     ) {
diff --git a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/Checkout/Plugin/ValidationTest.php b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/Checkout/Plugin/ValidationTest.php
index 6889aa987d9e4ff18cc107325ddc9e5c21af604a..beab6679ed594ec2c7d8eb2c111ac6b9adc58f01 100644
--- a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/Checkout/Plugin/ValidationTest.php
+++ b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/Checkout/Plugin/ValidationTest.php
@@ -52,13 +52,7 @@ class ValidationTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->agreementsValidatorMock = $this->getMock(
-            '\Magento\CheckoutAgreements\Model\AgreementsValidator',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->agreementsValidatorMock = $this->getMock('\Magento\Checkout\Api\AgreementsValidatorInterface');
         $this->subjectMock = $this->getMock('\Magento\Checkout\Api\PaymentInformationManagementInterface');
         $this->paymentMock = $this->getMock('\Magento\Quote\Api\Data\PaymentInterface');
         $this->addressMock = $this->getMock('\Magento\Quote\Api\Data\AddressInterface');
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Cart.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Cart.php
index 9f99ffd9339462f5692d169df9e2aeea0601f837..8e61f5300dc0c8d1b5420f4dfbc018328290a7e1 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Cart.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Cart.php
@@ -27,7 +27,7 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_dataCollectionFactory;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -41,25 +41,33 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
      */
     protected $_parentTemplate;
 
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\Data\CollectionFactory $dataCollectionFactory
      * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\Data\CollectionFactory $dataCollectionFactory,
         \Magento\Framework\Registry $coreRegistry,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory,
         array $data = []
     ) {
         $this->_dataCollectionFactory = $dataCollectionFactory;
         $this->_coreRegistry = $coreRegistry;
         $this->quoteRepository = $quoteRepository;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct($context, $backendHelper, $data);
     }
 
@@ -230,7 +238,7 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
             try {
                 $this->quote = $this->quoteRepository->getForCustomer($customerId, $storeIds);
             } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
-                $this->quote = $this->quoteRepository->create()->setSharedStoreIds($storeIds);
+                $this->quote = $this->quoteFactory->create()->setSharedStoreIds($storeIds);
             }
         }
         return $this->quote;
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Cart.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Cart.php
index b2adb0316d2ab6241e6d08f535627ed0c9d9aa00..734d0f1fa66ba71f59a8c7128c827e75b62769d8 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Cart.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Cart.php
@@ -28,7 +28,7 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_dataCollectionFactory;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -38,26 +38,32 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $quote = null;
 
     /**
-     * Constructor
-     *
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
+    /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\Data\CollectionFactory $dataCollectionFactory
      * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\Data\CollectionFactory $dataCollectionFactory,
         \Magento\Framework\Registry $coreRegistry,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory,
         array $data = []
     ) {
         $this->_dataCollectionFactory = $dataCollectionFactory;
         $this->_coreRegistry = $coreRegistry;
         $this->quoteRepository = $quoteRepository;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct($context, $backendHelper, $data);
     }
 
@@ -159,7 +165,7 @@ class Cart extends \Magento\Backend\Block\Widget\Grid\Extended
     {
         if (null == $this->quote) {
             $storeIds = $this->_storeManager->getWebsite($this->getWebsiteId())->getStoreIds();
-            $this->quote = $this->quoteRepository->create()->setSharedStoreIds($storeIds);
+            $this->quote = $this->quoteFactory->create()->setSharedStoreIds($storeIds);
 
             $currentCustomerId = $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID);
             if (!empty($currentCustomerId)) {
diff --git a/app/code/Magento/Customer/Block/Form/Register.php b/app/code/Magento/Customer/Block/Form/Register.php
index e6e77a075a8274e0a0315e12802158e53b64cd43..4c3f28f819261ae96ccfdbca93907ff32c25c5d7 100644
--- a/app/code/Magento/Customer/Block/Form/Register.php
+++ b/app/code/Magento/Customer/Block/Form/Register.php
@@ -63,7 +63,7 @@ class Register extends \Magento\Directory\Block\Data
             $countryCollectionFactory,
             $data
         );
-        $this->_isScopePrivate = true;
+        $this->_isScopePrivate = false;
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart.php b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart.php
index 449dd9c00d4befa2ab966e3fb11416dd3af7eaf1..6032048815cf68018e326b47d4c58d224563f2c6 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart.php
@@ -37,19 +37,27 @@ abstract class Cart extends \Magento\Backend\App\Action
     protected $_quoteItem = null;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param Action\Context $context
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      */
     public function __construct(
         Action\Context $context,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory
     ) {
         $this->quoteRepository = $quoteRepository;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct($context);
     }
 
@@ -72,7 +80,7 @@ abstract class Cart extends \Magento\Backend\App\Action
         try {
             $this->_quote = $this->quoteRepository->getForCustomer($this->_customerId);
         } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
-            $this->_quote = $this->quoteRepository->create();
+            $this->_quote = $this->quoteFactory->create();
         }
         $this->_quote->setWebsite(
             $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getWebsite($websiteId)
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
index ff39bf28ac3ac48247c305ae55473e45fba44118..2cc45d0750f820dec4be409847a17238936e1ef2 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
@@ -22,13 +22,13 @@ class Cart extends \Magento\Customer\Controller\Adminhtml\Index
         // delete an item from cart
         $deleteItemId = $this->getRequest()->getPost('delete');
         if ($deleteItemId) {
-            /** @var \Magento\Quote\Model\QuoteRepository $quoteRepository */
-            $quoteRepository = $this->_objectManager->create('Magento\Quote\Model\QuoteRepository');
+            /** @var \Magento\Quote\Api\CartRepositoryInterface $quoteRepository */
+            $quoteRepository = $this->_objectManager->create('Magento\Quote\Api\CartRepositoryInterface');
             /** @var \Magento\Quote\Model\Quote $quote */
             try {
                 $quote = $quoteRepository->getForCustomer($customerId);
             } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
-                $quote = $quoteRepository->create();
+                $quote = $this->_objectManager->create('\Magento\Quote\Model\QuoteFactory')->create();
             }
             $quote->setWebsite(
                 $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getWebsite($websiteId)
diff --git a/app/code/Magento/GiftMessage/Model/CartRepository.php b/app/code/Magento/GiftMessage/Model/CartRepository.php
index cc2ae7caae30c418d96662d0215f15e316e61f1a..760c47eef5cf57baf75a871c076cace1b43d57f5 100644
--- a/app/code/Magento/GiftMessage/Model/CartRepository.php
+++ b/app/code/Magento/GiftMessage/Model/CartRepository.php
@@ -19,7 +19,7 @@ class CartRepository implements \Magento\GiftMessage\Api\CartRepositoryInterface
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -52,14 +52,14 @@ class CartRepository implements \Magento\GiftMessage\Api\CartRepositoryInterface
     protected $messageFactory;
 
     /**
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param GiftMessageManager $giftMessageManager
      * @param \Magento\GiftMessage\Helper\Message $helper
      * @param MessageFactory $messageFactory
      */
     public function __construct(
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\GiftMessage\Model\GiftMessageManager $giftMessageManager,
         \Magento\GiftMessage\Helper\Message $helper,
diff --git a/app/code/Magento/GiftMessage/Model/ItemRepository.php b/app/code/Magento/GiftMessage/Model/ItemRepository.php
index 5c667b3052bd96c4bc032f924a1260fd14cf0714..d7ebf051a1c8fcc18753c79e7193fd1bf90310ce 100644
--- a/app/code/Magento/GiftMessage/Model/ItemRepository.php
+++ b/app/code/Magento/GiftMessage/Model/ItemRepository.php
@@ -20,7 +20,7 @@ class ItemRepository implements \Magento\GiftMessage\Api\ItemRepositoryInterface
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -53,14 +53,14 @@ class ItemRepository implements \Magento\GiftMessage\Api\ItemRepositoryInterface
     protected $messageFactory;
 
     /**
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param GiftMessageManager $giftMessageManager
      * @param \Magento\GiftMessage\Helper\Message $helper
      * @param MessageFactory $messageFactory
      */
     public function __construct(
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\GiftMessage\Model\GiftMessageManager $giftMessageManager,
         \Magento\GiftMessage\Helper\Message $helper,
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
index 3ad550304fb43c9e5348506a856c33a5ed286bdb..598861b2f4a0b89ec84a0810b493fe753518399c 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
@@ -69,7 +69,7 @@ class CartRepositoryTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->messageFactoryMock = $this->getMock(
             'Magento\GiftMessage\Model\MessageFactory',
             [
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
index b20bf7bc9c43a1656e60ce27207fc464aadb2a12..51e4e7795fdb5e236e741935e9e1b7cd5bbf9162 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/GuestItemRepositoryTest.php
@@ -69,7 +69,7 @@ class GuestItemRepositoryTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->messageFactoryMock = $this->getMock(
             'Magento\GiftMessage\Model\MessageFactory',
             [
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
index 999783fb546b92a641732ce9e1e02c1e69cdb06c..3c1204fd1bc835252271677d3cfb3606e5e694f6 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
@@ -69,7 +69,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->messageFactoryMock = $this->getMock(
             'Magento\GiftMessage\Model\MessageFactory',
             [
diff --git a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
index b56d7b532df76e618588ade7e7fe563cdca47087..3c92d5594490fe7ee6afc8057a8a57d6f483456a 100644
--- a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
+++ b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php
@@ -100,7 +100,7 @@ class Multishipping extends \Magento\Framework\DataObject
     protected $priceCurrency;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -157,7 +157,7 @@ class Multishipping extends \Magento\Framework\DataObject
      * @param \Magento\Multishipping\Helper\Data $helper
      * @param OrderSender $orderSender
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
      * @param \Magento\Framework\Api\FilterBuilder $filterBuilder
      * @param \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector
@@ -182,7 +182,7 @@ class Multishipping extends \Magento\Framework\DataObject
         \Magento\Multishipping\Helper\Data $helper,
         OrderSender $orderSender,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
         \Magento\Framework\Api\FilterBuilder $filterBuilder,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector,
@@ -289,35 +289,8 @@ class Multishipping extends \Magento\Framework\DataObject
         if ($this->_quoteShippingAddressesItems !== null) {
             return $this->_quoteShippingAddressesItems;
         }
-        $items = [];
-        $addresses = $this->getQuote()->getAllAddresses();
-        foreach ($addresses as $address) {
-            foreach ($address->getAllItems() as $item) {
-                if ($item->getParentItemId()) {
-                    continue;
-                }
-                if ($item->getProduct()->getIsVirtual()) {
-                    $items[] = $item;
-                    continue;
-                }
-                if ($item->getQty() > 1) {
-                    for ($i = 0, $n = $item->getQty(); $i < $n; $i++) {
-                        if ($i == 0) {
-                            $addressItem = $item;
-                        } else {
-                            $addressItem = clone $item;
-                        }
-                        $addressItem->setQty(1)->setCustomerAddressId($address->getCustomerAddressId())->save();
-                        $items[] = $addressItem;
-                    }
-                } else {
-                    $item->setCustomerAddressId($address->getCustomerAddressId());
-                    $items[] = $item;
-                }
-            }
-        }
-        $this->_quoteShippingAddressesItems = $items;
-        return $items;
+        $this->_quoteShippingAddressesItems = $this->getQuote()->getShippingAddressesItems();
+        return $this->_quoteShippingAddressesItems;
     }
 
     /**
diff --git a/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php b/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php
index cb72f0b778a04bc35e2b1c3a754dd5029aa152eb..23afb4bef143722a830ef1aa3a634d34c33cce67 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php
@@ -75,7 +75,7 @@ class MultishippingTest extends \PHPUnit_Framework_TestCase
         $this->helperMock = $this->getMock('\Magento\Multishipping\Helper\Data', [], [], '', false);
         $orderSenderMock = $this->getMock('\Magento\Sales\Model\Order\Email\Sender\OrderSender', [], [], '', false);
         $priceMock = $this->getMock('\Magento\Framework\Pricing\PriceCurrencyInterface', [], [], '', false);
-        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->filterBuilderMock = $this->getMock('\Magento\Framework\Api\FilterBuilder', [], [], '', false);
         $this->searchCriteriaBuilderMock = $this->getMock(
             '\Magento\Framework\Api\SearchCriteriaBuilder',
@@ -260,4 +260,12 @@ class MultishippingTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($this->model, $this->model->setQuoteCustomerBillingAddress($addressId));
     }
+
+    public function testGetQuoteShippingAddressesItems()
+    {
+        $quoteItem = $this->getMock('Magento\Quote\Model\Quote\Address\Item', [], [], '', false);
+        $this->checkoutSessionMock->expects($this->once())->method('getQuote')->willReturn($this->quoteMock);
+        $this->quoteMock->expects($this->once())->method('getShippingAddressesItems')->willReturn($quoteItem);
+        $this->model->getQuoteShippingAddressesItems();
+    }
 }
diff --git a/app/code/Magento/Payment/Test/Unit/Gateway/Data/Quote/QuoteAdapterTest.php b/app/code/Magento/Payment/Test/Unit/Gateway/Data/Quote/QuoteAdapterTest.php
index 019dcf03ef3fc563a2e8647ba7ffde3323fae5ae..1044bb8d4e792de1ef7233ecbe7743283d00d4c9 100644
--- a/app/code/Magento/Payment/Test/Unit/Gateway/Data/Quote/QuoteAdapterTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Gateway/Data/Quote/QuoteAdapterTest.php
@@ -29,8 +29,7 @@ class QuoteAdapterTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->quoteMock = $this->getMockBuilder('Magento\Quote\Api\Data\CartInterface')
-            ->getMockForAbstractClass();
+        $this->quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
 
         $this->addressAdapterFactoryMock =
             $this->getMockBuilder('Magento\Payment\Gateway\Data\Quote\AddressAdapterFactory')
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
index ca53012f5346d1a202c42438b3d085f757a1be8d..66cca6c22ecd21583501657cb9c954f538e7df35 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
@@ -9,7 +9,7 @@ namespace Magento\Paypal\Controller\Express\AbstractExpress;
 class ShippingOptionsCallback extends \Magento\Paypal\Controller\Express\AbstractExpress
 {
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -22,7 +22,7 @@ class ShippingOptionsCallback extends \Magento\Paypal\Controller\Express\Abstrac
      * @param \Magento\Framework\Session\Generic $paypalSession
      * @param \Magento\Framework\Url\Helper\Data $urlHelper
      * @param \Magento\Customer\Model\Url $customerUrl
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      */
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
@@ -33,7 +33,7 @@ class ShippingOptionsCallback extends \Magento\Paypal\Controller\Express\Abstrac
         \Magento\Framework\Session\Generic $paypalSession,
         \Magento\Framework\Url\Helper\Data $urlHelper,
         \Magento\Customer\Model\Url $customerUrl,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         $this->quoteRepository = $quoteRepository;
         parent::__construct(
diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php
index d3b0cf72fc76bf9047b4a82e4cdc663380834123..2df901f5ce5199b1d3478d1e12aa6cd173e3efe6 100644
--- a/app/code/Magento/Paypal/Model/Express/Checkout.php
+++ b/app/code/Magento/Paypal/Model/Express/Checkout.php
@@ -260,12 +260,12 @@ class Checkout
     protected $paypalQuote;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
     /**
-     * @var \Magento\Quote\Model\QuoteManagement
+     * @var \Magento\Quote\Api\CartManagementInterface
      */
     protected $quoteManagement;
 
@@ -287,7 +287,7 @@ class Checkout
      * @param \Magento\Framework\UrlInterface $coreUrl
      * @param \Magento\Paypal\Model\CartFactory $cartFactory
      * @param \Magento\Checkout\Model\Type\OnepageFactory $onepageFactory
-     * @param \Magento\Quote\Model\QuoteManagement $quoteManagement
+     * @param \Magento\Quote\Api\CartManagementInterface $quoteManagement
      * @param \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory
      * @param \Magento\Paypal\Model\Api\Type\Factory $apiTypeFactory
      * @param DataObject\Copy $objectCopyService
@@ -298,7 +298,7 @@ class Checkout
      * @param AccountManagement $accountManagement
      * @param PaypalQuote $paypalQuote
      * @param OrderSender $orderSender
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector
      * @param array $params
      * @throws \Exception
@@ -317,7 +317,7 @@ class Checkout
         \Magento\Framework\UrlInterface $coreUrl,
         \Magento\Paypal\Model\CartFactory $cartFactory,
         \Magento\Checkout\Model\Type\OnepageFactory $onepageFactory,
-        \Magento\Quote\Model\QuoteManagement $quoteManagement,
+        \Magento\Quote\Api\CartManagementInterface $quoteManagement,
         \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory,
         \Magento\Paypal\Model\Api\Type\Factory $apiTypeFactory,
         \Magento\Framework\DataObject\Copy $objectCopyService,
@@ -328,7 +328,7 @@ class Checkout
         AccountManagement $accountManagement,
         PaypalQuote $paypalQuote,
         OrderSender $orderSender,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector,
         $params = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflow/Service/Response/Transaction.php b/app/code/Magento/Paypal/Model/Payflow/Service/Response/Transaction.php
index 03525721e42fd772cc4dbb6c964d3fb2f5dcf57c..899a4f4c0ac89e85f6a812eb0b396de1fe242046 100644
--- a/app/code/Magento/Paypal/Model/Payflow/Service/Response/Transaction.php
+++ b/app/code/Magento/Paypal/Model/Payflow/Service/Response/Transaction.php
@@ -11,7 +11,7 @@ use Magento\Payment\Model\Method\Logger;
 use Magento\Paypal\Model\Payflow\Service\Response\Handler\HandlerInterface;
 use Magento\Framework\Session\Generic;
 use Magento\Payment\Model\InfoInterface;
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Paypal\Model\Payflow\Transparent;
 use Magento\Quote\Api\PaymentMethodManagementInterface;
 
@@ -26,7 +26,7 @@ class Transaction
     protected $sessionTransparent;
 
     /**
-     * @var QuoteRepository
+     * @var CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -54,7 +54,7 @@ class Transaction
      * Constructor
      *
      * @param Generic $sessionTransparent
-     * @param QuoteRepository $quoteRepository
+     * @param CartRepositoryInterface $quoteRepository
      * @param Transparent $transparent
      * @param PaymentMethodManagementInterface $paymentManagement
      * @param HandlerInterface $errorHandler
@@ -62,7 +62,7 @@ class Transaction
      */
     public function __construct(
         Generic $sessionTransparent,
-        QuoteRepository $quoteRepository,
+        CartRepositoryInterface $quoteRepository,
         Transparent $transparent,
         PaymentMethodManagementInterface $paymentManagement,
         HandlerInterface $errorHandler,
diff --git a/app/code/Magento/Paypal/Model/Payflow/Service/Response/Validator/AbstractFilterValidator.php b/app/code/Magento/Paypal/Model/Payflow/Service/Response/Validator/AbstractFilterValidator.php
index 1a0b550b7f0d41f143c738c0cf5009f836b7de9c..13fc20ac06cf6185ceb4d9abe91d330e1f41a5ac 100644
--- a/app/code/Magento/Paypal/Model/Payflow/Service/Response/Validator/AbstractFilterValidator.php
+++ b/app/code/Magento/Paypal/Model/Payflow/Service/Response/Validator/AbstractFilterValidator.php
@@ -6,7 +6,7 @@
 namespace Magento\Paypal\Model\Payflow\Service\Response\Validator;
 
 use Magento\Framework\Session\Generic;
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Payment\Model\Method\ConfigInterface;
 use Magento\Quote\Api\PaymentMethodManagementInterface;
 
@@ -16,7 +16,7 @@ use Magento\Quote\Api\PaymentMethodManagementInterface;
 abstract class AbstractFilterValidator
 {
     /**
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -34,11 +34,11 @@ abstract class AbstractFilterValidator
      * Constructor
      *
      * @param Generic $sessionTransparent
-     * @param QuoteRepository $quoteRepository
+     * @param CartRepositoryInterface $quoteRepository
      * @param PaymentMethodManagementInterface $paymentManagement
      */
     public function __construct(
-        QuoteRepository $quoteRepository,
+        CartRepositoryInterface $quoteRepository,
         Generic $sessionTransparent,
         PaymentMethodManagementInterface $paymentManagement
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflowlink.php b/app/code/Magento/Paypal/Model/Payflowlink.php
index 91513032674c6250ab1a55306609cb533e432932..b8b64e481932c9a6db3d0cc08429d42d90f5f8e2 100644
--- a/app/code/Magento/Paypal/Model/Payflowlink.php
+++ b/app/code/Magento/Paypal/Model/Payflowlink.php
@@ -92,7 +92,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
     protected $_requestFactory;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -127,7 +127,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
      * @param HandlerInterface $errorHandler
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param Payflow\RequestFactory $requestFactory
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
@@ -153,7 +153,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
         HandlerInterface $errorHandler,
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Paypal\Model\Payflow\RequestFactory $requestFactory,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php
index b81b9acce9e089c67e54e8f6117d72fb67fc3ce0..14d2412226922c8e34c7de8f977a009b07162cf2 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php
@@ -26,7 +26,7 @@ class TransactionTest extends \PHPUnit_Framework_TestCase
     protected $sessionTransparent;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Quote\Model\QuoteRepository
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -53,7 +53,7 @@ class TransactionTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->sessionTransparent = $this->getMock('Magento\Framework\Session\Generic', ['getQuoteId'], [], '', false);
-        $this->quoteRepository = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepository = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->transparent = $this->getMock('Magento\Paypal\Model\Payflow\Transparent', [], [], '', false);
         $this->paymentMethodManagementInterface = $this->getMock(
             'Magento\Quote\Api\PaymentMethodManagementInterface',
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/AVSResponseTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/AVSResponseTest.php
index 745ae62f8be19899d18bbff6c681d4a9d2fc91be..830f8022ac459df02177b72358e0fc272c7b51ad 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/AVSResponseTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/AVSResponseTest.php
@@ -31,9 +31,7 @@ class AVSResponseTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $quoteRepositoryMock = $this->getMockBuilder('Magento\Quote\Model\QuoteRepository')
-            ->disableOriginalConstructor()
-            ->getMock();
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $sessionTransparentMock = $this->getMockBuilder('Magento\Framework\Session\Generic')
             ->setMethods(['getQuoteId'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/CVV2MatchTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/CVV2MatchTest.php
index 4202cd7080ec5f46ac89212ca5f721b90375802f..7f45469cfd0fe5d8dcea22d359e85e72c95d169b 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/CVV2MatchTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/Validator/CVV2MatchTest.php
@@ -31,9 +31,7 @@ class CVV2MatchTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $quoteRepositoryMock = $this->getMockBuilder('Magento\Quote\Model\QuoteRepository')
-            ->disableOriginalConstructor()
-            ->getMock();
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $sessionTransparentMock = $this->getMockBuilder('Magento\Framework\Session\Generic')
             ->setMethods(['getQuoteId'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Persistent/Model/QuoteManager.php b/app/code/Magento/Persistent/Model/QuoteManager.php
index a594a0d734120755a11f007834c51d48b5981cfe..bbf5667ea6423c994296b2e21c6957f699c32e4d 100644
--- a/app/code/Magento/Persistent/Model/QuoteManager.php
+++ b/app/code/Magento/Persistent/Model/QuoteManager.php
@@ -39,7 +39,7 @@ class QuoteManager
     protected $_setQuotePersistent = true;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -47,13 +47,13 @@ class QuoteManager
      * @param \Magento\Persistent\Helper\Session $persistentSession
      * @param \Magento\Persistent\Helper\Data $persistentData
      * @param \Magento\Checkout\Model\Session $checkoutSession
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      */
     public function __construct(
         \Magento\Persistent\Helper\Session $persistentSession,
         \Magento\Persistent\Helper\Data $persistentData,
         \Magento\Checkout\Model\Session $checkoutSession,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         $this->persistentSession = $persistentSession;
         $this->persistentData = $persistentData;
diff --git a/app/code/Magento/Persistent/Test/Unit/Model/QuoteManagerTest.php b/app/code/Magento/Persistent/Test/Unit/Model/QuoteManagerTest.php
index b34259efc21ad9ece92cff34206e3826df18adf9..51c44b5bbfae72706409bb3ca8d1a8076bdf48e1 100644
--- a/app/code/Magento/Persistent/Test/Unit/Model/QuoteManagerTest.php
+++ b/app/code/Magento/Persistent/Test/Unit/Model/QuoteManagerTest.php
@@ -76,9 +76,7 @@ class QuoteManagerTest extends \PHPUnit_Framework_TestCase
         $this->abstractCollectionMock =
             $this->getMock('Magento\Eav\Model\Entity\Collection\AbstractCollection', [], [], '', false);
 
-        $this->quoteRepositoryMock =
-            $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
-
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->quoteMock = $this->getMock('Magento\Quote\Model\Quote',
             [
                 'getId',
diff --git a/app/code/Magento/Quote/Api/CartRepositoryInterface.php b/app/code/Magento/Quote/Api/CartRepositoryInterface.php
index ff00459a79136454d6eb91bec905506a264ebd80..7fcaa869b5ec1d282e068e21225fd7201fbb1eca 100644
--- a/app/code/Magento/Quote/Api/CartRepositoryInterface.php
+++ b/app/code/Magento/Quote/Api/CartRepositoryInterface.php
@@ -27,4 +27,50 @@ interface CartRepositoryInterface
      * @return \Magento\Quote\Api\Data\CartSearchResultsInterface
      */
     public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
+
+    /**
+     * Get quote by customer Id
+     *
+     * @param int $customerId
+     * @param int[] $sharedStoreIds
+     * @return \Magento\Quote\Api\Data\CartInterface
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function getForCustomer($customerId, array $sharedStoreIds = []);
+
+    /**
+     * Get active quote by id
+     *
+     * @param int $cartId
+     * @param int[] $sharedStoreIds
+     * @return \Magento\Quote\Api\Data\CartInterface
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function getActive($cartId, array $sharedStoreIds = []);
+
+    /**
+     * Get active quote by customer Id
+     *
+     * @param int $customerId
+     * @param int[] $sharedStoreIds
+     * @return \Magento\Quote\Api\Data\CartInterface
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function getActiveForCustomer($customerId, array $sharedStoreIds = []);
+
+    /**
+     * Save quote
+     *
+     * @param \Magento\Quote\Api\Data\CartInterface $quote
+     * @return void
+     */
+    public function save(\Magento\Quote\Api\Data\CartInterface $quote);
+
+    /**
+     * Delete quote
+     *
+     * @param \Magento\Quote\Api\Data\CartInterface $quote
+     * @return void
+     */
+    public function delete(\Magento\Quote\Api\Data\CartInterface $quote);
 }
diff --git a/app/code/Magento/Quote/Api/Data/CartInterface.php b/app/code/Magento/Quote/Api/Data/CartInterface.php
index a663618a0b81fba68dca3b123ee9f0b43466e243..17489d01d4edf6db9a3e922ae76de6c2d23604ee 100644
--- a/app/code/Magento/Quote/Api/Data/CartInterface.php
+++ b/app/code/Magento/Quote/Api/Data/CartInterface.php
@@ -202,36 +202,6 @@ interface CartInterface extends \Magento\Framework\Api\ExtensibleDataInterface
      */
     public function setCustomer(\Magento\Customer\Api\Data\CustomerInterface $customer = null);
 
-    /**
-     * Returns the payment method that is used to process the cart.
-     *
-     * @return string|null Payment method. Otherwise, null.
-     */
-    public function getCheckoutMethod();
-
-    /**
-     * Sets the payment method that is used to process the cart.
-     *
-     * @param string $checkoutMethod
-     * @return $this
-     */
-    public function setCheckoutMethod($checkoutMethod);
-
-    /**
-     * Returns the cart shipping address.
-     *
-     * @return \Magento\Quote\Api\Data\AddressInterface|null Cart shipping address. Otherwise, null.
-     */
-    public function getShippingAddress();
-
-    /**
-     * Sets the cart shipping address.
-     *
-     * @param \Magento\Quote\Api\Data\AddressInterface $shippingAddress
-     * @return $this
-     */
-    public function setShippingAddress(\Magento\Quote\Api\Data\AddressInterface $shippingAddress = null);
-
     /**
      * Returns the cart billing address.
      *
diff --git a/app/code/Magento/Quote/Api/GuestShippingMethodManagementInterface.php b/app/code/Magento/Quote/Api/GuestShippingMethodManagementInterface.php
index 29c4a07ca8d46c9d85d9f1a901c9303a86eaec3e..883a7b4e1acdde0e1cf49325a5d0eea3e871289e 100644
--- a/app/code/Magento/Quote/Api/GuestShippingMethodManagementInterface.php
+++ b/app/code/Magento/Quote/Api/GuestShippingMethodManagementInterface.php
@@ -11,31 +11,6 @@ namespace Magento\Quote\Api;
  */
 interface GuestShippingMethodManagementInterface
 {
-    /**
-     * Set the carrier and shipping methods codes for a specified cart.
-     *
-     * @param string $cartId The shopping cart ID.
-     * @param string $carrierCode The carrier code.
-     * @param string $methodCode The shipping method code.
-     * @return bool
-     * @throws \Magento\Framework\Exception\InputException The shipping method is not valid for an empty cart.
-     * @throws \Magento\Framework\Exception\CouldNotSaveException The shipping method could not be saved.
-     * @throws \Magento\Framework\Exception\StateException The billing or shipping address is not set.
-     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified cart contains only virtual products
-     * so the shipping method does not apply.
-     */
-    public function set($cartId, $carrierCode, $methodCode);
-
-    /**
-     * Return selected shipping method for a specified quote.
-     *
-     * @param string $cartId The shopping cart ID.
-     * @return \Magento\Quote\Api\Data\ShippingMethodInterface Shipping method.
-     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified shopping cart does not exist.
-     * @throws \Magento\Framework\Exception\StateException The shipping address is not set.
-     */
-    public function get($cartId);
-
     /**
      * List applicable shipping methods for a specified quote.
      *
diff --git a/app/code/Magento/Quote/Api/ShippingMethodManagementInterface.php b/app/code/Magento/Quote/Api/ShippingMethodManagementInterface.php
index e9edbf4241fd0fa6d0decfeacad347b10aa2c04a..41aa4e5719ff631ffde068c9d5a133647253eb2d 100644
--- a/app/code/Magento/Quote/Api/ShippingMethodManagementInterface.php
+++ b/app/code/Magento/Quote/Api/ShippingMethodManagementInterface.php
@@ -11,21 +11,6 @@ namespace Magento\Quote\Api;
  */
 interface ShippingMethodManagementInterface
 {
-    /**
-     * Sets the carrier and shipping methods codes for a specified cart.
-     *
-     * @param int $cartId The shopping cart ID.
-     * @param string $carrierCode The carrier code.
-     * @param string $methodCode The shipping method code.
-     * @return bool
-     * @throws \Magento\Framework\Exception\InputException The shipping method is not valid for an empty cart.
-     * @throws \Magento\Framework\Exception\CouldNotSaveException The shipping method could not be saved.
-     * @throws \Magento\Framework\Exception\StateException The billing or shipping address is not set.
-     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified cart contains only virtual products
-     * so the shipping method does not apply.
-     */
-    public function set($cartId, $carrierCode, $methodCode);
-
     /**
      * Estimate shipping
      *
@@ -44,16 +29,6 @@ interface ShippingMethodManagementInterface
      */
     public function estimateByAddressId($cartId, $addressId);
 
-    /**
-     * Returns selected shipping method for a specified quote.
-     *
-     * @param int $cartId The shopping cart ID.
-     * @return \Magento\Quote\Api\Data\ShippingMethodInterface Shipping method.
-     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified shopping cart does not exist.
-     * @throws \Magento\Framework\Exception\StateException The shipping address is not set.
-     */
-    public function get($cartId);
-
     /**
      * Lists applicable shipping methods for a specified quote.
      *
diff --git a/app/code/Magento/Quote/Model/BillingAddressManagement.php b/app/code/Magento/Quote/Model/BillingAddressManagement.php
index 02c8046d6880514533be508a9819751708dcac27..1c9dd809f89c7619b84dac57d39ddbed43240fd3 100644
--- a/app/code/Magento/Quote/Model/BillingAddressManagement.php
+++ b/app/code/Magento/Quote/Model/BillingAddressManagement.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model;
 
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Framework\Exception\InputException;
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Quote\Api\BillingAddressManagementInterface;
@@ -31,7 +31,7 @@ class BillingAddressManagement implements BillingAddressManagementInterface
     /**
      * Quote repository.
      *
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -43,13 +43,13 @@ class BillingAddressManagement implements BillingAddressManagementInterface
     /**
      * Constructs a quote billing address service object.
      *
-     * @param QuoteRepository $quoteRepository Quote repository.
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository Quote repository.
      * @param QuoteAddressValidator $addressValidator Address validator.
      * @param Logger $logger Logger.
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
      */
     public function __construct(
-        QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         QuoteAddressValidator $addressValidator,
         Logger $logger,
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
diff --git a/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php b/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php
index 77802348230abc4923fb529f29ff8011c297eaa5..c6b5d331bc7e76600117c87b21f1bba0385b5747 100644
--- a/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php
+++ b/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php
@@ -6,7 +6,7 @@
 namespace Magento\Quote\Model\Cart;
 
 use Magento\Quote\Api;
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Quote\Api\CartTotalRepositoryInterface;
 use Magento\Catalog\Helper\Product\ConfigurationPool;
 use Magento\Framework\Api\DataObjectHelper;
@@ -29,7 +29,7 @@ class CartTotalRepository implements CartTotalRepositoryInterface
     /**
      * Quote repository.
      *
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     private $quoteRepository;
 
@@ -55,7 +55,7 @@ class CartTotalRepository implements CartTotalRepositoryInterface
 
     /**
      * @param Api\Data\TotalsInterfaceFactory $totalsFactory
-     * @param QuoteRepository $quoteRepository
+     * @param CartRepositoryInterface $quoteRepository
      * @param DataObjectHelper $dataObjectHelper
      * @param CouponManagementInterface $couponService
      * @param TotalsConverter $totalsConverter
@@ -63,7 +63,7 @@ class CartTotalRepository implements CartTotalRepositoryInterface
      */
     public function __construct(
         Api\Data\TotalsInterfaceFactory $totalsFactory,
-        QuoteRepository $quoteRepository,
+        CartRepositoryInterface $quoteRepository,
         DataObjectHelper $dataObjectHelper,
         CouponManagementInterface $couponService,
         TotalsConverter $totalsConverter,
diff --git a/app/code/Magento/Quote/Model/CouponManagement.php b/app/code/Magento/Quote/Model/CouponManagement.php
index c57172b122c8bf323810b012fd8c8414b49e0b0c..77732e6133c19cd2d1c91671e9b49cc072f76c1a 100644
--- a/app/code/Magento/Quote/Model/CouponManagement.php
+++ b/app/code/Magento/Quote/Model/CouponManagement.php
@@ -20,17 +20,17 @@ class CouponManagement implements CouponManagementInterface
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
     /**
      * Constructs a coupon read service object.
      *
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository Quote repository.
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository Quote repository.
      */
     public function __construct(
-        \Magento\Quote\Model\QuoteRepository $quoteRepository
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     ) {
         $this->quoteRepository = $quoteRepository;
     }
diff --git a/app/code/Magento/Quote/Model/GuestCart/GuestCartItemRepository.php b/app/code/Magento/Quote/Model/GuestCart/GuestCartItemRepository.php
index c0519dbf6fcac58a579b7f267914fde25839ffe7..b15c2225b7f5f9a5e718497bd045c3e5325d29a9 100644
--- a/app/code/Magento/Quote/Model/GuestCart/GuestCartItemRepository.php
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestCartItemRepository.php
@@ -7,7 +7,7 @@
 namespace Magento\Quote\Model\GuestCart;
 
 use Magento\Quote\Api\Data\CartItemInterface;
-use Magento\Quote\Model\Quote\Item\Repository;
+use Magento\Quote\Api\CartItemRepositoryInterface;
 use Magento\Quote\Model\QuoteIdMask;
 use Magento\Quote\Model\QuoteIdMaskFactory;
 
@@ -17,7 +17,7 @@ use Magento\Quote\Model\QuoteIdMaskFactory;
 class GuestCartItemRepository implements \Magento\Quote\Api\GuestCartItemRepositoryInterface
 {
     /**
-     * @var Repository
+     * @var \Magento\Quote\Api\CartItemRepositoryInterface
      */
     protected $repository;
 
@@ -29,11 +29,11 @@ class GuestCartItemRepository implements \Magento\Quote\Api\GuestCartItemReposit
     /**
      * Constructs a read service object.
      *
-     * @param \Magento\Quote\Model\Quote\Item\Repository $repository
+     * @param \Magento\Quote\Api\CartItemRepositoryInterface $repository
      * @param QuoteIdMaskFactory $quoteIdMaskFactory
      */
     public function __construct(
-        \Magento\Quote\Model\Quote\Item\Repository $repository,
+        \Magento\Quote\Api\CartItemRepositoryInterface $repository,
         QuoteIdMaskFactory $quoteIdMaskFactory
     ) {
         $this->quoteIdMaskFactory = $quoteIdMaskFactory;
diff --git a/app/code/Magento/Quote/Model/GuestCart/GuestCartTotalManagement.php b/app/code/Magento/Quote/Model/GuestCart/GuestCartTotalManagement.php
index 92a806211f093bfcc92bb6126db9c61c5e677d99..10220a262974edbb428e637d79891d38b3e5b91e 100644
--- a/app/code/Magento/Quote/Model/GuestCart/GuestCartTotalManagement.php
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestCartTotalManagement.php
@@ -14,7 +14,7 @@ use Magento\Quote\Api\GuestCartTotalManagementInterface;
 class GuestCartTotalManagement implements GuestCartTotalManagementInterface
 {
     /**
-     * @var \Magento\Quote\Model\Cart\CartTotalManagement
+     * @var \Magento\Quote\Api\CartTotalManagementInterface
      */
     protected $cartTotalManagement;
 
@@ -24,11 +24,11 @@ class GuestCartTotalManagement implements GuestCartTotalManagementInterface
     protected $quoteIdMaskFactory;
 
     /**
-     * @param \Magento\Quote\Model\Cart\CartTotalManagement $cartTotalManagement
+     * @param \Magento\Quote\Api\CartTotalManagementInterface $cartTotalManagement
      * @param QuoteIdMaskFactory $quoteIdMaskFactory
      */
     public function __construct(
-        \Magento\Quote\Model\Cart\CartTotalManagement $cartTotalManagement,
+        \Magento\Quote\Api\CartTotalManagementInterface $cartTotalManagement,
         QuoteIdMaskFactory $quoteIdMaskFactory
     ) {
         $this->cartTotalManagement = $cartTotalManagement;
diff --git a/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagement.php b/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagement.php
index 789466d1e0421446dfee67c09eacc09563f11c1b..8180e372a9c2e54ab9e30c46dc282849787d32b3 100644
--- a/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagement.php
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagement.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\Quote\Model\GuestCart;
 
-use Magento\Quote\Api\GuestShippingAddressManagementInterface;
+use Magento\Quote\Model\GuestCart\GuestShippingAddressManagementInterface;
 use Magento\Quote\Model\QuoteIdMask;
 use Magento\Quote\Model\QuoteIdMaskFactory;
-use Magento\Quote\Api\ShippingAddressManagementInterface;
+use Magento\Quote\Model\ShippingAddressManagementInterface;
 
 /**
  * Shipping address management class for guest carts.
diff --git a/app/code/Magento/Quote/Api/GuestShippingAddressManagementInterface.php b/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagementInterface.php
similarity index 96%
rename from app/code/Magento/Quote/Api/GuestShippingAddressManagementInterface.php
rename to app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagementInterface.php
index 79207e8af1b114f9f17531d070ebfd6d4ae47b37..fd4054293452b644a635fc45e1be434d866893ba 100644
--- a/app/code/Magento/Quote/Api/GuestShippingAddressManagementInterface.php
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestShippingAddressManagementInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Api;
+namespace Magento\Quote\Model\GuestCart;
 
 /**
  * Shipping address management interface for guest carts.
diff --git a/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagement.php b/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagement.php
index 6026ff8f8da0406a98dcc1beaf5212c816e81df6..7201ba0d035abf56215b58076d9101f33275cdaa 100644
--- a/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagement.php
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagement.php
@@ -6,7 +6,6 @@
 
 namespace Magento\Quote\Model\GuestCart;
 
-use Magento\Quote\Api\GuestShippingMethodManagementInterface;
 use Magento\Quote\Api\ShippingMethodManagementInterface;
 use Magento\Quote\Model\QuoteIdMask;
 use Magento\Quote\Model\QuoteIdMaskFactory;
@@ -14,7 +13,9 @@ use Magento\Quote\Model\QuoteIdMaskFactory;
 /**
  * Shipping method management class for guest carts.
  */
-class GuestShippingMethodManagement implements GuestShippingMethodManagementInterface
+class GuestShippingMethodManagement implements
+    \Magento\Quote\Api\GuestShippingMethodManagementInterface,
+    \Magento\Quote\Model\GuestCart\GuestShippingMethodManagementInterface
 {
     /**
      * @var ShippingMethodManagementInterface
diff --git a/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagementInterface.php b/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagementInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e292dbf512e24911da205d9ac3b7e5d6346f0b7
--- /dev/null
+++ b/app/code/Magento/Quote/Model/GuestCart/GuestShippingMethodManagementInterface.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Quote\Model\GuestCart;
+
+interface GuestShippingMethodManagementInterface
+{
+    /**
+     * Set the carrier and shipping methods codes for a specified cart.
+     *
+     * @param string $cartId The shopping cart ID.
+     * @param string $carrierCode The carrier code.
+     * @param string $methodCode The shipping method code.
+     * @return bool
+     * @throws \Magento\Framework\Exception\InputException The shipping method is not valid for an empty cart.
+     * @throws \Magento\Framework\Exception\CouldNotSaveException The shipping method could not be saved.
+     * @throws \Magento\Framework\Exception\StateException The billing or shipping address is not set.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified cart contains only virtual products
+     * so the shipping method does not apply.
+     */
+    public function set($cartId, $carrierCode, $methodCode);
+
+    /**
+     * Return selected shipping method for a specified quote.
+     *
+     * @param string $cartId The shopping cart ID.
+     * @return \Magento\Quote\Api\Data\ShippingMethodInterface Shipping method.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified shopping cart does not exist.
+     * @throws \Magento\Framework\Exception\StateException The shipping address is not set.
+     */
+    public function get($cartId);
+}
diff --git a/app/code/Magento/Quote/Model/Quote.php b/app/code/Magento/Quote/Model/Quote.php
index 29779c1e22ab2d74badb06587ae4b4bd9782333d..46908d940705b04ab92fc50b5dff07ce806b79d6 100644
--- a/app/code/Magento/Quote/Model/Quote.php
+++ b/app/code/Magento/Quote/Model/Quote.php
@@ -344,6 +344,13 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
      */
     protected $shippingAssignmentFactory;
 
+    /**
+     * Quote shipping addresses items cache
+     *
+     * @var array
+     */
+    protected $shippingAddressesItems;
+
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
@@ -1861,28 +1868,13 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         return $payment;
     }
 
-    /**
-     * @param string $paymentId
-     * @return bool
-     * @SuppressWarnings(PHPMD.BooleanGetMethodName)
-     */
-    public function getPaymentById($paymentId)
-    {
-        foreach ($this->getPaymentsCollection() as $payment) {
-            if ($payment->getId() == $paymentId) {
-                return $payment;
-            }
-        }
-        return false;
-    }
-
     /**
      * Adds a payment to quote
      *
      * @param PaymentInterface $payment
      * @return $this
      */
-    public function addPayment(PaymentInterface $payment)
+    protected function addPayment(PaymentInterface $payment)
     {
         $payment->setQuote($this);
         if (!$payment->getId()) {
@@ -2413,6 +2405,48 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         return $this->_getData(self::KEY_CHECKOUT_METHOD);
     }
 
+    /**
+     * Get quote items assigned to different quote addresses populated per item qty.
+     * Based on result array we can display each item separately
+     *
+     * @return array
+     */
+    public function getShippingAddressesItems()
+    {
+        if ($this->shippingAddressesItems !== null) {
+            return $this->shippingAddressesItems;
+        }
+        $items = [];
+        $addresses = $this->getAllAddresses();
+        foreach ($addresses as $address) {
+            foreach ($address->getAllItems() as $item) {
+                if ($item->getParentItemId()) {
+                    continue;
+                }
+                if ($item->getProduct()->getIsVirtual()) {
+                    $items[] = $item;
+                    continue;
+                }
+                if ($item->getQty() > 1) {
+                    for ($itemIndex = 0, $itemQty = $item->getQty(); $itemIndex < $itemQty; $itemIndex++) {
+                        if ($itemIndex == 0) {
+                            $addressItem = $item;
+                        } else {
+                            $addressItem = clone $item;
+                        }
+                        $addressItem->setQty(1)->setCustomerAddressId($address->getCustomerAddressId())->save();
+                        $items[] = $addressItem;
+                    }
+                } else {
+                    $item->setCustomerAddressId($address->getCustomerAddressId());
+                    $items[] = $item;
+                }
+            }
+        }
+        $this->shippingAddressesItems = $items;
+        return $items;
+    }
+
     /**
      * Sets the payment method that is used to process the cart.
      *
diff --git a/app/code/Magento/Quote/Model/Quote/Item/Repository.php b/app/code/Magento/Quote/Model/Quote/Item/Repository.php
index 3d28a4c84fbca31e970b6c2600b9664ec9ec2057..b5234d081be57a0a5bc4b9ee07347745fc3e6012 100644
--- a/app/code/Magento/Quote/Model/Quote/Item/Repository.php
+++ b/app/code/Magento/Quote/Model/Quote/Item/Repository.php
@@ -16,7 +16,7 @@ class Repository implements \Magento\Quote\Api\CartItemRepositoryInterface
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -38,13 +38,13 @@ class Repository implements \Magento\Quote\Api\CartItemRepositoryInterface
     protected $cartItemProcessors;
 
     /**
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\Quote\Api\Data\CartItemInterfaceFactory $itemDataFactory
      * @param CartItemProcessorInterface[] $cartItemProcessors
      */
     public function __construct(
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Quote\Api\Data\CartItemInterfaceFactory $itemDataFactory,
         array $cartItemProcessors = []
diff --git a/app/code/Magento/Quote/Model/QuoteManagement.php b/app/code/Magento/Quote/Model/QuoteManagement.php
index 89e1471e362310d508b6ba37f249786d6f664fb8..76c56739e840d8755721ef060d2ac89f0a2d7c2a 100644
--- a/app/code/Magento/Quote/Model/QuoteManagement.php
+++ b/app/code/Magento/Quote/Model/QuoteManagement.php
@@ -80,7 +80,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
     protected $userContext;
 
     /**
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -119,6 +119,11 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
      */
     protected $accountManagement;
 
+    /**
+     * @var QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param EventManager $eventManager
      * @param QuoteValidator $quoteValidator
@@ -130,7 +135,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
      * @param ToOrderItemConverter $quoteItemToOrderItem
      * @param ToOrderPaymentConverter $quotePaymentToOrderPayment
      * @param UserContextInterface $userContext
-     * @param QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
      * @param \Magento\Customer\Model\CustomerFactory $customerModelFactory
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
@@ -138,6 +143,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
      * @param \Magento\Checkout\Model\Session $checkoutSession
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Api\AccountManagementInterface $accountManagement
+     * @param QuoteFactory $quoteFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -151,14 +157,15 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
         ToOrderItemConverter $quoteItemToOrderItem,
         ToOrderPaymentConverter $quotePaymentToOrderPayment,
         UserContextInterface $userContext,
-        QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
         \Magento\Customer\Model\CustomerFactory $customerModelFactory,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
         StoreManagerInterface $storeManager,
         \Magento\Checkout\Model\Session $checkoutSession,
         \Magento\Customer\Model\Session $customerSession,
-        \Magento\Customer\Api\AccountManagementInterface $accountManagement
+        \Magento\Customer\Api\AccountManagementInterface $accountManagement,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory
     ) {
         $this->eventManager = $eventManager;
         $this->quoteValidator = $quoteValidator;
@@ -178,6 +185,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
         $this->checkoutSession = $checkoutSession;
         $this->accountManagement = $accountManagement;
         $this->customerSession = $customerSession;
+        $this->quoteFactory = $quoteFactory;
     }
 
     /**
@@ -256,7 +264,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
     protected function createAnonymousCart($storeId)
     {
         /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->quoteRepository->create();
+        $quote = $this->quoteFactory->create();
         $quote->setStoreId($storeId);
         return $quote;
     }
@@ -277,7 +285,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
             $quote = $this->quoteRepository->getActiveForCustomer($customerId);
         } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
             /** @var \Magento\Quote\Model\Quote $quote */
-            $quote = $this->quoteRepository->create();
+            $quote = $this->quoteFactory->create();
             $quote->setStoreId($storeId);
             $quote->setCustomer($customer);
             $quote->setCustomerIsGuest(0);
@@ -343,7 +351,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
     }
 
     /**
-     * Delete quote item
+     * Submit quote
      *
      * @param Quote $quote
      * @param array $orderData
diff --git a/app/code/Magento/Quote/Model/QuoteRepository.php b/app/code/Magento/Quote/Model/QuoteRepository.php
index 58ba4a79e94f01b45b0853c22ea4bb85f63041a0..d788275f40fffecfe12e82b07abb964f818c26ef 100644
--- a/app/code/Magento/Quote/Model/QuoteRepository.php
+++ b/app/code/Magento/Quote/Model/QuoteRepository.php
@@ -78,23 +78,7 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Create new quote
-     *
-     * @param array $data
-     * @return Quote
-     */
-    public function create(array $data = [])
-    {
-        return $this->quoteFactory->create($data);
-    }
-
-    /**
-     * Get quote by id
-     *
-     * @param int $cartId
-     * @param int[] $sharedStoreIds
-     * @throws NoSuchEntityException
-     * @return \Magento\Quote\Api\Data\CartInterface
+     * {@inheritdoc}
      */
     public function get($cartId, array $sharedStoreIds = [])
     {
@@ -107,12 +91,7 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Get quote by customer Id
-     *
-     * @param int $customerId
-     * @param int[] $sharedStoreIds
-     * @return Quote
-     * @throws NoSuchEntityException
+     * {@inheritdoc}
      */
     public function getForCustomer($customerId, array $sharedStoreIds = [])
     {
@@ -125,12 +104,7 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Get active quote by id
-     *
-     * @param int $cartId
-     * @param int[] $sharedStoreIds
-     * @return Quote
-     * @throws NoSuchEntityException
+     * {@inheritdoc}
      */
     public function getActive($cartId, array $sharedStoreIds = [])
     {
@@ -142,12 +116,7 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Get active quote by customer Id
-     *
-     * @param int $customerId
-     * @param int[] $sharedStoreIds
-     * @return Quote
-     * @throws NoSuchEntityException
+     * {@inheritdoc}
      */
     public function getActiveForCustomer($customerId, array $sharedStoreIds = [])
     {
@@ -159,12 +128,9 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Save quote
-     *
-     * @param Quote $quote
-     * @return void
+     * {@inheritdoc}
      */
-    public function save(Quote $quote)
+    public function save(\Magento\Quote\Api\Data\CartInterface $quote)
     {
         $quote->save();
         unset($this->quotesById[$quote->getId()]);
@@ -172,12 +138,9 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     }
 
     /**
-     * Delete quote
-     *
-     * @param Quote $quote
-     * @return void
+     * {@inheritdoc}
      */
-    public function delete(Quote $quote)
+    public function delete(\Magento\Quote\Api\Data\CartInterface $quote)
     {
         $quoteId = $quote->getId();
         $customerId = $quote->getCustomerId();
diff --git a/app/code/Magento/Quote/Model/QuoteRepository/Plugin/Authorization.php b/app/code/Magento/Quote/Model/QuoteRepository/Plugin/Authorization.php
index 14b7752728d1143352592b7a567cac0f57653c48..8f710a2f9cb4f104b56e60a2c34c74c85d1021f5 100644
--- a/app/code/Magento/Quote/Model/QuoteRepository/Plugin/Authorization.php
+++ b/app/code/Magento/Quote/Model/QuoteRepository/Plugin/Authorization.php
@@ -28,14 +28,14 @@ class Authorization
     /**
      * Check if quote is allowed
      *
-     * @param \Magento\Quote\Model\QuoteRepository $subject
+     * @param \Magento\Quote\Api\CartRepositoryInterface $subject
      * @param \Magento\Quote\Model\Quote $quote
      * @return \Magento\Quote\Model\Quote
      * @throws \Magento\Framework\Exception\NoSuchEntityException
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterGetActive(
-        \Magento\Quote\Model\QuoteRepository $subject,
+        \Magento\Quote\Api\CartRepositoryInterface $subject,
         \Magento\Quote\Model\Quote $quote
     ) {
         if (!$this->isAllowed($quote)) {
@@ -47,14 +47,14 @@ class Authorization
     /**
      * Check if quote is allowed
      *
-     * @param \Magento\Quote\Model\QuoteRepository $subject
+     * @param \Magento\Quote\Api\CartRepositoryInterface $subject
      * @param \Magento\Quote\Model\Quote $quote
      * @return \Magento\Quote\Model\Quote
      * @throws \Magento\Framework\Exception\NoSuchEntityException
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterGetActiveForCustomer(
-        \Magento\Quote\Model\QuoteRepository $subject,
+        \Magento\Quote\Api\CartRepositoryInterface $subject,
         \Magento\Quote\Model\Quote $quote
     ) {
         if (!$this->isAllowed($quote)) {
diff --git a/app/code/Magento/Quote/Model/ShippingAddressManagement.php b/app/code/Magento/Quote/Model/ShippingAddressManagement.php
index d87ea33696b52e134be3c2d659e2d68221b59c6e..2726458a946383209f4cb0405de716c89e0f73df 100644
--- a/app/code/Magento/Quote/Model/ShippingAddressManagement.php
+++ b/app/code/Magento/Quote/Model/ShippingAddressManagement.php
@@ -8,18 +8,17 @@ namespace Magento\Quote\Model;
 use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Psr\Log\LoggerInterface as Logger;
-use Magento\Quote\Api\ShippingAddressManagementInterface;
 
 /**
  * Quote shipping address write service object.
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class ShippingAddressManagement implements ShippingAddressManagementInterface
+class ShippingAddressManagement implements \Magento\Quote\Model\ShippingAddressManagementInterface
 {
     /**
      * Quote repository.
      *
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -53,7 +52,7 @@ class ShippingAddressManagement implements ShippingAddressManagementInterface
     protected $totalsCollector;
 
     /**
-     * @param QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param QuoteAddressValidator $addressValidator
      * @param Logger $logger
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
@@ -62,7 +61,7 @@ class ShippingAddressManagement implements ShippingAddressManagementInterface
      *
      */
     public function __construct(
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         QuoteAddressValidator $addressValidator,
         Logger $logger,
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
diff --git a/app/code/Magento/Quote/Api/ShippingAddressManagementInterface.php b/app/code/Magento/Quote/Model/ShippingAddressManagementInterface.php
similarity index 97%
rename from app/code/Magento/Quote/Api/ShippingAddressManagementInterface.php
rename to app/code/Magento/Quote/Model/ShippingAddressManagementInterface.php
index be106920d34e3053d49f29a65671fc2a4bdf7620..3b810511fc7559886653b5c663cf5062ebf24a98 100644
--- a/app/code/Magento/Quote/Api/ShippingAddressManagementInterface.php
+++ b/app/code/Magento/Quote/Model/ShippingAddressManagementInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Api;
+namespace Magento\Quote\Model;
 
 /**
  * Interface ShippingAddressManagementInterface
diff --git a/app/code/Magento/Quote/Model/ShippingMethodManagement.php b/app/code/Magento/Quote/Model/ShippingMethodManagement.php
index 88e778e4363bc43a771a67105dea70c08d5c0e22..400591f71cd131e077911cb6a91c6e81ba0e2e30 100644
--- a/app/code/Magento/Quote/Model/ShippingMethodManagement.php
+++ b/app/code/Magento/Quote/Model/ShippingMethodManagement.php
@@ -9,18 +9,19 @@ use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\StateException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Exception\CouldNotSaveException;
-use Magento\Quote\Api\ShippingMethodManagementInterface;
 
 /**
  * Shipping method read service.
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class ShippingMethodManagement implements ShippingMethodManagementInterface
+class ShippingMethodManagement implements
+    \Magento\Quote\Api\ShippingMethodManagementInterface,
+    \Magento\Quote\Model\ShippingMethodManagementInterface
 {
     /**
      * Quote repository.
      *
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -46,13 +47,13 @@ class ShippingMethodManagement implements ShippingMethodManagementInterface
     /**
      * Constructs a shipping method read service object.
      *
-     * @param QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param Cart\ShippingMethodConverter $converter
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
      * @param Quote\TotalsCollector $totalsCollector
      */
     public function __construct(
-        QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         Cart\ShippingMethodConverter $converter,
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector
diff --git a/app/code/Magento/Quote/Model/ShippingMethodManagementInterface.php b/app/code/Magento/Quote/Model/ShippingMethodManagementInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c58dfba3cdcde069c6413dc9b76872a825e95d32
--- /dev/null
+++ b/app/code/Magento/Quote/Model/ShippingMethodManagementInterface.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Quote\Model;
+
+interface ShippingMethodManagementInterface
+{
+    /**
+     * Sets the carrier and shipping methods codes for a specified cart.
+     *
+     * @param int $cartId The shopping cart ID.
+     * @param string $carrierCode The carrier code.
+     * @param string $methodCode The shipping method code.
+     * @return bool
+     * @throws \Magento\Framework\Exception\InputException The shipping method is not valid for an empty cart.
+     * @throws \Magento\Framework\Exception\CouldNotSaveException The shipping method could not be saved.
+     * @throws \Magento\Framework\Exception\StateException The billing or shipping address is not set.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified cart contains only virtual products
+     * so the shipping method does not apply.
+     */
+    public function set($cartId, $carrierCode, $methodCode);
+
+    /**
+     * Returns selected shipping method for a specified quote.
+     *
+     * @param int $cartId The shopping cart ID.
+     * @return \Magento\Quote\Api\Data\ShippingMethodInterface Shipping method.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException The specified shopping cart does not exist.
+     * @throws \Magento\Framework\Exception\StateException The shipping address is not set.
+     */
+    public function get($cartId);
+}
diff --git a/app/code/Magento/Quote/Observer/Backend/CustomerQuoteObserver.php b/app/code/Magento/Quote/Observer/Backend/CustomerQuoteObserver.php
index 36ef6b156a074c428c667ada00be93013d345a61..479c8e731f8f039b40e71024161f310ea07082a1 100644
--- a/app/code/Magento/Quote/Observer/Backend/CustomerQuoteObserver.php
+++ b/app/code/Magento/Quote/Observer/Backend/CustomerQuoteObserver.php
@@ -7,7 +7,7 @@ namespace Magento\Quote\Observer\Backend;
 
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Customer\Model\Config\Share as ShareConfig;
-use Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 use Magento\Framework\Event\Observer;
 use Magento\Framework\Event\ObserverInterface;
 
@@ -27,19 +27,19 @@ class CustomerQuoteObserver implements ObserverInterface
     protected $storeManager;
 
     /**
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
     /**
      * @param StoreManagerInterface $storeManager
      * @param ShareConfig $config
-     * @param QuoteRepository $quoteRepository
+     * @param CartRepositoryInterface $quoteRepository
      */
     public function __construct(
         StoreManagerInterface $storeManager,
         ShareConfig $config,
-        QuoteRepository $quoteRepository
+        CartRepositoryInterface $quoteRepository
     ) {
         $this->storeManager = $storeManager;
         $this->config = $config;
diff --git a/app/code/Magento/Quote/Test/Unit/Model/BillingAddressManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/BillingAddressManagementTest.php
index 8ddc3c5f8b7fbd0d69f65f53280129243219e160..bf9600b344529aff76c7d097c2cda85c8a1efc30 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/BillingAddressManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/BillingAddressManagementTest.php
@@ -43,7 +43,7 @@ class BillingAddressManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = new ObjectManager($this);
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->validatorMock = $this->getMock('\Magento\Quote\Model\QuoteAddressValidator', [], [], '', false);
         $this->addressRepository = $this->getMock('\Magento\Customer\Api\AddressRepositoryInterface');
         $logger = $this->getMock('\Psr\Log\LoggerInterface');
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalManagementTest.php
index 949d05f360fde87683b73e2ec86031be2f7793f7..0f2d98bc8d731b88db8092b1956475e1ea5cbb40 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalManagementTest.php
@@ -32,14 +32,14 @@ class CartTotalManagementTest extends \PHPUnit_Framework_TestCase
     protected $cartTotalMock;
 
     /**
-     * @var \Magento\Quote\Model\Cart\CartTotalManagement
+     * @var \Magento\Quote\Api\CartTotalManagementInterface
      */
     protected $model;
 
     protected function setUp()
     {
         $this->objectManager = new ObjectManager($this);
-        $this->shippingMock = $this->getMock('\Magento\Quote\Api\ShippingMethodManagementInterface', [], [], '', false);
+        $this->shippingMock = $this->getMock('\Magento\Quote\Model\ShippingMethodManagement', [], [], '', false);
         $this->paymentMock = $this->getMock('\Magento\Quote\Api\PaymentMethodManagementInterface', [], [], '', false);
         $this->cartTotalMock = $this->getMock('\Magento\Quote\Api\CartTotalRepositoryInterface', [], [], '', false);
         $this->model = $this->objectManager->getObject(
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalRepositoryTest.php b/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalRepositoryTest.php
index bdc8c37af0cc38941b190b4b730628b8b5aa2c7a..11291ed01b8160328158865194e2acdf2c5f2baf 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalRepositoryTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Cart/CartTotalRepositoryTest.php
@@ -85,7 +85,7 @@ class CartTotalRepositoryTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->addressMock = $this->getMock(
             'Magento\Quote\Model\Quote\Address',
             ['getData', 'getTotals'],
diff --git a/app/code/Magento/Quote/Test/Unit/Model/CouponManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/CouponManagementTest.php
index dc119a34be8a532f02115b22d1482bac427f8b56..dc2a22b3aa15b365f4bd91f4f6c29624f2a81bfa 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/CouponManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/CouponManagementTest.php
@@ -40,7 +40,7 @@ class CouponManagementTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->storeMock = $this->getMock('\Magento\Store\Model\Store', [], [], '', false);
         $this->quoteMock = $this->getMock(
             '\Magento\Quote\Model\Quote',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartItemRepositoryTest.php b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartItemRepositoryTest.php
index 9535e3c1c7455e063d9fa7770e48e15616ede6a0..6d8fd124e76aaff5c90c280ebba3ca607bd1cf8f 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartItemRepositoryTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartItemRepositoryTest.php
@@ -79,7 +79,7 @@ class GuestCartItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('setQuoteId')
             ->with($this->cartId);
 
-        $this->cartItemRepositoryMock = $this->getMock('\Magento\Quote\Model\Quote\Item\Repository', [], [], '', false);
+        $this->cartItemRepositoryMock = $this->getMock('\Magento\Quote\Api\CartItemRepositoryInterface');
         $this->guestCartItemRepository =
             $objectManager->getObject(
                 'Magento\Quote\Model\GuestCart\GuestCartItemRepository',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartManagementTest.php
index 63d84bec059de46d29a4662cd3c7fec5cc82229c..bab6ee59683e4e07d3ab6207e384bf89b9787c31 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestCartManagementTest.php
@@ -72,13 +72,7 @@ class GuestCartManagementTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->cartRepositoryMock = $this->getMock(
-            'Magento\Quote\Api\CartRepositoryInterface',
-            ['get', 'getList'],
-            [],
-            '',
-            false
-        );
+        $this->cartRepositoryMock = $this->getMock('Magento\Quote\Api\CartRepositoryInterface');
 
         $this->quoteMock = $this->getMockForAbstractClass(
             'Magento\Quote\Api\Data\CartInterface',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingAddressManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingAddressManagementTest.php
index 67e35a93bf73c07409993caf9926d5fc77232301..f32a480cd883544a44a58cdb2bb2d2daf392e6c2 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingAddressManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingAddressManagementTest.php
@@ -9,7 +9,7 @@ namespace Magento\Quote\Test\Unit\Model\GuestCart;
 class GuestShippingAddressManagementTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Quote\Api\GuestShippingAddressManagementInterface
+     * @var \Magento\Quote\Model\GuestCart\GuestShippingAddressManagementInterface
      */
     protected $model;
 
@@ -48,7 +48,7 @@ class GuestShippingAddressManagementTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->shippingAddressManagementMock = $this->getMock(
-            'Magento\Quote\Api\ShippingAddressManagementInterface',
+            'Magento\Quote\Model\ShippingAddressManagementInterface',
             [],
             [],
             '',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingMethodManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingMethodManagementTest.php
index c91510a165fac2c1ecbacf3400cfba4b6f6d5be1..8b691214af989639cdd55207887777a6331b4ab4 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingMethodManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/GuestCart/GuestShippingMethodManagementTest.php
@@ -44,8 +44,7 @@ class GuestShippingMethodManagementTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->shippingMethodManagementMock =
-            $this->getMockBuilder('Magento\Quote\Api\ShippingMethodManagementInterface')
-            ->getMockForAbstractClass();
+            $this->getMock('Magento\Quote\Model\ShippingMethodManagement', [], [], '', false);
 
         $this->maskedCartId = 'f216207248d65c789b17be8545e0aa73';
         $this->cartId = 867;
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RepositoryTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RepositoryTest.php
index e4a2901609c6eae9df103748002f446e176c8d36..3a957b4936bc390a6684258ed0015e12771b6300 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RepositoryTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RepositoryTest.php
@@ -7,12 +7,10 @@
 
 namespace Magento\Quote\Test\Unit\Model\Quote\Item;
 
-use Magento\Quote\Model\Quote\Item\Repository;
-
 class RepositoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var Repository
+     * @var \Magento\Quote\Api\CartItemRepositoryInterface
      */
     protected $repository;
 
@@ -59,10 +57,8 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->quoteRepositoryMock =
-            $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
-        $this->productRepositoryMock =
-            $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
+        $this->productRepositoryMock = $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface');
         $this->itemDataFactoryMock =
             $this->getMock('Magento\Quote\Api\Data\CartItemInterfaceFactory', ['create'], [], '', false);
         $this->dataMock = $this->getMock('Magento\Quote\Model\Quote\Item', [], [], '', false);
@@ -79,7 +75,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->repository = new Repository(
+        $this->repository = new \Magento\Quote\Model\Quote\Item\Repository(
             $this->quoteRepositoryMock,
             $this->productRepositoryMock,
             $this->itemDataFactoryMock,
@@ -386,7 +382,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
         $itemId = 5;
         $buyRequest = $this->getMock('Magento\Framework\DataObject', [], [], '', false);
         $cartItemProcessorMock = $this->getMock('\Magento\Quote\Model\Quote\Item\CartItemProcessorInterface');
-        $this->repository = new Repository(
+        $this->repository = new \Magento\Quote\Model\Quote\Item\Repository(
             $this->quoteRepositoryMock,
             $this->productRepositoryMock,
             $this->itemDataFactoryMock,
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php
index b316ad767ad7dd8de65cc94513a784c5f899d12b..01ea8e48b752c776c090cfd7778f96304071be3f 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php
@@ -6,7 +6,6 @@
 
 namespace Magento\Quote\Test\Unit\Model;
 
-use \Magento\Quote\Model\QuoteManagement;
 use \Magento\Quote\Model\CustomerManagement;
 
 use \Magento\Framework\Exception\NoSuchEntityException;
@@ -18,7 +17,7 @@ use \Magento\Framework\Exception\NoSuchEntityException;
 class QuoteManagementTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var QuoteManagement
+     * @var \Magento\Quote\Model\QuoteManagement
      */
     protected $model;
 
@@ -63,7 +62,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
     protected $orderManagement;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Api\CartRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteRepositoryMock;
 
@@ -117,6 +116,11 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
      */
     protected $quoteMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $quoteFactoryMock;
+
     /**
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
@@ -157,7 +161,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
         $this->quoteItemToOrderItem = $this->getMock('Magento\Quote\Model\Quote\Item\ToOrderItem', [], [], '', false);
         $this->orderManagement = $this->getMock('Magento\Sales\Api\OrderManagementInterface', [], [], '', false);
         $this->customerManagement = $this->getMock('Magento\Quote\Model\CustomerManagement', [], [], '', false);
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
 
         $this->userContextMock = $this->getMock('\Magento\Authorization\Model\UserContextInterface', [], [], '', false);
         $this->customerRepositoryMock = $this->getMock(
@@ -220,8 +224,10 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
             false
         );
 
+        $this->quoteFactoryMock = $this->getMock('\Magento\Quote\Model\QuoteFactory', ['create'], [], '', false);
+
         $this->model = $objectManager->getObject(
-            'Magento\Quote\Model\QuoteManagement',
+            '\Magento\Quote\Model\QuoteManagement',
             [
                 'eventManager' => $this->eventManager,
                 'quoteValidator' => $this->quoteValidator,
@@ -241,6 +247,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
                 'checkoutSession' => $this->checkoutSessionMock,
                 'customerSession' => $this->customerSessionMock,
                 'accountManagement' => $this->accountManagementMock,
+                'quoteFactory' => $this->quoteFactoryMock
             ]
         );
     }
@@ -252,7 +259,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
 
         $quoteMock = $this->getMock('\Magento\Quote\Model\Quote', [], [], '', false);
 
-        $this->quoteRepositoryMock->expects($this->once())->method('create')->willReturn($quoteMock);
+        $this->quoteFactoryMock->expects($this->once())->method('create')->willReturn($quoteMock);
         $quoteMock->expects($this->any())->method('setStoreId')->with($storeId);
 
         $this->quoteRepositoryMock->expects($this->once())->method('save')->with($quoteMock);
@@ -278,7 +285,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
             ->with($userId)
             ->willThrowException(new NoSuchEntityException());
 
-        $this->quoteRepositoryMock->expects($this->once())->method('create')->willReturn($quoteMock);
+        $this->quoteFactoryMock->expects($this->once())->method('create')->willReturn($quoteMock);
         $quoteMock->expects($this->any())->method('setStoreId')->with($storeId);
         $quoteMock->expects($this->any())->method('setCustomerIsGuest')->with(0);
 
@@ -303,7 +310,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
             ->method('getActiveForCustomer')
             ->with($userId)->willReturn($quoteMock);
 
-        $this->quoteRepositoryMock->expects($this->never())->method('create')->willReturn($quoteMock);
+        $this->quoteFactoryMock->expects($this->never())->method('create')->willReturn($quoteMock);
         $this->quoteRepositoryMock->expects($this->once())->method('save')->with($quoteMock);
 
         $this->storeManagerMock->expects($this->once())->method('getStore')->willReturnSelf();
@@ -686,6 +693,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
                 'checkoutSession' => $this->checkoutSessionMock,
                 'customerSession' => $this->customerSessionMock,
                 'accountManagement' => $this->accountManagementMock,
+                'quoteFactory' => $this->quoteFactoryMock
             ]
         );
         $orderMock = $this->getMock(
@@ -742,6 +750,7 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
                 'checkoutSession' => $this->checkoutSessionMock,
                 'customerSession' => $this->customerSessionMock,
                 'accountManagement' => $this->accountManagementMock,
+                'quoteFactory' => $this->quoteFactoryMock
             ]
         );
         $orderMock = $this->getMock(
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/Plugin/AuthorizationTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/Plugin/AuthorizationTest.php
index da8e89cb3435ed016de3acc05432047af14f8394..24c72dc676b437f4026ea0f6a87a89da4a64b0d4 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/Plugin/AuthorizationTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepository/Plugin/AuthorizationTest.php
@@ -37,7 +37,7 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase
     {
         // Quote without customer ID
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
-        $quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->userContextMock->expects($this->any())
             ->method('getUserType')
             ->willReturn(UserContextInterface::USER_TYPE_CUSTOMER);
@@ -48,7 +48,7 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase
     public function testAfterGetActiveReturnsQuoteIfQuoteIsAllowedForCurrentUserContext()
     {
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
-        $quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->userContextMock->expects($this->any())
             ->method('getUserType')
             ->willReturn(UserContextInterface::USER_TYPE_GUEST);
@@ -63,7 +63,7 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase
     {
         // Quote without customer ID
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
-        $quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->userContextMock->expects($this->any())->method('getUserType')->willReturn(
             UserContextInterface::USER_TYPE_CUSTOMER
         );
@@ -74,7 +74,7 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase
     public function testAfterGetActiveForCustomerReturnsQuoteIfQuoteIsAllowedForCurrentUserContext()
     {
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
-        $quoteRepositoryMock = $this->getMock('Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->userContextMock->expects($this->any())
             ->method('getUserType')
             ->willReturn(UserContextInterface::USER_TYPE_GUEST);
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
index 3213329b5e1ec812d63c01ba85645909131d998f..4b4cd113eb70b6fab4b871e674d49e5fa32839be 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
@@ -7,7 +7,7 @@
 
 namespace Magento\Quote\Test\Unit\Model;
 
-use \Magento\Quote\Model\QuoteRepository;
+use Magento\Quote\Api\CartRepositoryInterface;
 
 use Magento\Framework\Api\SortOrder;
 use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
@@ -15,7 +15,7 @@ use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
 class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $model;
 
@@ -109,21 +109,6 @@ class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testCreate()
-    {
-        $this->quoteFactoryMock->expects($this->once())
-            ->method('create')
-            ->with([1, 2, 3])
-            ->willReturn($this->quoteMock);
-        $this->storeManagerMock->expects($this->never())->method('getStore');
-        $this->storeMock->expects($this->never())->method('getId');
-        $this->quoteMock->expects($this->never())->method('setSharedStoreIds');
-        $this->quoteMock->expects($this->never())->method('load');
-        $this->quoteMock->expects($this->never())->method('getId');
-
-        $this->assertEquals($this->quoteMock, $this->model->create([1, 2, 3]));
-    }
-
     /**
      * @expectedException \Magento\Framework\Exception\NoSuchEntityException
      * @expectedExceptionMessage No such entity with cartId = 14
diff --git a/app/code/Magento/Quote/Test/Unit/Model/ShippingAddressManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/ShippingAddressManagementTest.php
index a62cb7f5598eb887ebe1573e16ab17be19af3571..55c9b862a60cbee55220ac6e3b8835454297cf53 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/ShippingAddressManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ShippingAddressManagementTest.php
@@ -50,7 +50,7 @@ class ShippingAddressManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->scopeConfigMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
 
         $this->quoteAddressMock = $this->getMock(
diff --git a/app/code/Magento/Quote/Test/Unit/Model/ShippingMethodManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/ShippingMethodManagementTest.php
index fd760977a6c89f57308b2142d4acd827af06bfa4..64241f12923e6911c328a99bdadfdf2e4d9e8c6f 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/ShippingMethodManagementTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ShippingMethodManagementTest.php
@@ -57,7 +57,7 @@ class ShippingMethodManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = new ObjectManager($this);
-        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Model\QuoteRepository', [], [], '', false);
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->methodDataFactoryMock = $this->getMock(
             '\Magento\Quote\Api\Data\ShippingMethodInterfaceFactory',
             [
diff --git a/app/code/Magento/Quote/Test/Unit/Observer/Backend/CustomerQuoteObserverTest.php b/app/code/Magento/Quote/Test/Unit/Observer/Backend/CustomerQuoteObserverTest.php
index 27470a6fad0ab6ed469995abcda0b6016228bdda..64813788601e5d8d4e3fe26e69d2a29fe82872a0 100644
--- a/app/code/Magento/Quote/Test/Unit/Observer/Backend/CustomerQuoteObserverTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Observer/Backend/CustomerQuoteObserverTest.php
@@ -26,7 +26,7 @@ class CustomerQuoteObserverTest extends \PHPUnit_Framework_TestCase
     protected $configMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\\Magento\Quote\Model\QuoteRepository
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepositoryMock;
 
@@ -48,10 +48,7 @@ class CustomerQuoteObserverTest extends \PHPUnit_Framework_TestCase
         $this->configMock = $this->getMockBuilder('Magento\Customer\Model\Config\Share')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->quoteRepositoryMock = $this->getMockBuilder('\Magento\Quote\Model\QuoteRepository')
-            ->disableOriginalConstructor()
-            ->setMethods(['getForCustomer', 'save'])
-            ->getMock();
+        $this->quoteRepositoryMock = $this->getMock('\Magento\Quote\Api\CartRepositoryInterface');
         $this->observerMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Quote/etc/di.xml b/app/code/Magento/Quote/etc/di.xml
index 17cadb026c9cbd4692c9fa2ae9ab1807c960d37d..035be5e144cf59a6625434ac34b18d6d77ff605d 100644
--- a/app/code/Magento/Quote/etc/di.xml
+++ b/app/code/Magento/Quote/etc/di.xml
@@ -9,7 +9,7 @@
     <preference for="Magento\Quote\Api\ShippingMethodManagementInterface" type="Magento\Quote\Model\ShippingMethodManagement" />
     <preference for="Magento\Quote\Api\Data\ShippingMethodInterface" type="Magento\Quote\Model\Cart\ShippingMethod" />
     <preference for="Magento\Quote\Api\BillingAddressManagementInterface" type="Magento\Quote\Model\BillingAddressManagement" />
-    <preference for="Magento\Quote\Api\ShippingAddressManagementInterface" type="Magento\Quote\Model\ShippingAddressManagement" />
+    <preference for="Magento\Quote\Model\ShippingAddressManagementInterface" type="Magento\Quote\Model\ShippingAddressManagement" />
     <preference for="Magento\Quote\Api\Data\AddressInterface" type="Magento\Quote\Model\Quote\Address" />
     <preference for="Magento\Quote\Api\Data\CartItemInterface" type="Magento\Quote\Model\Quote\Item" />
     <preference for="Magento\Quote\Api\Data\CartInterface" type="Magento\Quote\Model\Quote" />
@@ -33,7 +33,7 @@
     <preference for="Magento\Quote\Api\GuestCouponManagementInterface" type="Magento\Quote\Model\GuestCart\GuestCouponManagement" />
     <preference for="Magento\Quote\Api\GuestPaymentMethodManagementInterface" type="Magento\Quote\Model\GuestCart\GuestPaymentMethodManagement" />
     <preference for="Magento\Quote\Api\GuestCartTotalRepositoryInterface" type="Magento\Quote\Model\GuestCart\GuestCartTotalRepository" />
-    <preference for="Magento\Quote\Api\GuestShippingAddressManagementInterface" type="Magento\Quote\Model\GuestCart\GuestShippingAddressManagement" />
+    <preference for="Magento\Quote\Model\GuestCart\GuestShippingAddressManagementInterface" type="Magento\Quote\Model\GuestCart\GuestShippingAddressManagement" />
     <preference for="Magento\Quote\Api\GuestShippingMethodManagementInterface" type="Magento\Quote\Model\GuestCart\GuestShippingMethodManagement" />
     <preference for="Magento\Quote\Api\GuestBillingAddressManagementInterface" type="Magento\Quote\Model\GuestCart\GuestBillingAddressManagement" />
     <preference for="Magento\Quote\Api\GuestCartTotalManagementInterface" type="\Magento\Quote\Model\GuestCart\GuestCartTotalManagement" />
@@ -85,4 +85,6 @@
     <preference for="Magento\Quote\Api\Data\TotalsAdditionalDataInterface" type="Magento\Quote\Model\Cart\TotalsAdditionalData" />
     <preference for="Magento\Quote\Model\Quote\Address\CustomAttributeListInterface" type="Magento\Quote\Model\Quote\Address\CustomAttributeList" />
     <preference for="Magento\Quote\Model\Quote\Address\FreeShippingInterface" type="Magento\Quote\Model\Quote\Address\FreeShipping" />
+    <preference for="Magento\Quote\Model\GuestCart\GuestShippingMethodManagementInterface" type="Magento\Quote\Model\GuestCart\GuestShippingMethodManagement" />
+    <preference for="Magento\Quote\Model\ShippingMethodManagementInterface" type="Magento\Quote\Model\ShippingMethodManagement" />
 </config>
diff --git a/app/code/Magento/Quote/etc/webapi.xml b/app/code/Magento/Quote/etc/webapi.xml
index 51edb6dc074a6afe71303e627128ba2470302f1d..49bb504c59928bf2e62e9b66f33a35e464f80b87 100644
--- a/app/code/Magento/Quote/etc/webapi.xml
+++ b/app/code/Magento/Quote/etc/webapi.xml
@@ -98,18 +98,6 @@
     </route>
 
     <!-- Managing Cart Shipment Method -->
-    <route url="/V1/carts/:cartId/selected-shipping-method" method="PUT">
-        <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="set"/>
-        <resources>
-            <resource ref="Magento_Cart::manage" />
-        </resources>
-    </route>
-    <route url="/V1/carts/:cartId/selected-shipping-method" method="GET">
-        <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="get"/>
-        <resources>
-            <resource ref="anonymous" />
-        </resources>
-    </route>
     <route url="/V1/carts/:cartId/shipping-methods" method="GET">
         <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
         <resources>
@@ -118,24 +106,6 @@
     </route>
 
     <!-- Managing My Cart Shipment Method -->
-    <route url="/V1/carts/mine/selected-shipping-method" method="PUT">
-        <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="set"/>
-        <resources>
-            <resource ref="self" />
-        </resources>
-        <data>
-            <parameter name="cartId" force="true">%cart_id%</parameter>
-        </data>
-    </route>
-    <route url="/V1/carts/mine/selected-shipping-method" method="GET">
-        <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="get"/>
-        <resources>
-            <resource ref="self" />
-        </resources>
-        <data>
-            <parameter name="cartId" force="true">%cart_id%</parameter>
-        </data>
-    </route>
     <route url="/V1/carts/mine/shipping-methods" method="GET">
         <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
         <resources>
@@ -165,18 +135,6 @@
     </route>
 
     <!-- Managing Guest Cart Shipment Method -->
-    <route url="/V1/guest-carts/:cartId/selected-shipping-method" method="PUT">
-        <service class="Magento\Quote\Api\GuestShippingMethodManagementInterface" method="set"/>
-        <resources>
-            <resource ref="anonymous" />
-        </resources>
-    </route>
-    <route url="/V1/guest-carts/:cartId/selected-shipping-method" method="GET">
-        <service class="Magento\Quote\Api\GuestShippingMethodManagementInterface" method="get"/>
-        <resources>
-            <resource ref="anonymous" />
-        </resources>
-    </route>
     <route url="/V1/guest-carts/:cartId/shipping-methods" method="GET">
         <service class="Magento\Quote\Api\GuestShippingMethodManagementInterface" method="getList"/>
         <resources>
@@ -197,13 +155,13 @@
             <resource ref="Magento_Cart::manage" />
         </resources>
     </route>
-    <route url="/V1/carts/items" method="POST">
+    <route url="/V1/carts/:cartId/items" method="POST">
         <service class="Magento\Quote\Api\CartItemRepositoryInterface" method="save"/>
         <resources>
             <resource ref="Magento_Catalog::products" />
         </resources>
     </route>
-    <route url="/V1/carts/items/:itemId" method="PUT">
+    <route url="/V1/carts/:cartId/items/:itemId" method="PUT">
         <service class="Magento\Quote\Api\CartItemRepositoryInterface" method="save"/>
         <resources>
             <resource ref="Magento_Cart::manage" />
@@ -223,13 +181,13 @@
             <resource ref="anonymous" />
         </resources>
     </route>
-    <route url="/V1/guest-carts/items" method="POST">
+    <route url="/V1/guest-carts/:cartId/items" method="POST">
         <service class="Magento\Quote\Api\GuestCartItemRepositoryInterface" method="save"/>
         <resources>
             <resource ref="anonymous" />
         </resources>
     </route>
-    <route url="/V1/guest-carts/items/:itemId" method="PUT">
+    <route url="/V1/guest-carts/:cartId/items/:itemId" method="PUT">
         <service class="Magento\Quote\Api\GuestCartItemRepositoryInterface" method="save"/>
         <resources>
             <resource ref="anonymous" />
@@ -466,54 +424,6 @@
         </data>
     </route>
 
-    <!-- Managing Cart Shipping address -->
-    <route url="/V1/carts/:cartId/shipping-address" method="GET">
-        <service class="Magento\Quote\Api\ShippingAddressManagementInterface" method="get"/>
-        <resources>
-            <resource ref="Magento_Cart::manage" />
-        </resources>
-    </route>
-    <route url="/V1/carts/:cartId/shipping-address" method="POST">
-        <service class="Magento\Quote\Api\ShippingAddressManagementInterface" method="assign"/>
-        <resources>
-            <resource ref="Magento_Cart::manage" />
-        </resources>
-    </route>
-
-    <!-- Managing Guest Cart Shipping address -->
-    <route url="/V1/guest-carts/:cartId/shipping-address" method="GET">
-        <service class="Magento\Quote\Api\GuestShippingAddressManagementInterface" method="get"/>
-        <resources>
-            <resource ref="anonymous" />
-        </resources>
-    </route>
-    <route url="/V1/guest-carts/:cartId/shipping-address" method="POST">
-        <service class="Magento\Quote\Api\GuestShippingAddressManagementInterface" method="assign"/>
-        <resources>
-            <resource ref="anonymous" />
-        </resources>
-    </route>
-
-    <!-- Managing My Cart Shipping address -->
-    <route url="/V1/carts/mine/shipping-address" method="GET">
-        <service class="Magento\Quote\Api\ShippingAddressManagementInterface" method="get"/>
-        <resources>
-            <resource ref="self" />
-        </resources>
-        <data>
-            <parameter name="cartId" force="true">%cart_id%</parameter>
-        </data>
-    </route>
-    <route url="/V1/carts/mine/shipping-address" method="POST">
-        <service class="Magento\Quote\Api\ShippingAddressManagementInterface" method="assign"/>
-        <resources>
-            <resource ref="self" />
-        </resources>
-        <data>
-            <parameter name="cartId" force="true">%cart_id%</parameter>
-        </data>
-    </route>
-
     <!-- Managing Cart Order -->
     <route url="/V1/carts/:cartId/order" method="PUT">
         <service class="Magento\Quote\Api\CartManagementInterface" method="placeOrder"/>
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
index 1f7fe62304519f215152ce6e5932b86ef27d9bbb..4a81d3d4c86ab03f9dad735cc511a67da8c5930e 100644
--- a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
@@ -57,7 +57,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti
     protected $_orderEntityField;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
@@ -83,7 +83,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource
      * @param mixed $connection
@@ -103,7 +103,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DataObject\Copy\Config $fieldsetConfig,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory,
         \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
diff --git a/app/code/Magento/Review/Block/Form.php b/app/code/Magento/Review/Block/Form.php
index 2bcc859bdd4f7f557c630d186297a5bdf8a2f185..8efe29b58e719a8c421ccd2e09bd7b9c96565d13 100644
--- a/app/code/Magento/Review/Block/Form.php
+++ b/app/code/Magento/Review/Block/Form.php
@@ -158,7 +158,13 @@ class Form extends \Magento\Framework\View\Element\Template
      */
     public function getAction()
     {
-        return $this->getUrl('review/product/post', ['id' => $this->getProductId()]);
+        return $this->getUrl(
+            'review/product/post',
+            [
+                '_secure' => $this->getRequest()->isSecure(),
+                'id' => $this->getProductId(),
+            ]
+        );
     }
 
     /**
diff --git a/app/code/Magento/Review/Block/Product/Review.php b/app/code/Magento/Review/Block/Product/Review.php
index 02764dc5123f1f59535e6865bb9024a361f9d635..bae4bd8dc5db56001f9e808f34b0fe5533ba7bbc 100644
--- a/app/code/Magento/Review/Block/Product/Review.php
+++ b/app/code/Magento/Review/Block/Product/Review.php
@@ -66,7 +66,13 @@ class Review extends Template implements IdentityInterface
      */
     public function getProductReviewUrl()
     {
-        return $this->getUrl('review/product/listAjax', ['id' => $this->getProductId()]);
+        return $this->getUrl(
+            'review/product/listAjax',
+            [
+                '_secure' => $this->getRequest()->isSecure(),
+                'id' => $this->getProductId(),
+            ]
+        );
     }
 
     /**
diff --git a/app/code/Magento/Review/Test/Unit/Block/FormTest.php b/app/code/Magento/Review/Test/Unit/Block/FormTest.php
index 03f004f470c5727ad38c252c7503bd00dfca163e..b237ddc28be2ec8e4316e7bb988d4cce24f1218a 100644
--- a/app/code/Magento/Review/Test/Unit/Block/FormTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/FormTest.php
@@ -34,6 +34,9 @@ class FormTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $storeManager;
 
+    /** @var \Magento\Framework\UrlInterface|PHPUnit_Framework_MockObject_MockObject */
+    protected $urlBuilder;
+
     protected function setUp()
     {
         $this->storeManager = $this->getMock('\Magento\Store\Model\StoreManagerInterface');
@@ -46,6 +49,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
             ->method('getIsGuestAllowToWrite')
             ->willReturn(true);
 
+        $this->urlBuilder = $this->getMockBuilder('Magento\Framework\UrlInterface')->getMockForAbstractClass();
         $this->context = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false);
         $this->context->expects(
             $this->any()
@@ -57,6 +61,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->any())
             ->method('getRequest')
             ->willReturn($this->requestMock);
+        $this->context->expects($this->any())->method('getUrlBuilder')->willReturn($this->urlBuilder);
         $this->productRepository = $this->getMock('\Magento\Catalog\Api\ProductRepositoryInterface');
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
@@ -96,4 +101,35 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
         $this->assertSame($productMock, $this->object->getProductInfo());
     }
+
+    /**
+     * @param bool $isSecure
+     * @param string $actionUrl
+     * @param int $productId
+     * @dataProvider getActionDataProvider
+     */
+    public function testGetAction($isSecure, $actionUrl, $productId)
+    {
+        $this->urlBuilder->expects($this->any())
+            ->method('getUrl')
+            ->with('review/product/post', ['_secure' => $isSecure, 'id' => $productId])
+            ->willReturn($actionUrl . '/id/' . $productId);
+        $this->requestMock->expects($this->any())
+            ->method('getParam')
+            ->with('id', false)
+            ->willReturn($productId);
+        $this->requestMock->expects($this->any())
+            ->method('isSecure')
+            ->willReturn($isSecure);
+
+        $this->assertEquals($actionUrl . '/id/' . $productId, $this->object->getAction());
+    }
+
+    public function getActionDataProvider()
+    {
+        return [
+            [false, 'http://localhost/review/product/post', 3],
+            [true, 'https://localhost/review/product/post' ,3],
+        ];
+    }
 }
diff --git a/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
index 0bc6dd49473e2f59ec96f7313e98a4bdc1f32963..2ed841081169cfda04fbeb58a7f2f4e443bb7b26 100644
--- a/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
@@ -58,6 +58,15 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
      */
     private $store;
 
+    /** @var \Magento\Framework\View\Element\Template\Context|\PHPUnit_Framework_MockObject_MockObject */
+    protected $context;
+
+    /** @var \Magento\Framework\UrlInterface|PHPUnit_Framework_MockObject_MockObject */
+    protected $urlBuilder;
+
+    /** @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $requestMock;
+
     protected function setUp()
     {
         $this->initContextMock();
@@ -66,7 +75,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
 
         $helper = new ObjectManager($this);
         $this->block = $helper->getObject(ReviewBlock::class, [
-            'storeManager' => $this->storeManager,
+            'context' => $this->context,
             'registry' => $this->registry,
             'collectionFactory' => $this->collectionFactory,
         ]);
@@ -124,7 +133,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['registry'])
             ->getMock();
 
-        $this->registry->expects(static::once())
+        $this->registry->expects($this->any())
             ->method('registry')
             ->with('product')
             ->willReturn($this->product);
@@ -159,5 +168,44 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
         $this->storeManager->expects(static::any())
             ->method('getStore')
             ->willReturn($this->store);
+        $this->urlBuilder = $this->getMockBuilder('Magento\Framework\UrlInterface')->getMockForAbstractClass();
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->getMockForAbstractClass();
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\Template\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getRequest')->willReturn($this->requestMock);
+        $this->context->expects($this->any())->method('getUrlBuilder')->willReturn($this->urlBuilder);
+        $this->context->expects($this->any())->method('getStoreManager')->willReturn($this->storeManager);
+    }
+
+    /**
+     * @param bool $isSecure
+     * @param string $actionUrl
+     * @param int $productId
+     * @dataProvider getProductReviewUrlDataProvider
+     */
+    public function testGetProductReviewUrl($isSecure, $actionUrl, $productId)
+    {
+        $this->urlBuilder->expects($this->any())
+            ->method('getUrl')
+            ->with('review/product/listAjax', ['_secure' => $isSecure, 'id' => $productId])
+            ->willReturn($actionUrl . '/id/' . $productId);
+        $this->product->expects($this->any())
+            ->method('getId')
+            ->willReturn($productId);
+        $this->requestMock->expects($this->any())
+            ->method('isSecure')
+            ->willReturn($isSecure);
+
+        $this->assertEquals($actionUrl . '/id/' . $productId, $this->block->getProductReviewUrl());
+    }
+
+    public function getProductReviewUrlDataProvider()
+    {
+        return [
+            [false, 'http://localhost/review/product/listAjax', 3],
+            [true, 'https://localhost/review/product/listAjax' ,3],
+        ];
     }
 }
diff --git a/app/code/Magento/Sales/Model/AdminOrder/Create.php b/app/code/Magento/Sales/Model/AdminOrder/Create.php
index 244cc11fdb3840949ca2e2927141ef51152fb424..0f3c58cfd6098bdf8b93ad9bc8b1d4b33218b894 100644
--- a/app/code/Magento/Sales/Model/AdminOrder/Create.php
+++ b/app/code/Magento/Sales/Model/AdminOrder/Create.php
@@ -200,12 +200,12 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
     protected $customerMapper;
 
     /**
-     * @var \Magento\Quote\Model\QuoteRepository
+     * @var \Magento\Quote\Api\CartRepositoryInterface
      */
     protected $quoteRepository;
 
     /**
-     * @var \Magento\Quote\Model\QuoteManagement
+     * @var \Magento\Quote\Api\CartManagementInterface
      */
     protected $quoteManagement;
 
@@ -219,6 +219,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
      */
     protected $orderManagement;
 
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory
+     */
+    protected $quoteFactory;
+
     /**
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -239,13 +244,14 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param Item\Updater $quoteItemUpdater
      * @param \Magento\Framework\DataObject\Factory $objectFactory
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
+     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
      * @param \Magento\Customer\Api\AccountManagementInterface $accountManagement
      * @param \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory
      * @param \Magento\Customer\Model\Customer\Mapper $customerMapper
-     * @param \Magento\Quote\Model\QuoteManagement $quoteManagement
+     * @param \Magento\Quote\Api\CartManagementInterface $quoteManagement
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      * @param \Magento\Sales\Api\OrderManagementInterface $orderManagement
+     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -269,13 +275,14 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         \Magento\Quote\Model\Quote\Item\Updater $quoteItemUpdater,
         \Magento\Framework\DataObject\Factory $objectFactory,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
+        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
         \Magento\Customer\Api\AccountManagementInterface $accountManagement,
         \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory,
         \Magento\Customer\Model\Customer\Mapper $customerMapper,
-        \Magento\Quote\Model\QuoteManagement $quoteManagement,
+        \Magento\Quote\Api\CartManagementInterface $quoteManagement,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
         \Magento\Sales\Api\OrderManagementInterface $orderManagement,
+        \Magento\Quote\Model\QuoteFactory $quoteFactory,
         array $data = []
     ) {
         $this->_objectManager = $objectManager;
@@ -304,6 +311,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
         $this->quoteManagement = $quoteManagement;
         $this->dataObjectHelper = $dataObjectHelper;
         $this->orderManagement = $orderManagement;
+        $this->quoteFactory = $quoteFactory;
         parent::__construct($data);
     }
 
@@ -681,7 +689,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
             return $this->_cart;
         }
 
-        $this->_cart = $this->quoteRepository->create();
+        $this->_cart = $this->quoteFactory->create();
 
         $customerId = (int)$this->getSession()->getCustomerId();
         if ($customerId) {
diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/CartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/CartItemRepositoryTest.php
index 9cb6aebe8099e0f566fb09382288dd1b5664eb54..8442c0cfc8bb9283fe98fd4b1c8d9e028116a548 100644
--- a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/CartItemRepositoryTest.php
@@ -94,7 +94,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items',
+                'resourcePath' => self::RESOURCE_PATH . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
             ],
             'soap' => [
@@ -161,7 +161,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => self::RESOURCE_PATH . $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CartItemRepositoryTest.php
index dbd5c8b3d2eeb6e72499a855bba0de053f446ca3..27a0c4b31552dc770a3ab9b25c7e17798ac4bf7c 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CartItemRepositoryTest.php
@@ -13,7 +13,6 @@ class CartItemRepositoryTest extends WebapiAbstract
 {
     const SERVICE_NAME = 'quoteCartItemRepositoryV1';
     const SERVICE_VERSION = 'V1';
-    const RESOURCE_PATH = '/V1/carts/items';
     const SIMPLE_PRODUCT_SKU = 'simple';
 
     /**
@@ -43,7 +42,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH,
+                'resourcePath' => '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php
index 07e00fa1a0bec28ff8b998dceaeee155683d338a..f2b73461e04fac6f74371d717249fe389ebecb92 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php
@@ -12,7 +12,6 @@ class CartItemRepositoryTest extends WebapiAbstract
 {
     const SERVICE_NAME = 'quoteCartItemRepositoryV1';
     const SERVICE_VERSION = 'V1';
-    const RESOURCE_PATH = '/V1/carts/items';
     const CONFIGURABLE_PRODUCT_SKU = 'configurable';
 
     /**
@@ -38,7 +37,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH,
+                'resourcePath' => '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
             ],
             'soap' => [
@@ -83,7 +82,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH,
+                'resourcePath' =>  '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
             ],
             'soap' => [
@@ -122,7 +121,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . '/1000',
+                'resourcePath' =>  '/V1/carts/' . $cartId . '/items/1000',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT
             ],
             'soap' => [
@@ -171,7 +170,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . '/' . $item->getId(),
+                'resourcePath' =>  '/V1/carts/' . $cartId . '/items/' . $item->getId(),
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT
             ],
             'soap' => [
@@ -248,7 +247,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . '/' . $item->getId(),
+                'resourcePath' =>  '/V1/carts/' . $cartId . '/items/' . $item->getId(),
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/CartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/CartItemRepositoryTest.php
index 9e3512653a71820ada050b1b8dabd1cc3dd5cad6..bc6cc445e62c6c9723874a70f2f5c16b6c66de3e 100644
--- a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/CartItemRepositoryTest.php
@@ -11,7 +11,6 @@ class CartItemRepositoryTest extends WebapiAbstract
 {
     const SERVICE_VERSION = 'V1';
     const SERVICE_NAME = 'quoteCartItemRepositoryV1';
-    const RESOURCE_PATH = '/V1/carts/';
 
     /**
      * @var \Magento\TestFramework\ObjectManager
@@ -38,7 +37,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $cartId = $quote->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items',
+                'resourcePath' => '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
             ],
             'soap' => [
@@ -95,7 +94,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $productSku = $product->getSku();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items',
+                'resourcePath' => '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
             ],
             'soap' => [
@@ -139,7 +138,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $itemId = $quote->getAllItems()[0]->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => '/V1/carts/' . $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
@@ -202,7 +201,7 @@ class CartItemRepositoryTest extends WebapiAbstract
                 'operation' => self::SERVICE_NAME . 'Save',
             ],
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => '/V1/carts/' . $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
         ];
@@ -262,7 +261,7 @@ class CartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/items',
+                'resourcePath' => '/V1/carts/' . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
             ],
             'soap' => [
@@ -291,7 +290,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $itemId = $quote->getAllItems()[0]->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => '/V1/carts/' . $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/CartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/CartItemRepositoryTest.php
index fd3039508d8a176de0b5e3e043832d77d149f0b0..b1bf5b93236513b4ec4c961c31dc3c66a43cf6a2 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/CartItemRepositoryTest.php
@@ -79,7 +79,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $cartId = $quote->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items',
+                'resourcePath' => self::RESOURCE_PATH .  $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
             ],
             'soap' => [
@@ -151,7 +151,7 @@ class CartItemRepositoryTest extends WebapiAbstract
         $itemId = $quote->getItemByProduct($product)->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => self::RESOURCE_PATH .  $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestCartItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestCartItemRepositoryTest.php
index e36284a6f980304829690a9059a589eaa52498dd..0ec5b0c876957abdc51ed47240e558847686d589 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestCartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestCartItemRepositoryTest.php
@@ -99,7 +99,7 @@ class GuestCartItemRepositoryTest extends WebapiAbstract
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items',
+                'resourcePath' => self::RESOURCE_PATH . $cartId . '/items',
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
             ],
             'soap' => [
@@ -189,7 +189,7 @@ class GuestCartItemRepositoryTest extends WebapiAbstract
         $itemId = $quote->getItemByProduct($product)->getId();
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'items/' . $itemId,
+                'resourcePath' => self::RESOURCE_PATH . $cartId . '/items/' . $itemId,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingAddressManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingAddressManagementTest.php
deleted file mode 100644
index 6ac15b22292da1603e0c56f1f49f99bbab2c5509..0000000000000000000000000000000000000000
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingAddressManagementTest.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Quote\Api;
-
-use Magento\Quote\Api\Data\AddressInterface;
-use Magento\TestFramework\TestCase\WebapiAbstract;
-
-class GuestShippingAddressManagementTest extends WebapiAbstract
-{
-    const SERVICE_VERSION = 'V1';
-    const SERVICE_NAME = 'quoteGuestShippingAddressManagementV1';
-    const RESOURCE_PATH = '/V1/guest-carts/';
-
-    /**
-     * @var \Magento\TestFramework\ObjectManager
-     */
-    protected $objectManager;
-
-    protected function setUp()
-    {
-        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-    }
-
-    public function tearDown()
-    {
-        $createdQuotes = ['test_order_1', 'test_order_with_virtual_product'];
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        foreach ($createdQuotes as $quoteId) {
-            $quote->load($quoteId, 'reserved_order_id');
-            $quote->delete();
-            /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-            $quoteIdMask = $this->objectManager->create('Magento\Quote\Model\QuoteIdMask');
-            $quoteIdMask->load($quote->getId(), 'quote_id');
-            $quoteIdMask->delete();
-        }
-    }
-
-    protected function getQuoteMaskedId($quoteId)
-    {
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = $this->objectManager->create('Magento\Quote\Model\QuoteIdMaskFactory')->create();
-        $quoteIdMask->load($quoteId, 'quote_id');
-        return $quoteIdMask->getMaskedId();
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testGetAddress()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Quote\Model\Quote\Address  $address */
-        $address = $quote->getShippingAddress();
-
-        $data = [
-            AddressInterface::KEY_COUNTRY_ID => $address->getCountryId(),
-            AddressInterface::KEY_ID => (int)$address->getId(),
-            AddressInterface::KEY_CUSTOMER_ID => $address->getCustomerId(),
-            AddressInterface::KEY_REGION => $address->getRegion(),
-            AddressInterface::KEY_REGION_ID => $address->getRegionId(),
-            AddressInterface::KEY_REGION_CODE => $address->getRegionCode(),
-            AddressInterface::KEY_STREET => $address->getStreet(),
-            AddressInterface::KEY_COMPANY => $address->getCompany(),
-            AddressInterface::KEY_TELEPHONE => $address->getTelephone(),
-            AddressInterface::KEY_POSTCODE => $address->getPostcode(),
-            AddressInterface::KEY_CITY => $address->getCity(),
-            AddressInterface::KEY_FIRSTNAME => $address->getFirstname(),
-            AddressInterface::KEY_LASTNAME => $address->getLastname(),
-            AddressInterface::KEY_EMAIL => $address->getEmail(),
-            AddressInterface::SAME_AS_BILLING => $address->getSameAsBilling(),
-            AddressInterface::CUSTOMER_ADDRESS_ID => $address->getCustomerAddressId(),
-            AddressInterface::SAVE_IN_ADDRESS_BOOK => $address->getSaveInAddressBook()
-        ];
-
-        $cartId = $this->getQuoteMaskedId($quote->getId());
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-
-        $requestData = ["cartId" => $cartId];
-        $response = $this->_webApiCall($serviceInfo, $requestData);
-
-        asort($data);
-        asort($response);
-        $this->assertEquals($data, $response);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     *
-     * @expectedException \Exception
-     * @expectedExceptionMessage Cart contains virtual product(s) only. Shipping address is not applicable
-     */
-    public function testGetAddressOfQuoteWithVirtualProduct()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_with_virtual_product', 'reserved_order_id');
-        $cartId = $this->getQuoteMaskedId($quote->getId());
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-
-        $this->_webApiCall($serviceInfo, ["cartId" => $cartId]);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetAddress()
-    {
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-        $cartId = $this->getQuoteMaskedId($quote->getId());
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Assign',
-            ],
-        ];
-
-        $addressData = [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => '',
-            'company' => 'eBay Inc',
-            'street' => ['Typical Street', 'Tiny House 18'],
-            'city' => 'Big City',
-            'region_id' => 12,
-            'region' => 'California',
-            'region_code' => 'CA',
-            'postcode' => '0985432',
-            'country_id' => 'US',
-            'telephone' => '88776655',
-            'fax' => '44332255',
-        ];
-        $requestData = [
-            "cartId" => $cartId,
-            'address' => $addressData,
-        ];
-
-        $addressId = $this->_webApiCall($serviceInfo, $requestData);
-
-        //reset $quote to reload data
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-        $address = $quote->getShippingAddress();
-        $address->getRegionCode();
-        $savedData  = $address->getData();
-        $this->assertEquals($addressId, $savedData['address_id'], 'Invalid address ID');
-        $this->assertEquals(0, $savedData['same_as_billing']);
-        //custom checks for street, region and address_type
-        $this->assertEquals($addressData['street'], $quote->getShippingAddress()->getStreet());
-        unset($addressData['street']);
-        unset($addressData['email']);
-
-        $this->assertEquals('shipping', $savedData['address_type']);
-        //check the rest of fields
-        foreach ($addressData as $key => $value) {
-            $this->assertEquals($value, $savedData[$key], 'Invalid value for ' . $key);
-        }
-    }
-
-    /**
-     * Set address to quote with virtual products only
-     *
-     * @expectedException \Exception
-     * @expectedExceptionMessage Cart contains virtual product(s) only. Shipping address is not applicable
-     *
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     */
-    public function testSetAddressForVirtualQuote()
-    {
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_with_virtual_product', 'reserved_order_id');
-        $cartId = $this->getQuoteMaskedId($quote->getId());
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Assign',
-            ],
-        ];
-
-        $addressData = [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'cat@dog.com',
-            'company' => 'eBay Inc',
-            'street' => ['Typical Street', 'Tiny House 18'],
-            'city' => 'Big City',
-            'region_id' => 12,
-            'region' => 'California',
-            'region_code' => 'CA',
-            'postcode' => '0985432',
-            'country_id' => 'US',
-            'telephone' => '88776655',
-            'fax' => '44332255',
-        ];
-        $requestData = [
-            "cartId" => $cartId,
-            'address' => $addressData,
-        ];
-
-        $this->_webApiCall($serviceInfo, $requestData);
-    }
-}
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingMethodManagementTest.php
index 6dbbc52e76ed71dd2888ad1abcbdfb697b82b6ee..a5f406e30aeade3e9936e0c1f555f8e536ca8c9f 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingMethodManagementTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestShippingMethodManagementTest.php
@@ -37,203 +37,6 @@ class GuestShippingMethodManagementTest extends WebapiAbstract
         $this->totalsCollector = $this->objectManager->create('Magento\Quote\Model\Quote\TotalsCollector');
     }
 
-    protected function getServiceInfo()
-    {
-        return [
-            'rest' => [
-                'resourcePath' => '/V1/carts/' . $this->quote->getId() . '/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Set',
-            ],
-        ];
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMethod()
-    {
-        $this->quote->load('test_order_1', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-
-        $cartId = $this->quote->getId();
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-        $shippingAddress = $this->quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-        $requestData = [
-            'cartId' => $cartId,
-            'carrierCode' => 'flatrate',
-            'methodCode' => 'flatrate',
-        ];
-        $result = $this->_webApiCall($serviceInfo, $requestData);
-        $this->assertEquals(true, $result);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMethodWrongMethod()
-    {
-        $expectedMessage = 'Carrier with such method not found: %1, %2';
-        $this->quote->load('test_order_1', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-        $carrierCode = 'flatrate';
-        $methodCode = 'wrongMethod';
-
-        $cartId = $this->quote->getId();
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-
-        $requestData = [
-            'cartId' => $cartId,
-            'carrierCode' => $carrierCode,
-            'methodCode' => $methodCode,
-        ];
-        try {
-            $this->_webApiCall($serviceInfo, $requestData);
-        } catch (\SoapFault $e) {
-            $this->assertContains(
-                $expectedMessage,
-                $e->getMessage(),
-                'SoapFault does not contain expected message.'
-            );
-        } catch (\Exception $e) {
-            $errorObj = $this->processRestExceptionResult($e);
-            $this->assertEquals($expectedMessage, $errorObj['message']);
-            $this->assertEquals([$carrierCode, $methodCode], $errorObj['parameters']);
-        }
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
-     */
-    public function testSetMethodWithoutShippingAddress()
-    {
-        $this->quote->load('test_order_with_simple_product_without_address', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-
-        $cartId = $this->quote->getId();
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-
-        $requestData = [
-            'cartId' => $cartId,
-            'carrierCode' => 'flatrate',
-            'methodCode' => 'flatrate',
-        ];
-        try {
-            $this->_webApiCall($serviceInfo, $requestData);
-        } catch (\SoapFault $e) {
-            $message = $e->getMessage();
-        } catch (\Exception $e) {
-            $message = json_decode($e->getMessage())->message;
-        }
-        $this->assertEquals('Shipping address is not set', $message);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_shipping_method.php
-     */
-    public function testGetMethod()
-    {
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        $cartId = $quote->getId();
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-
-        $shippingAddress = $quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-        list($carrierCode, $methodCode) = explode('_', $shippingAddress->getShippingMethod());
-        list($carrierTitle, $methodTitle) = explode(' - ', $shippingAddress->getShippingDescription());
-        $data = [
-            ShippingMethodInterface::KEY_CARRIER_CODE => $carrierCode,
-            ShippingMethodInterface::KEY_METHOD_CODE => $methodCode,
-            ShippingMethodInterface::KEY_CARRIER_TITLE => $carrierTitle,
-            ShippingMethodInterface::KEY_METHOD_TITLE => $methodTitle,
-            ShippingMethodInterface::KEY_SHIPPING_AMOUNT => $shippingAddress->getShippingAmount(),
-            ShippingMethodInterface::KEY_BASE_SHIPPING_AMOUNT => $shippingAddress->getBaseShippingAmount(),
-            ShippingMethodInterface::KEY_AVAILABLE => true,
-            ShippingMethodInterface::KEY_ERROR_MESSAGE => null,
-        ];
-        $requestData = ["cartId" => $cartId];
-        $actual = $this->_webApiCall($this->getSelectedMethodServiceInfo($cartId), $requestData);
-        unset($actual[ShippingMethodInterface::KEY_PRICE_EXCL_TAX]);
-        unset($actual[ShippingMethodInterface::KEY_PRICE_INCL_TAX ]);
-        $this->assertEquals($data, $actual);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     */
-    public function testGetMethodOfVirtualCart()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $cartId = $quote->load('test_order_with_virtual_product', 'reserved_order_id')->getId();
-
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-
-        $result = $this->_webApiCall($this->getSelectedMethodServiceInfo($cartId), ["cartId" => $cartId]);
-        $this->assertEquals([], $result);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testGetMethodOfCartWithNoShippingMethod()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $cartId = $quote->load('test_order_1', 'reserved_order_id')->getId();
-
-        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
-        $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Quote\Model\QuoteIdMaskFactory')
-            ->create();
-        $quoteIdMask->load($cartId, 'quote_id');
-        //Use masked cart Id
-        $cartId = $quoteIdMask->getMaskedId();
-
-        $result = $this->_webApiCall($this->getSelectedMethodServiceInfo($cartId), ["cartId" => $cartId]);
-        $this->assertEquals([], $result);
-    }
-
     /**
      * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
      *
@@ -286,26 +89,6 @@ class GuestShippingMethodManagementTest extends WebapiAbstract
         $this->assertEquals($expectedData, $returnedRates);
     }
 
-    /**
-     * @param string $cartId
-     * @return array
-     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
-     */
-    protected function getSelectedMethodServiceInfo($cartId)
-    {
-        return $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-    }
-
     /**
      * Service info
      *
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingAddressManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingAddressManagementTest.php
deleted file mode 100644
index a15ea0d24fbc85d7e741e329dc266fe4cc5a8b18..0000000000000000000000000000000000000000
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingAddressManagementTest.php
+++ /dev/null
@@ -1,345 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Quote\Api;
-
-use Magento\Quote\Api\Data\AddressInterface;
-use Magento\TestFramework\TestCase\WebapiAbstract;
-
-class ShippingAddressManagementTest extends WebapiAbstract
-{
-    const SERVICE_VERSION = 'V1';
-    const SERVICE_NAME = 'quoteShippingAddressManagementV1';
-    const RESOURCE_PATH = '/V1/carts/';
-
-    /**
-     * @var \Magento\TestFramework\ObjectManager
-     */
-    protected $objectManager;
-
-    protected function setUp()
-    {
-        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testGetAddress()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Quote\Model\Quote\Address  $address */
-        $address = $quote->getShippingAddress();
-
-        $data = [
-            AddressInterface::KEY_ID => (int)$address->getId(),
-            AddressInterface::KEY_REGION => $address->getRegion(),
-            AddressInterface::KEY_REGION_ID => $address->getRegionId(),
-            AddressInterface::KEY_REGION_CODE => $address->getRegionCode(),
-            AddressInterface::KEY_COUNTRY_ID => $address->getCountryId(),
-            AddressInterface::KEY_STREET => $address->getStreet(),
-            AddressInterface::KEY_COMPANY => $address->getCompany(),
-            AddressInterface::KEY_TELEPHONE => $address->getTelephone(),
-            AddressInterface::KEY_POSTCODE => $address->getPostcode(),
-            AddressInterface::KEY_CITY => $address->getCity(),
-            AddressInterface::KEY_FIRSTNAME => $address->getFirstname(),
-            AddressInterface::KEY_LASTNAME => $address->getLastname(),
-            AddressInterface::KEY_CUSTOMER_ID => $address->getCustomerId(),
-            AddressInterface::KEY_EMAIL => $address->getEmail(),
-            AddressInterface::SAME_AS_BILLING => $address->getSameAsBilling(),
-            AddressInterface::CUSTOMER_ADDRESS_ID => $address->getCustomerAddressId(),
-            AddressInterface::SAVE_IN_ADDRESS_BOOK => $address->getSaveInAddressBook()
-
-        ];
-        $cartId = $quote->getId();
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $quote->getId() . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-
-        $requestData = ["cartId" => $cartId];
-        $response = $this->_webApiCall($serviceInfo, $requestData);
-
-        asort($data);
-        asort($response);
-        $this->assertEquals($data, $response);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     *
-     * @expectedException \Exception
-     * @expectedExceptionMessage Cart contains virtual product(s) only. Shipping address is not applicable
-     */
-    public function testGetAddressOfQuoteWithVirtualProduct()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $cartId = $quote->load('test_order_with_virtual_product', 'reserved_order_id')->getId();
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $quote->getId() . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-
-        $this->_webApiCall($serviceInfo, ["cartId" => $cartId]);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetAddress()
-    {
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $quote->getId() . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Assign',
-            ],
-        ];
-
-        $addressData = [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => '',
-            'company' => 'eBay Inc',
-            'street' => ['Typical Street', 'Tiny House 18'],
-            'city' => 'Big City',
-            'region_id' => 12,
-            'region' => 'California',
-            'region_code' => 'CA',
-            'postcode' => '0985432',
-            'country_id' => 'US',
-            'telephone' => '88776655',
-            'fax' => '44332255',
-        ];
-        $requestData = [
-            "cartId" => $quote->getId(),
-            'address' => $addressData,
-        ];
-
-        $addressId = $this->_webApiCall($serviceInfo, $requestData);
-
-        //reset $quote to reload data
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-        $address = $quote->getShippingAddress();
-        $address->getRegionCode();
-        $savedData  = $address->getData();
-        $this->assertEquals($addressId, $savedData['address_id'], 'Invalid address ID');
-        $this->assertEquals(0, $savedData['same_as_billing']);
-        //custom checks for street, region and address_type
-        $this->assertEquals($addressData['street'], $quote->getShippingAddress()->getStreet());
-        unset($addressData['street']);
-        unset($addressData['email']);
-
-        $this->assertEquals('shipping', $savedData['address_type']);
-        //check the rest of fields
-        foreach ($addressData as $key => $value) {
-            $this->assertEquals($value, $savedData[$key], 'Invalid value for ' . $key);
-        }
-    }
-
-    /**
-     * Set address to quote with virtual products only
-     *
-     * @expectedException \Exception
-     * @expectedExceptionMessage Cart contains virtual product(s) only. Shipping address is not applicable
-     *
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     */
-    public function testSetAddressForVirtualQuote()
-    {
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_with_virtual_product', 'reserved_order_id');
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $quote->getId() . '/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Assign',
-            ],
-        ];
-
-        $addressData = [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'cat@dog.com',
-            'company' => 'eBay Inc',
-            'street' => ['Typical Street', 'Tiny House 18'],
-            'city' => 'Big City',
-            'region_id' => 12,
-            'region' => 'California',
-            'region_code' => 'CA',
-            'postcode' => '0985432',
-            'country_id' => 'US',
-            'telephone' => '88776655',
-            'fax' => '44332255',
-        ];
-        $requestData = [
-            "cartId" => $quote->getId(),
-            'address' => $addressData,
-        ];
-
-        $this->_webApiCall($serviceInfo, $requestData);
-    }
-
-    /**
-     * Test getting shipping address based on the customer's authentication token.
-     *
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testGetMyAddress()
-    {
-        $this->_markTestAsRestOnly();
-
-        // get customer ID token
-        /** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
-        $customerTokenService = $this->objectManager->create(
-            'Magento\Integration\Api\CustomerTokenServiceInterface'
-        );
-        $token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
-
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Quote\Model\Quote\Address $address */
-        $address = $quote->getShippingAddress();
-
-        $addressData = [
-            AddressInterface::KEY_ID => (int)$address->getId(),
-            AddressInterface::KEY_REGION => $address->getRegion(),
-            AddressInterface::KEY_REGION_ID => $address->getRegionId(),
-            AddressInterface::KEY_REGION_CODE => $address->getRegionCode(),
-            AddressInterface::KEY_COUNTRY_ID => $address->getCountryId(),
-            AddressInterface::KEY_STREET => $address->getStreet(),
-            AddressInterface::KEY_COMPANY => $address->getCompany(),
-            AddressInterface::KEY_TELEPHONE => $address->getTelephone(),
-            AddressInterface::KEY_POSTCODE => $address->getPostcode(),
-            AddressInterface::KEY_CITY => $address->getCity(),
-            AddressInterface::KEY_FIRSTNAME => $address->getFirstname(),
-            AddressInterface::KEY_LASTNAME => $address->getLastname(),
-            AddressInterface::KEY_CUSTOMER_ID => $address->getCustomerId(),
-            AddressInterface::KEY_EMAIL => $address->getEmail(),
-            AddressInterface::SAME_AS_BILLING => $address->getSameAsBilling(),
-            AddressInterface::CUSTOMER_ADDRESS_ID => $address->getCustomerAddressId(),
-            AddressInterface::SAVE_IN_ADDRESS_BOOK => $address->getSaveInAddressBook()
-
-        ];
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'mine/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-                'token' => $token
-            ],
-        ];
-
-        $requestData = [];
-        $response = $this->_webApiCall($serviceInfo, $requestData);
-
-        asort($addressData);
-        asort($response);
-        $this->assertEquals($addressData, $response);
-    }
-
-    /**
-     * Test setting shipping address based on the customer's authentication token.
-     *
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMyAddress()
-    {
-        $this->_markTestAsRestOnly();
-
-        // get customer ID token
-        /** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
-        $customerTokenService = $this->objectManager->create(
-            'Magento\Integration\Api\CustomerTokenServiceInterface'
-        );
-        $token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
-
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . 'mine/shipping-address',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
-                'token' => $token
-            ],
-        ];
-
-        $addressData = [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'company' => 'eBay Inc',
-            'street' => ['Typical Street', 'Tiny House 18'],
-            'city' => 'Big City',
-            'region_id' => 12,
-            'region' => 'California',
-            'region_code' => 'CA',
-            'postcode' => '0985432',
-            'country_id' => 'US',
-            'telephone' => '88776655',
-            'fax' => '44332255',
-        ];
-        $requestData = [
-            'address' => $addressData,
-        ];
-
-        $addressId = $this->_webApiCall($serviceInfo, $requestData);
-
-        //reset $quote to reload data
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $quote->load('test_order_1', 'reserved_order_id');
-        $address = $quote->getShippingAddress();
-        $address->getRegionCode();
-        $savedData  = $address->getData();
-        $this->assertEquals($addressId, $savedData['address_id'], 'Invalid address ID');
-        $this->assertEquals(0, $savedData['same_as_billing']);
-        //custom checks for street, region and address_type
-        $this->assertEquals($addressData['street'], $quote->getShippingAddress()->getStreet());
-        unset($addressData['street']);
-
-        $this->assertEquals('shipping', $savedData['address_type']);
-        //check the rest of fields
-        foreach ($addressData as $key => $value) {
-            $this->assertEquals($value, $savedData[$key], 'Invalid value for ' . $key);
-        }
-    }
-}
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingMethodManagementTest.php
index a1ea0c098f373efa6cb55f628657ba751906c282..b41207e377ab0db077d7fef6cd53d08d29b0676d 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingMethodManagementTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/ShippingMethodManagementTest.php
@@ -37,241 +37,6 @@ class ShippingMethodManagementTest extends WebapiAbstract
         $this->totalsCollector = $this->objectManager->create('Magento\Quote\Model\Quote\TotalsCollector');
     }
 
-    protected function getServiceInfo()
-    {
-        return [
-            'rest' => [
-                'resourcePath' => '/V1/carts/' . $this->quote->getId() . '/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Set',
-            ],
-        ];
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMethod()
-    {
-        $this->quote->load('test_order_1', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-        $shippingAddress = $this->quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-        $requestData = [
-            'cartId' => $this->quote->getId(),
-            'carrierCode' => 'flatrate',
-            'methodCode' => 'flatrate',
-        ];
-        $result = $this->_webApiCall($serviceInfo, $requestData);
-        $this->assertEquals(true, $result);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMethodWrongMethod()
-    {
-        $expectedMessage = 'Carrier with such method not found: %1, %2';
-        $this->quote->load('test_order_1', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-        $carrierCode = 'flatrate';
-        $methodCode = 'wrongMethod';
-
-        $requestData = [
-            'cartId' => $this->quote->getId(),
-            'carrierCode' => $carrierCode,
-            'methodCode' => $methodCode,
-        ];
-        try {
-            $this->_webApiCall($serviceInfo, $requestData);
-        } catch (\SoapFault $e) {
-            $this->assertContains(
-                $expectedMessage,
-                $e->getMessage(),
-                'SoapFault does not contain expected message.'
-            );
-        } catch (\Exception $e) {
-            $errorObj = $this->processRestExceptionResult($e);
-            $this->assertEquals($expectedMessage, $errorObj['message']);
-            $this->assertEquals([$carrierCode, $methodCode], $errorObj['parameters']);
-        }
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
-     */
-    public function testSetMethodWithoutShippingAddress()
-    {
-        $this->quote->load('test_order_with_simple_product_without_address', 'reserved_order_id');
-        $serviceInfo = $this->getServiceInfo();
-
-        $requestData = [
-            'cartId' => $this->quote->getId(),
-            'carrierCode' => 'flatrate',
-            'methodCode' => 'flatrate',
-        ];
-        try {
-            $this->_webApiCall($serviceInfo, $requestData);
-        } catch (\SoapFault $e) {
-            $message = $e->getMessage();
-        } catch (\Exception $e) {
-            $message = json_decode($e->getMessage())->message;
-        }
-        $this->assertEquals('Shipping address is not set', $message);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Customer/_files/customer.php
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testSetMethodForMyCart()
-    {
-        $this->_markTestAsRestOnly();
-
-        $this->quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
-        $customerTokenService = $this->objectManager->create(
-            'Magento\Integration\Api\CustomerTokenServiceInterface'
-        );
-        $token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => '/V1/carts/mine/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
-                'token' => $token
-            ]
-        ];
-
-        $requestData = [
-            'cartId' => 999,
-            'carrierCode' => 'flatrate',
-            'methodCode' => 'flatrate',
-        ]; // cartId 999 will be overridden
-        $shippingAddress = $this->quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-        $result = $this->_webApiCall($serviceInfo, $requestData);
-        $this->assertEquals(true, $result);
-
-        /** @var \Magento\Quote\Api\ShippingMethodManagementInterface $shippingMethodManagementService */
-        $shippingMethodManagementService = $this->objectManager->create(
-            'Magento\Quote\Api\ShippingMethodManagementInterface'
-        );
-        $shippingMethod = $shippingMethodManagementService->get($this->quote->getId());
-
-        $this->assertNotNull($shippingMethod);
-        $this->assertEquals('flatrate', $shippingMethod->getCarrierCode());
-        $this->assertEquals('flatrate', $shippingMethod->getMethodCode());
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_shipping_method.php
-     */
-    public function testGetMethod()
-    {
-        $this->quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Quote\Api\ShippingMethodManagementInterface $shippingMethodManagementService */
-        $shippingMethodManagementService = $this->objectManager->create(
-            'Magento\Quote\Api\ShippingMethodManagementInterface'
-        );
-
-        $shippingAddress = $this->quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-        list($carrierCode, $methodCode) = explode('_', $shippingAddress->getShippingMethod());
-        list($carrierTitle, $methodTitle) = explode(' - ', $shippingAddress->getShippingDescription());
-        $shippingMethod = $shippingMethodManagementService->get($this->quote->getId());
-
-        $data = [
-            ShippingMethodInterface::KEY_CARRIER_CODE => $carrierCode,
-            ShippingMethodInterface::KEY_METHOD_CODE => $methodCode,
-            ShippingMethodInterface::KEY_CARRIER_TITLE => $carrierTitle,
-            ShippingMethodInterface::KEY_METHOD_TITLE => $methodTitle,
-            ShippingMethodInterface::KEY_BASE_SHIPPING_AMOUNT => $shippingAddress->getBaseShippingAmount(),
-            ShippingMethodInterface::KEY_SHIPPING_AMOUNT => $shippingAddress->getShippingAmount(),
-            ShippingMethodInterface::KEY_AVAILABLE => true,
-            ShippingMethodInterface::KEY_ERROR_MESSAGE => null,
-            ShippingMethodInterface::KEY_PRICE_EXCL_TAX => $shippingMethod->getPriceExclTax(),
-            ShippingMethodInterface::KEY_PRICE_INCL_TAX => $shippingMethod->getPriceInclTax(),
-        ];
-
-        $requestData = ["cartId" => $this->quote->getId()];
-        $this->assertEquals(
-            $data,
-            $this->_webApiCall($this->getSelectedMethodServiceInfo($this->quote->getId()), $requestData)
-        );
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
-     */
-    public function testGetMethodOfVirtualCart()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $cartId = $quote->load('test_order_with_virtual_product', 'reserved_order_id')->getId();
-
-        $result = $this->_webApiCall($this->getSelectedMethodServiceInfo($cartId), ["cartId" => $cartId]);
-        $this->assertEquals([], $result);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
-     */
-    public function testGetMethodOfCartWithNoShippingMethod()
-    {
-        $quote = $this->objectManager->create('Magento\Quote\Model\Quote');
-        $cartId = $quote->load('test_order_1', 'reserved_order_id')->getId();
-
-        $result = $this->_webApiCall($this->getSelectedMethodServiceInfo($cartId), ["cartId" => $cartId]);
-        $this->assertEquals([], $result);
-    }
-
-    /**
-     * @magentoApiDataFixture Magento/Customer/_files/customer.php
-     * @magentoApiDataFixture  Magento/Checkout/_files/quote_with_shipping_method.php
-     */
-    public function testGetMethodForMyCart()
-    {
-        $this->_markTestAsRestOnly();
-
-        $this->quote->load('test_order_1', 'reserved_order_id');
-
-        /** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
-        $customerTokenService = $this->objectManager->create(
-            'Magento\Integration\Api\CustomerTokenServiceInterface'
-        );
-        $token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
-
-        /** @var \Magento\Quote\Api\ShippingMethodManagementInterface $shippingMethodManagementService */
-        $shippingAddress = $this->quote->getShippingAddress();
-        $shippingAddress->setCollectShippingRates(true);
-        $this->totalsCollector->collectAddressTotals($this->quote, $shippingAddress);
-        $shippingAddress->save();
-
-        $serviceInfo = [
-            'rest' => [
-                'resourcePath' => '/V1/carts/mine/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-                'token' => $token
-            ]
-        ];
-
-        $result = $this->_webApiCall($serviceInfo, []);
-        $this->assertEquals('flatrate', $result[ShippingMethodInterface::KEY_CARRIER_CODE]);
-        $this->assertEquals('flatrate', $result[ShippingMethodInterface::KEY_METHOD_CODE]);
-    }
-
     /**
      * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
      *
@@ -359,26 +124,6 @@ class ShippingMethodManagementTest extends WebapiAbstract
         $this->assertEquals($expectedData, $result[0]);
     }
 
-    /**
-     * @param string $cartId
-     * @return array
-     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
-     */
-    protected function getSelectedMethodServiceInfo($cartId)
-    {
-        return $serviceInfo = [
-            'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . $cartId . '/selected-shipping-method',
-                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
-            ],
-            'soap' => [
-                'service' => self::SERVICE_NAME,
-                'serviceVersion' => self::SERVICE_VERSION,
-                'operation' => self::SERVICE_NAME . 'Get',
-            ],
-        ];
-    }
-
     /**
      * Service info
      *
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
index bdfbc3b5d157ddb23c3b4b9fab69c1abf2d27738..6e639a8a6e9c49466afd5555dbfbe9c26af9e495 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
@@ -62,9 +62,8 @@ class Webapi extends AbstractWebapi implements OrderInjectableInterface
         $this->url = $_ENV['app_frontend_url'] . 'rest/V1/carts/' . (int)$this->quote;
         $this->setProducts($fixture);
         $this->setCoupon($fixture);
-        $this->setAddress($fixture, 'billing');
-        $this->setAddress($fixture, 'shipping');
-        $this->setShippingMethod($fixture);
+        $this->setBillingAddress($fixture);
+        $this->setShippingInformation($fixture);
         $this->setPaymentMethod($fixture);
         $orderId = $this->placeOrder();
 
@@ -101,7 +100,7 @@ class Webapi extends AbstractWebapi implements OrderInjectableInterface
      */
     protected function setProducts(OrderInjectable $order)
     {
-        $url = $_ENV['app_frontend_url'] . 'rest/V1/carts/items';
+        $url = $_ENV['app_frontend_url'] . 'rest/V1/carts/' .  $this->quote . '/items';
         $products = $order->getEntityId()['products'];
         foreach ($products as $product) {
             $data = [
@@ -152,26 +151,17 @@ class Webapi extends AbstractWebapi implements OrderInjectableInterface
     }
 
     /**
-     * Set address to quote.
+     * Set billing address to quote.
      *
      * @param OrderInjectable $order
-     * @param string $addressType billing|shipping
      * @return void
      * @throws \Exception
      */
-    protected function setAddress(OrderInjectable $order, $addressType)
+    protected function setBillingAddress(OrderInjectable $order)
     {
-        $url = $this->url . "/$addressType-address";
-        if ($addressType == 'billing') {
-            $address = $order->getBillingAddressId();
-        } else {
-            if (!$order->hasData('shipping_method')) {
-                return;
-            }
-            $address = $order->hasData('shipping_address_id')
-                ? $order->getShippingAddressId()
-                : $order->getBillingAddressId();
-        }
+        $url = $this->url . "/billing-address";
+        $address = $order->getBillingAddressId();
+
         unset($address['default_billing']);
         unset($address['default_shipping']);
         foreach (array_keys($this->mappingData) as $key) {
@@ -185,32 +175,48 @@ class Webapi extends AbstractWebapi implements OrderInjectableInterface
         $this->webapiTransport->close();
         if (!is_numeric($response)) {
             $this->eventManager->dispatchEvent(['webapi_failed'], [$response]);
-            throw new \Exception("Could not set $addressType addresss to quote!");
+            throw new \Exception("Could not set billing addresss to quote!");
         }
     }
 
     /**
-     * Set shipping method to quote.
+     * Set shipping information to quote
      *
      * @param OrderInjectable $order
-     * @return void
      * @throws \Exception
      */
-    protected function setShippingMethod(OrderInjectable $order)
+    protected function setShippingInformation(OrderInjectable $order)
     {
         if (!$order->hasData('shipping_method')) {
             return;
         }
-        $url = $this->url . '/selected-shipping-method';
+        $url = $this->url . '/shipping-information';
         list($carrier, $method) = explode('_', $order->getShippingMethod());
+
+        $address = $order->hasData('shipping_address_id')
+            ? $order->getShippingAddressId()
+            : $order->getBillingAddressId();
+
+        unset($address['default_billing']);
+        unset($address['default_shipping']);
+        foreach (array_keys($this->mappingData) as $key) {
+            if (isset($address[$key])) {
+                $address[$key] = $this->mappingData[$key][$address[$key]];
+            }
+        }
+
         $data = [
-            "carrierCode" => $carrier,
-            "methodCode" => $method
+            'addressInformation' => [
+                'shippingAddress' => $address,
+                'shippingMethodCode' => $method,
+                'shippingCarrierCode' => $carrier,
+            ]
         ];
-        $this->webapiTransport->write($url, $data, WebapiDecorator::PUT);
+
+        $this->webapiTransport->write($url, $data, WebapiDecorator::POST);
         $response = json_decode($this->webapiTransport->read(), true);
         $this->webapiTransport->close();
-        if ($response !== true) {
+        if (!isset($response['payment_methods'], $response['totals'])) {
             $this->eventManager->dispatchEvent(['webapi_failed'], [$response]);
             throw new \Exception('Could not set shipping method to quote!');
         }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/quote_with_product_and_custom_options.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/quote_with_product_and_custom_options.php
index 1f78762dab688ee589bab2d01986223489463555..490bde24775b262e5c3bb9c499aa2b0d40aeaba0 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/quote_with_product_and_custom_options.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/quote_with_product_and_custom_options.php
@@ -29,8 +29,8 @@ $product = $productRepository->get('simple');
 
 /** @var \Magento\Quote\Model\Quote $quote */
 $quote = $objectManager->create('Magento\Quote\Model\Quote');
-/** @var \Magento\Quote\Model\Quote\Item\Repository  $quoteItemRepository */
-$quoteItemRepository = $objectManager->create('Magento\Quote\Model\Quote\Item\Repository');
+/** @var \Magento\Quote\Api\CartItemRepositoryInterface  $quoteItemRepository */
+$quoteItemRepository = $objectManager->create('\Magento\Quote\Api\CartItemRepositoryInterface');
 /** @var \Magento\Quote\Api\Data\CartItemInterface $cartItem */
 $cartItem = $objectManager->create('Magento\Quote\Api\Data\CartItemInterface');
 /** @var \Magento\Quote\Model\Quote\ProductOption $productOption */
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express.php
index f6231c2b8ee833218ae6fd24104da5174ab745e1..be4608b73fd656b953ceb49221950e808ee336fa 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express.php
@@ -92,7 +92,7 @@ $quote->collectTotals()->save();
 
 $quote->setCustomerEmail('admin@example.com');
 
-/** @var $service \Magento\Quote\Model\QuoteManagement */
+/** @var $service \Magento\Quote\Api\CartManagementInterface */
 $service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Quote\Model\QuoteManagement');
+    ->create('\Magento\Quote\Api\CartManagementInterface');
 $order = $service->submit($quote, ['increment_id' => '100000002']);
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express_with_customer.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express_with_customer.php
index 85bb114f679a206416136fd616703419e5ba796a..50e73b980ef84e5de6690670ff56df93a4dbf1b3 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express_with_customer.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_express_with_customer.php
@@ -80,7 +80,7 @@ $quote->getShippingAddress()->setCollectShippingRates(true);
 $quote->getPayment()->setMethod(\Magento\Paypal\Model\Config::METHOD_WPS_EXPRESS);
 $quote->collectTotals()->save();
 
-/** @var $service \Magento\Quote\Model\QuoteManagement */
+/** @var $service \Magento\Quote\Api\CartManagementInterface */
 $service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Quote\Model\QuoteManagement');
+    ->create('\Magento\Quote\Api\CartManagementInterface');
 $order = $service->submit($quote, ['increment_id' => '100000002']);
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_payflow.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_payflow.php
index cf20591b91803b5f6a62eed4d48ddd6e94e80591..7a3928f8f41b4ee2bb4bcba6d6d13740b6a0d93e 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_payflow.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_payment_payflow.php
@@ -104,7 +104,7 @@ $payment->setMethod(\Magento\Paypal\Model\Config::METHOD_WPS_EXPRESS);
 
 $quote->getPayment()->setMethod(\Magento\Paypal\Model\Config::METHOD_WPS_EXPRESS)->save();
 
-/** @var $service \Magento\Quote\Model\QuoteManagement */
+/** @var $service \Magento\Quote\Api\CartManagementInterface */
 $service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Quote\Model\QuoteManagement');
+    ->create('\Magento\Quote\Api\CartManagementInterface');
 $order = $service->submit($quote, ['increment_id' => '100000001']);
diff --git a/dev/tests/integration/testsuite/Magento/Quote/Model/Quote/Item/RepositoryTest.php b/dev/tests/integration/testsuite/Magento/Quote/Model/Quote/Item/RepositoryTest.php
index b7e78e977191f0567e6766321b3628c0c506ac4b..d604ba2d9662e8434b5284447655e449e9a6dbcf 100644
--- a/dev/tests/integration/testsuite/Magento/Quote/Model/Quote/Item/RepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Quote/Model/Quote/Item/RepositoryTest.php
@@ -20,8 +20,8 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             'email' => 'admin@example.com'
         ];
 
-        /** @var \Magento\Quote\Model\Quote\Item\Repository $quoteItemRepository */
-        $quoteItemRepository = Bootstrap::getObjectManager()->create('Magento\Quote\Model\Quote\Item\Repository');
+        /** @var \Magento\Quote\Api\CartItemRepositoryInterface $quoteItemRepository */
+        $quoteItemRepository = Bootstrap::getObjectManager()->create('\Magento\Quote\Api\CartItemRepositoryInterface');
         /** @var \Magento\Quote\Model\Quote $quote */
         $quote = Bootstrap::getObjectManager()->create('Magento\Quote\Model\Quote');
         $quoteId = $quote->load('test01', 'reserved_order_id')->getId();
diff --git a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
index 68635c4369b3c313ebe6c2ef561242bb4763b06a..1b67d126ac6e9a5c9d9ebdda27050d7a32ee42a7 100644
--- a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php
@@ -27,8 +27,8 @@ class QuoteManagementTest extends \PHPUnit_Framework_TestCase
         $quote->load('test01', 'reserved_order_id');
 
         /** Execute SUT */
-        /** @var \Magento\Quote\Model\QuoteManagement $model */
-        $model = $objectManager->create('\Magento\Quote\Model\QuoteManagement');
+        /** @var \Magento\Quote\Api\CartManagementInterface $model */
+        $model = $objectManager->create('\Magento\Quote\Api\CartManagementInterface');
         $order = $model->submit($quote);
 
         /** Check if SUT caused expected effects */
diff --git a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteRepositoryTest.php
index 0d7b1ea35f3b7ca356ea0e36875f68e454ebd040..b617f9b8fd2249b88d055c86d0c94c8c90ac302e 100644
--- a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteRepositoryTest.php
@@ -23,8 +23,8 @@ class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
         /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
         $searchCriteriaBuilder = Bootstrap::getObjectManager()->create('Magento\Framework\Api\SearchCriteriaBuilder');
 
-        /** @var \Magento\Quote\Model\QuoteRepository $quoteRepository */
-        $quoteRepository = Bootstrap::getObjectManager()->create('Magento\Quote\Model\QuoteRepository');
+        /** @var \Magento\Quote\Api\CartRepositoryInterface $quoteRepository */
+        $quoteRepository = Bootstrap::getObjectManager()->create('Magento\Quote\Api\CartRepositoryInterface');
         $searchResult = $quoteRepository->getList($searchCriteriaBuilder->create());
         $items = $searchResult->getItems();
         /** @var \Magento\Quote\Api\Data\CartInterface $actualQuote */
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_info.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_info.php
index 38cae04743920bbb33194832aa37ffebac26f458..ac4cacb4e18d3e476b0912a24a178b92666e748a 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/order_info.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_info.php
@@ -64,7 +64,7 @@ $quote->collectTotals();
 $quote->save();
 
 $quote->setCustomerEmail('admin@example.com');
-$quoteManagement = $objectManager->create('Magento\Quote\Model\QuoteManagement');
+$quoteManagement = $objectManager->create('\Magento\Quote\Api\CartManagementInterface');
 
 $order = $quoteManagement->submit($quote, ['increment_id' => '100000001']);
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
index cb80c5cf1519d361cff0ca0284d06fbad8d285c9..43db6a4f4a408f454be306ef1c75e7fe6651aec8 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -4102,5 +4102,10 @@ return [
     ['Magento\GoogleOptimizer\Model\Observer\Block\Category\Tab', 'Magento\GoogleOptimizer\Observer\*'],
     ['Magento\Payment\Model\Observer', 'Magento\Payment\Observer\*'],
     ['Magento\Tax\Observer\AggregateSalesReportTaxData', 'Magento\Tax\Model\AggregateSalesReportTaxData'],
-    ['Magento\Developer\Console\Command\CssDeployCommand']
+    ['Magento\Developer\Console\Command\CssDeployCommand'],
+    [
+        'Magento\Quote\Api\GuestShippingAddressManagementInterface',
+        'Magento\Quote\Model\GuestCart\GuestShippingAddressManagementInterface'
+    ],
+    ['Magento\Quote\Api\ShippingAddressManagementInterface', 'Magento\Quote\Model\ShippingAddressManagementInterface']
 ];
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
index ca7f4471723dc3df3850a1e2941c1adab9aa08fd..edc468092661d04da035280f5cb42dc98412bcc6 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
@@ -2485,4 +2485,10 @@ return [
     ['setCcExpYear', 'Magento\Quote\Api\Data\PaymentInterface'],
     ['getCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'],
     ['setCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['getPaymentById', 'Magento\Quote\Model\Quote'],
+    ['create', 'Magento\Quote\Model\QuoteRepository'],
+    ['set', 'Magento\Quote\Api\GuestShippingMethodManagementInterface', 'Magento\Quote\Model\GuestCart\GuestShippingMethodManagementInterface::set'],
+    ['get', 'Magento\Quote\Api\GuestShippingMethodManagementInterface', 'Magento\Quote\Model\GuestCart\GuestShippingMethodManagementInterface::get'],
+    ['get', 'Magento\Quote\Api\ShippingMethodManagementInterface', 'Magento\Quote\Model\ShippingMethodManagementInterface::get'],
+    ['set', 'Magento\Quote\Api\ShippingMethodManagementInterface', 'Magento\Quote\Model\ShippingMethodManagementInterface::get'],
 ];
diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx
index c5060028b3454fdf63b76b3faf7467e57b5cdf35..51b35ec79dd531982c8fbefa7bb2102d330363fa 100644
--- a/setup/performance-toolkit/benchmark.jmx
+++ b/setup/performance-toolkit/benchmark.jmx
@@ -5027,7 +5027,7 @@ vars.put("loadType", "Guest");</stringProp>
       <stringProp name="HTTPSampler.response_timeout"/>
       <stringProp name="HTTPSampler.protocol"/>
       <stringProp name="HTTPSampler.contentEncoding"/>
-      <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/${cart_id}/shipping-information</stringProp>
+      <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/guest-carts/${cart_id}/shipping-information</stringProp>
       <stringProp name="HTTPSampler.method">POST</stringProp>
       <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
       <boolProp name="HTTPSampler.auto_redirects">false</boolProp>